PageSourceSearch

https://jerseywolves.com/chunk-I3RLHV7K.js

js jerseywolves.com collected 2026-10-06 14:16:23 UTC 987,882 bytes, 9,757 lines download raw bytes

1import{a as ut}from"./chunk-UT5RZ5SN.js";import{c as Uo}from"./chunk-OBZUIDEP.js";import{a as Vo}from"./chunk-OHSAYPPM.js";import{a as zo}from"./chunk-SP6WZPWS.js";import{a as Lo,b as Un}from"./chunk-NE22VKN5.js";import{a as qo,b as Hn}from"./chunk-64WGMCQL.js";import{a as Va,b as Ut}from"./chunk-EU3YAAEQ.js";import{a as La,b as zt}from"./chunk-DBNHDKST.js";import{a as Ro}from"./chunk-HEWARKUE.js";import{b as _o,c as zn,d as ht}from"./chunk-TP3A6IN2.js";import{$ as Oo,R as ko,S as To,T as Io,V as Mo,W as Do,X as Fo,Z as Po,_ as Ao,aa as No,ba as Bo}from"./chunk-XNFXA3ZT.js";import{a as Ze,b as Ae}from"./chunk-TEFEWVO6.js";import{q as Wo}from"./chunk-QH3IRCHN.js";import{b as Co}from"./chunk-FSUBAQYH.js";import{$c as cn,$e as vn,$f as kn,$g as So,Ac as tt,Ae as Cr,Ag as po,Bb as qa,Bc as an,Be as _r,Bg as xo,Cc as tr,Ce as kr,Cg as ho,D as Q,Db as et,Dc as rn,De as lt,Ec as nr,Ee as bn,Fb as Se,Gb as za,Gd as cr,Gf as Lr,Gg as uo,Hb as Ht,Hd as Be,Hf as qr,Ib as Ua,If as Vr,Ig as go,Ja as Da,Jb as Ha,Jf as zr,Jg as Dn,Ka as Fa,Kb as J,Kg as fo,La as Pa,Lb as ja,Lg as Fn,Ma as Aa,Mb as le,Mg as Pn,Na as St,Ng as An,Ob as Ga,Pc as on,Qc as ir,Rc as nt,Rf as st,Sc as it,Sf as Cn,Sg as bo,Tc as ar,Te as Tr,Tf as Ur,Tg as On,Uc as rr,Ue as Ir,Uf as Hr,Ug as Nn,Vb as Y,Vc as ln,Ve as Mr,Vf as jr,Vg as Bn,Wb as ae,Wc as sn,We as Dr,Wf as _n,Wg as ct,Xb as z,Xc as at,Xe as Sn,Xf as Gr,Xg as pt,Yc as dn,Ye as En,Yg as xt,Zc as rt,Ze as Fr,Zf as $r,Zg as Wn,_c as mn,_e as Pr,_f as dt,_g as Rn,ac as jt,ad as or,ae as pr,af as Vi,ag as Tn,ah as Eo,b as be,bc as Gt,bd as lr,be as xr,bf as yn,bg as mt,bh as Ln,cc as Oe,cd as sr,cf as Ar,cg as In,ch as vo,d as U,dc as $t,dd as pn,df as Or,dg as Mn,dh as qn,e as fa,eb as Nt,ed as dr,ef as Nr,eg as Kr,fb as Bt,fc as $a,fd as xn,ff as Br,fg as Xr,g as ba,gd as mr,gf as Wr,gh as yo,h as Sa,hc as Ka,hd as hn,hf as wn,hh as Vn,ic as Xa,ie as hr,if as Rr,ig as Yr,j as Wi,jb as Oa,jc as Kt,je as ur,jg as Qr,k as H,kb as Na,kc as Xt,kd as Ne,ke as gr,kg as Jr,kh as wo,l as Ea,lc as Yt,lg as Zr,mb as Ba,mc as Qt,me as fr,mg as eo,nb as Wt,ne as br,ng as to,o as va,oe as un,og as no,pg as io,qc as Ya,qe as We,qg as ao,rc as Jt,re as Sr,sc as Qa,se as ot,t as ya,tb as Rt,tc as Zt,te as Er,tg as ro,u as Fe,ub as Lt,uc as Ja,ug as oo,v as Pe,va as Ot,vb as Wa,vc as en,ve as gn,vg as lo,wb as qt,wc as Za,we as vr,wg as so,xb as ye,xc as tn,xe as yr,xg as mo,yb as Vt,yc as er,ye as fn,yg as co,zb as Ra,zc as nn,ze as wr}from"./chunk-X5J6QTCG.js";import{$ as je,$a as v,$b as Tt,Aa as kt,Ac as Ke,Ad as Ri,Cc as pa,Db as ue,Eb as W,Fa as i,Fb as j,Gb as te,Hb as ne,Ib as e,Jb as p,Ka as A,Kb as f,Ke as ka,Lb as q,Lc as It,Ma as b,Mb as Ve,Mc as Me,Na as Ge,Nc as Xe,Oc as xa,Pc as ha,Qa as la,Qb as T,Qc as ua,Ra as sa,Rb as I,Sa as k,Sb as M,Sc as De,U as Ct,Vd as Qe,Xa as pe,Yb as ca,Yc as Ye,Zb as Bi,Zd as ce,_ as ia,_c as ga,aa,ac as Ie,ad as D,bb as y,be as oe,ca as _t,cb as da,cc as V,ce as Ft,d as He,db as K,dc as ie,di as Ia,eb as S,fa as w,fb as E,fg as Pt,ga as C,gb as m,gg as Li,ha as ra,hb as n,hg as Ta,ia as oa,ib as t,ig as At,jb as c,jg as qi,kg as Je,lc as L,mc as ze,nb as O,nc as G,ob as N,pb as de,pj as R,qb as B,qc as fe,ri as Ma,sa as Ni,sb as g,ta as Ce,tb as u,td as wa,ub as ke,vb as Te,vd as Ca,wb as ma,wd as Mt,xb as $e,xd as Dt,yb as xe,yd as $,z as na,zb as he,zd as _a}from"./chunk-SMW7PHYX.js";import{a as bt,b as ta}from"./chunk-BMIYOSOG.js";var Ho=(()=>{let r=class r{constructor(d){this.siteDataService=d}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-landing-page"]],standalone:!1,decls:10,vars:0,consts:[[1,""],[2,"font-family","'Courier New', Courier, monospace"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
2    `),n(2,"h1"),e(3,"Style guide"),t(),e(4,`
3    `),c(5,"hr"),e(6,`
4    `),n(7,"pre",1),e(8,`        WKxlllcllllllllllcclllccccclllllllllcccccccllcccclllllllllclloONW    
5        WKdllllccllllllllllllllcccccccccllcccclcccccllllcclllllllllllllokN    
6        NkllllllclllllllllllllllloddxxkkkkkkkxxxddoolllcccllllllllllcllloKW   
7        NkllclllcclllllllllloxO0KXNWWWWWWWWWWWWWWNNXK0Okdollllllllllclllo0W   
8        NklllllccllcclllldkKNWW                        WNX0Oxollllcllcclo0W   
9        NkllllllllllccldOXW                                WWXOdlclllcclo0W   
10        NkllllllllclllkXW                                    WKxlclllcclo0W   
11        NklllllllllclkN                                     W0dlcclllcclo0W   
12        NkllllllllclxX                WWWWWWW             WXkollclcclcclo0W   
13        Nkllllllllco0W              NOxddddxxkkO0XNW     W0dlclclllllcclo0W   
14        NkllllllllcoK               XxolllcccccllodxOKNWNOolllllcllclcclo0W   
15        NkllllllllcoK               WNXK00Okxddolllclldxdlccllcccllclcclo0W   
16        NkllllllllclOW                     WWWNXKK0kxdollcccllcclclllcclo0W   
17        NklllllllllldKW                            WWNXKOxollcclcclllcclo0W   
18        Nkllllllllclld0N                                 WX0xolcllcllcclo0W   
19        NkllllllllllcloxKNW                                 WKkolccllcclo0W   
20        NklllllllllllcccldkKXWW                               NOoclllcclo0W   
21        Nklllllllllccccllccloxk0KXNWW                          Nkllllcclo0W   
22        NkllllllllcllllclodolllllodxkOO0KKXNWW                 WK
22dcllcclo0W   
23        NklllllllllccllokXNX0kdlllcclllllloodxOKN               Xdcllcclo0W   
24        NklcllllllllllxKW    WNK0kxdolllllllllldKW              Xdlllcclo0W   
25        Nkllcllllllld0N          WWNXKK000OOOO0XW              W0occlcclo0W   
26        NklllcllclokXW                                        WXxlcllcclo0W   
27        Nkllllccld0N                                         WXxlllllcclo0W   
28        Nklcllcclox0XWW                                    WN0dlcllclllco0W   
29        Nkllllllllclox0XNW                               WX0xllcllclllcco0W   
30        NkllllllcccclllodkOKXNWW                    WWNKOxolcllcllclcclco0W   
31        NklllllllccclccllcllodxkkO00KKXXXXXXXXXXK00OkxdllcllllclcllccllloKW   
32        WKdlllcllllllllccllcccccclllllooooooooollllccclllllllllclcccclllkN    
33         WKxllllcllllllllccllllllllllllllllllllllllllllllllllllllllccloONW    
34          WN0kdlllcclllllllllllllllclcccccclcccccclllllllllcclllclloxOXW      
35             WNKOxolccllccllllllllllllllllllllllllllllllllllcclldk0XNW        
36                 WX0kdllllccllllcclllllllllccllcclcclccllccloxOKNW            
37                    WNKOxolcllcclcclllllllllccllcccllcllldk0XWW               
38                        WX0kdlllclllllllllllllcllcclloxOKNW                   
39                           WNKOxolllllllllllllcllldk0XWW                      
40                               WX0kdllllcclllloxOKNW                          
41                                  WXOxolccllokKNW                             
42    `),t(),e(9,`            
43`),t())},encapsulation:2});let a=r;return a})();var S0=()=>({exact:!0}),jo=(()=>{let r=class r{constructor(){}ngOnInit(){}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-styleguide-nav"]],standalone:!1,decls:184,vars:21,consts:[[1,"page-navigation","mt-0"],[1,"header"],[1,"text-header-5","mb-0"],["routerLinkActive","active",3,"routerLinkActiveOptions"],[1,"btn-a11y",3,"routerLink"],["routerLinkActive","active"],[1,"text-smallest","text-grey-lt"]],template:function(s,o){s&1&&(n(0,"nav",0),e(1,`
44    `),n(2,"ul"),e(3,`
45        `),n(4,"li",1),e(5,`
46            `),n(6,"h2",2),e(7,"Style Guide"),t(),e(8,`
47        `),t(),e(9,`
48        `),n(10,"li",3),e(11,`
49            `),n(12,"a",4),e(13,"Home"),t(),e(14,`
50        `),t(),e(15,`
51        `),c(16,"hr"),e(17,`
52        `),n(18,"li",1),e(19,`
53            `),n(20,"h2",2),e(21,"Global"),t(),e(22,`
54        `),t(),e(23,`
55        `),n(24,"li",5),e(25,`
56            `),n(26,"a",4),e(27,"admin vs member"),t(),e(28,`
57        `),t(),e(29,`
58        `),n(30,"li",5),e(31,`
59            `),n(32,"a",4),e(33,"fonts"),t(),e(34,`
60        `),t(),e(35,`
61        `),n(36,"li",5),e(37,`
62            `),n(38,"a",4),e(39,"color"),t(),e(40,`
63        `),t(),e(41,`
64        `),n(42,"li",5),e(43,`
65            `),n(44,"a",4),e(45,"contrast"),t(),e(46,`
66            `),n(47,"div",6),e(48,`
67                audit \u2014 the WCAG maths is wrong, measured live
68            `),t(),e(49,`
69        `),t(),e(50,`
70        `),n(51,"li",5),e(52,`
71            `),n(53,"a",4),e(54,"blues & links"),t(),e(55,`
72        `),t(),e(56,`
73        `),n(57,"li",5),e(58,`
74            `),n(59,"a",4),e(60,"primeng upgrade debt"),t(),e(61,`
75            `),n(62,"div",6),e(63,`
76                audit \u2014 rules that stopped matching at v21, probed live
77            `),t(),e(64,`
78        `),t(),e(65,`
79        `),e(66,`
80        `),e(67,`
81        `),e(68,`
82        
83        `),n(69,"li",5),e(70,`
84            `),n(71,"a",4),e(72,"buttons"),t(),e(73,`
85        `),t(),e(74,`
86       
87        `),e(75,`
88        `),e(76,`
89        `),n(77,"li",5),e(78,`
90            `),n(79,"a",4),e(80,"forms"),t(),e(81,`
91            `),n(82,"div",6),e(83,`
92                6 tabs \u2014 permutations, architectures, contracts, defects
93            `),t(),e(84,`
94        `),t(),e(85,`
95        `),e(86,`
96        `),e(87,`
97        `),n(88,"li",5),e(89,`
98            `),n(90,"a",4),e(91,"utilities & misc"),t(),e(92,`
99        `),t(),e(93,`
100        `),n(94,"li",5),e(95,`
101            `),n(96,"a",4),e(97,"icon browser"),t(),e(98,`
102        `),t(),e(99,`
103        `),n(100,"li",5),e(101,`
104            `),n(102,"a",4),e(103,"backgrounds"),t(),e(104,`
105            `),n(105,"div",6),e(106,"experiment \u2014 not a mirror of shipped CSS"),t(),e(107,`
106        `),t(),e(108,`
107        `),c(109,"hr"),e(110,`
108        `),n(111,"li",1),e(112,`
109            `),n(113,"h2",2),e(114,"Components"),t(),e(115,`
110        `),t(),e(116,`
111        `),n(117,"li",5),e(118,`
112            `),n(119,"a",4),e(120,"pills & tags"),t(),e(121,`
113        `),t(),e(122,`
114        `),n(123,"li",5),e(124,`
115            `),n(125,"a",4),e(126,"avatars"),t(),e(127,`
116            `),n(128,"div",6),e(129,`
117                audit \u2014 states, overrides, contrast measured live
118            `),t(),e(130,`
119        `),t(),e(131,`
120        `),n(132,"li",5),e(133,`
121            `),n(134,"a",4),e(135,"cards"),t(),e(136,`
122        `),t(),e(137,`
123        `),n(138,"li",5),e(139,`
124            `),n(140,"a",4),e(141,"system alerts & colored text"),t(),e(142,`
125        `),t(),e(143,`
126        `),n(144,"li",5),e(145,`
127            `),n(146,"a",4),e(147,"staging \u2014 all 98"),t(),e(148,`
128            `),n(149,"div",6),e(150,`
129                every library component mounted once, folder order
130            `),t(),e(151,`
131        `),t(),e(152,`
132        `),c(153,"hr"),e(154,`
133        `),n(155,"li",1),e(156,`
134            `),n(157,"h2",2),e(158,"PrimeNG"),t(),e(159,`
135        `),t(),e(160,`
136        `),n(161,"li",5),e(162,`
137            `),n(163,"a",4),e(164,"component demos"),t(),e(165,`
138        `),t(),e(166,`
139
140
141
142        `),c(167,"hr"),e(168,`
143        `),n(169,"li",1),e(170,`
144            `),n(171,"h2",2),e(172,"CMS Elements"),t(),e(173,`
145        `),t(),e(174,`
146
147         `),n(175,"li",5),e(176,`
148            `),n(177,"a",4),e(178,"Buttons"),t(),e(179,`
149        `),t(),e(180,`
150`),e(181,`
151    `),t(),e(182,`
152`),t(),e(183,`
153`)),s&2&&(i(10),m("routerLinkActiveOptions",V(20,S0)),i(2),m("routerLink","/admin/styleguide"),i(14),m("routerLink","global/admin-vs-member"),i(6),m("routerLink","global/fonts"),i(6),m("routerLink","global/color"),i(6),m("routerLink","global/contrast"),i(9),m("routerLink","global/blues-and-links"),i(6),m("routerLink","global/primeng-upgrade-
153debt"),i(12),m("routerLink","global/buttons"),i(8),m("routerLink","global/forms"),i(11),m("routerLink","global/utilities"),i(6),m("routerLink","global/font-test"),i(6),m("routerLink","global/background-test"),i(17),m("routerLink","components/pills"),i(6),m("routerLink","components/avatars"),i(9),m("routerLink","components/cards"),i(6),m("routerLink","components/system-alerts"),i(6),m("routerLink","components/staging"),i(17),m("routerLink","primeng"),i(14),m("routerLink","cms/buttons"))},dependencies:[$,_a],styles:[".page-navigation[_ngcontent-%COMP%]{margin-top:2rem}"]});let a=r;return a})();var Go=(()=>{let r=class r{constructor(d,s){this.siteDataService=d,this.router=s,this.unsubscribe$=new He}ngOnInit(){this.siteDataService.hideSiteLoader(),this.siteDataService.getEnvironment().pipe(Ct(this.unsubscribe$)).subscribe({next:d=>{d===Ot.DEV||d===Ot.LOCAL||d===Ot.QA||this.router.navigate(["/admin/dashboard"])},error:()=>{this.router.navigate(["/admin/dashboard"])}})}ngOnDestroy(){this.unsubscribe$.next(),this.unsubscribe$.complete()}};r.\u0275fac=function(s){return new(s||r)(A(R),A(Dt))},r.\u0275cmp=b({type:r,selectors:[["app-styleguide"]],standalone:!1,decls:19,vars:0,consts:[["role","main"],[1,"ml-0"],[1,"row"],[1,"col-auto","left-nav-wrapper"],[1,"col"]],template:function(s,o){s&1&&(n(0,"main",0),e(1,`
154    `),n(2,"div",1),e(3,`
155        `),n(4,"div",2),e(5,`
156            `),n(6,"div",3),e(7,`
157                `),c(8,"app-styleguide-nav"),e(9,`
158            `),t(),e(10,`
159            `),n(11,"div",4),e(12,`
160                `),c(13,"router-outlet"),e(14,`
161            `),t(),e(15,`
162        `),t(),e(16,`
163    `),t(),e(17,` 
164`),t(),e(18,`
165`))},dependencies:[Mt,jo],encapsulation:2});let a=r;return a})();var v0=["*"];function y0(a,r){if(a&1&&(e(0,`
166        `),c(1,"app-pill",1),e(2,`
167    `)),a&2){let l=u();i(),m("status",l.sideStatus)("text",l.sideLabel)("tooltipText",l.sideTooltip)}}var X=(()=>{let r=class r{get sideStatus(){return r.sides[this.side]?.status}get sideLabel(){return r.sides[this.side]?.label}get sideTooltip(){return r.sides[this.side]?.tooltip}};r.sides={admin:{status:"secondary",label:"admin",tooltip:"Admin side only \u2014 fixed values, a club theme cannot change this."},member:{status:"primary",label:"member",tooltip:"Member side only \u2014 a club theme can change this."},shared:{status:"black",label:"shared",tooltip:"Renders on both sides. Themeable only where the partial reads --cms-* / --theme-*."}},r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-sg-caption"]],inputs:{side:"side"},standalone:!1,ngContentSelectors:v0,decls:7,vars:1,consts:[[1,"d-block","text-smallest","text-grey","mt-3","mb-1"],["variant","tag","tooltipPosition","top",3,"status","text","tooltipText"]],template:function(s,o){s&1&&(ke(),e(0,`
168`),n(1,"div",0),e(2,`
169    `),v(3,y0,3,3),Te(4),e(5,`
170`),t(),e(6,`
171`)),s&2&&(i(3),y(o.sideLabel?3:-1))},dependencies:[J],encapsulation:2});let a=r;return a})();var w0=["adminProbe"],C0=["memberProbe"],_0=(a,r)=>r.name,k0=(a,r)=>r.token;function T0(a,r){if(a&1){let l=B();e(0,`
172            `),n(1,"button",20),g("click",function(){let s=w(l).$implicit,o=u();return C(o.applyTheme(s))}),e(2),t(),e(3,`
173        `)}if(a&2){let l=r.$implicit,d=u();i(),j("btn-primary",l===d.activeTheme),i(),p(l.name)}}function I0(a,r){if(a&1&&(e(0,`
174                            `),n(1,"span",21),e(2,"\xA0"),t(),e(3,`
175                        `)),a&2){let l=u().$implicit;i(),W("background-color",l.admin)}}function M0(a,r){if(a&1&&(e(0,`
176                            `),n(1,"span",21),e(2,"\xA0"),t(),e(3,`
177                        `)),a&2){let l=u().$implicit;i(),W("background-color",l.member)}}function D0(a,r){if(a&1&&(e(0,`
178                `),n(1,"tr"),e(2,`
179                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
180                    `),n(7,"td"),e(8,`
181                        `),v(9,I0,4,2),n(10,"code"),e(11),t(),e(12,`
182                    `),t(),e(13,`
183                    `),n(14,"td"),e(15,`
184                        `),v(16,M0,4,2),n(17,"code"),e(18),t(),e(19,`
185                    `),t(),e(20,`
186                `),t(),e(21,`
187            `)),a&2){let l=r.$implicit,d=u();i(5),p(l.token),i(4),y(d.isColor(l.admin)?9:-1),i(2),p(l.admin),i(5),y(d.isColor(l.member)?16:-1),i(2),p(l.member)}}function F0(a,r){a&1&&(e(0,`
188                `),n(1,"tr"),e(2,`
189                    `),n(3,"td",22),e(4,"Reading tokens\u2026"),t(),e(5,`
190                `),t(),e(6,`
191            `))}var $o=(()=>
191{let r=class r{constructor(d,s){this.cdr=d,this.siteDataService=s,this.probedTokens=["--theme-button-background","--theme-button-text-color","--theme-button-border","--theme-button-background--primary","--theme-button-text-color--primary","--theme-button-background-hover--primary","--theme-button-text-color--naked","--cms-button-background--primary"],this.themes=[{name:"No theme (SCSS defaults)",tokens:{}},{name:"Crimson",tokens:{"--theme-button-background":"#ffffff","--theme-button-text-color":"#9b1b30","--theme-button-border":"#9b1b30","--theme-button-background-hover":"#9b1b30","--theme-button-text-color-hover":"#ffffff","--theme-button-background--primary":"#9b1b30","--theme-button-border--primary":"#9b1b30","--theme-button-text-color--primary":"#ffffff","--theme-button-background-hover--primary":"#7a1526","--theme-button-border-hover--primary":"#7a1526","--theme-button-text-color-hover--primary":"#ffffff","--theme-button-text-color--naked":"#9b1b30","--theme-button-text-color-hover--naked":"#7a1526"}},{name:"Forest",tokens:{"--theme-button-background":"#ffffff","--theme-button-text-color":"#14532d","--theme-button-border":"#14532d","--theme-button-background-hover":"#14532d","--theme-button-text-color-hover":"#ffffff","--theme-button-background--primary":"#14532d","--theme-button-border--primary":"#14532d","--theme-button-text-color--primary":"#ffffff","--theme-button-background-hover--primary":"#0d3a1f","--theme-button-border-hover--primary":"#0d3a1f","--theme-button-text-color-hover--primary":"#ffffff","--theme-button-text-color--naked":"#14532d","--theme-button-text-color-hover--naked":"#0d3a1f"}}],this.activeTheme=this.themes[1],this.readings=[]}ngOnInit(){this.siteDataService.hideSiteLoader()}ngAfterViewInit(){this.applyTheme(this.activeTheme)}applyTheme(d){this.activeTheme=d;let s=this.memberProbe?.nativeElement;if(s){for(let o of this.themes)for(let x of Object.keys(o.tokens))s.style.removeProperty(x);for(let[o,x]of Object.entries(d.tokens))s.style.setProperty(o,x);this.readTokens()}}isColor(d){return d.startsWith("#")||d.startsWith("rgb")}readTokens(){let d=this.adminProbe?.nativeElement,s=this.memberProbe?.nativeElement;if(!d||!s)return;let o=getComputedStyle(d),x=getComputedStyle(s);this.readings=this.probedTokens.map(h=>({token:h,admin:o.getPropertyValue(h).trim()||"(unset)",member:x.getPropertyValue(h).trim()||"(unset)"})),this.cdr.detectChanges()}};r.\u0275fac=function(s){return new(s||r)(A(Ke),A(R))},r.\u0275cmp=b({type:r,selectors:[["app-sg-admin-vs-member"]],viewQuery:function(s,o){if(s&1&&$e(w0,5)(C0,5),s&2){let x;xe(x=he())&&(o.adminProbe=x.first),xe(x=he())&&(o.memberProbe=x.first)}},standalone:!1,decls:632,vars:1,consts:[["adminProbe",""],["memberProbe",""],[1,"text-small","text-grey"],[1,"card"],[1,"table","table-bordered"],["alertType","note",1,"mb-3"],["side","admin"],["variant","tag","status","secondary","text","admin"],["variant","tag","status","primary","text","member"],["alertType","warning",1,"mb-3"],[1,"d-flex","flex-wrap","gap-3","align-items-center","mb-3"],[1,"row"],[1,"col-md-6"],[1,"bg-white","p-3"],["type","button",1,"btn"],["type","button",1,"btn","btn-primary"],["type","button",1,"btn","btn-naked"],["side","member"],["alertType","info",1,"mb-3"],["side","shared"],["type","button",1,"btn","btn-sm",3,"click"],[1,"d-inline-block","px-3","mr-2","border-radius-sm"],["colspan","3",1,"text-small","text-grey"]],template:function(s,o){s&1&&(n(0,"h2"),e(1,"Admin side vs. member side"),t(),e(2,`
192`),n(3,"p",2),e(4,`
193    The app has two style conventions, not one. `),n(5,"strong"),e(6,"Admin styling is immutable"),t(),e(7,` \u2014 every
194    club sees the same admin. `),n(8,"strong"),e(9,"Member styling is themeable"),t(),e(10,` \u2014 a club's theme changes
195    it. Many components render on both sides, so "which side is this?" decides whether a color is a
196    fixed value or a token a club controls.
197`),t(),e(11,`
198
199`),n(12,"div",3),e(13,`
200    `),n(14,"h3"),e(15,"1. How the app decides which side you are on"),t(),e(16,`
201    `),n(17,"p",2),e(18,`
202        Nothing inspects the URL. A route opts in with `),n(19,"code"),e(20,"data.admin: true"),t(),e(21,`, and the app
203        shell turns that into a class on `),n(22,"code"),e(23,"<body>"),t(),e(24,`.
204    `),t(),e(25,`
205
206    `),n(26,"table",4),e(27,`
207        `),n(28,"thead"),e(29,`
208            `),n(30,"tr"),e(31,`
209                `),n(32,"th"),e(33,"Step"),t(),e(34,`
210                `),n(35,"th"),e(36,"Where"),t(),e(37,`
211                `),n(38,"th"),e(39,"What happens"),t(),e(40,`
212            `),t(),e(41,`
213        `),t(),e(42,`
214        `),n(43,"tbody"),e(44,`
215            `),n(45,"tr"),e(46,`
216                `),n(47,"td"),e(48,"1"),t(),e(49,`
217                `),n(50,"td")(51,"code"),e(52,"app-routing.module.ts"),t()(),e(53,`
218                `),n(54,"td"),e(55,"Route declares "),n(56,"code"),e(57,"data: { admin: true }"),t()(),e(58,`
219            `),t(),e(59,`
220            `),n(60,"tr"),e(61,`
221                `),n(62,"td"),e(63,"2"),t(),e(64,`
222                `),n(65,"td")(66,"code"),e(67,"app.component.ts"),t(),e(68," \u2014 "),n(69,"code"),e(70,"NavigationEnd"),t()(),e(71,`
223                `),n(72,"td"),e(73,"Walks the activated route tree and sets "),n(74,"code"),e(75,"isAdmin"),t()(),e(76,`
224            `),t(),e(77,`
225            `),n(78,"tr"),e(79,`
226                `),n(80,"td"),e(81,"3"),t(),e(82,`
227                `),n(83,"td")(84,"code"),e(85,"app.component.ts"),t(),e(86," \u2014 "),n(87,"code"),e(88,"addAdminBodyClass()"),t()(),e(89,`
228                `),n(90,"td")(91,"code"),e(92,'<body class="admin-wrapper">'),t(),e(93,", else "),n(94,"code"),e(95,"site-wrapper"),t()(),e(96,`
229            `),t(),e(97,`
230            `),n(98,"tr"),e(99,`
231                `),n(100,"td"),e(101,"4"),t(),e(102,`
232                `),n(103,"td")(104,"code"),e(105,"header.component.ts"),t(),e(106," \u2014 "),n(107,"code"),e(108,"setThemePrimatives()"),t()(),e(109,`
233                `),n(110,"td"),e(111,`
234                    Writes the club's `),n(112,"code"),e(113,"--theme-*"),t(),e(114," values onto "),n(115,"code"),e(116,"<html>"),t(),e(117,`.
235                    `),n(118,"strong"),e(119,"Only runs on the member side"),t(),e(120," \u2014 "),n(121,"code"),e(122,"app-header"),t(),e(123,` is not
236                    rendered when `),n(124,"code"),e(125,"isAdmin"),t(),e(126,`.
237                `),t(),e(127,`
238            `),t(),e(128,`
239        `),t(),e(129,`
240    `),t(),e(130,`
241
242    `),n(131,"app-inline-alert",5),e(132,`
243        `),n(133,"strong"),e(134,"Admin immutability has two mechanisms, and you need both."),t(),e(135,` Step 4 means an
244        admin route never applies a theme itself. But this is a single-page app: a member who
245        navigates from a club site into `),n(136,"code"),e(137,"/admin"),t(),e(138,` keeps whatever
246        `),n(139,"code"),e(140,"--theme-*"),t(),e(141," that club already wrote onto "),n(142,"code"),e(143,"<html>"),t(),e(144,` \u2014 nothing
247        clears it. The guard against that is the `),n(145,"code"),e(146,".admin-wrapper"),t(),e(147,` block in
248        `),n(148,"code"),e(149,"2_layout/buttons.scss"),t(),e(150,", which re-pins "),n(151,"code"),e(152,"--theme-button-*"),t(),e(153,` to admin
249        values on `),n(154,"code"),e(155,"<body>"),t(),e(156,`. Do not remove it because the values look redundant
250        with the `),n(157,"code"),e(158,":root"),t(),e(159,` defaults \u2014 they are the same on a cold load and different
251        after that navigation.
252    `),t(),e(160,`
253
254    `),n(161,"app-sg-caption",6),e(162,`
255        This page is `),n(163,"code"),e(164,"/admin/styleguide"),t(),e(165,", so "),n(166,"code"),e(167,"data.admin: true"),t(),e(168,` \u2014 everything
256        outside the member preview in section 3 is rendering in admin context right now.
257    `),t(),e(169,`
258`),t(),e(170,`
259
260`),n(171,"div",3),e(172,`
261    `),n(173,"h3"),e(174,"2. The three wrapper scopes"),t(),e(175,`
262    `),n(176,"p",2),e(177,`
263        These are the class names to look for when reading a stylesheet and asking which convention
264        a rule belongs to.
265    `),t(),e(178,`
266
267    `),n(179,"table",4),e(180,`
268        `),n(181,"thead"),e(182,`
269            `),n(183,"tr"),e(184,`
270                `),n(185,"th"),e(186,"Scope"),t(),e(187,`
271                `),n(188,"th"),e(189,"Applied to"),t(),e(190,`
272                `),n(191,"th"),e(192,"Convention"),t(),e(193,`
273            `),t(),e(194,`
274        `),t(),e(195,`
275        `),n(196,"tbody"),e(197,`
276            `),n(198,"tr"),e(199,`
277                `),n(200,"td"),c(201,"app-pill",7),e(202,`
278                    `),n(203,"code"),e(204,".admin-wrapper"),t()(),e(205,`
279                `),n(206,"td")(207,"code"),e(208,"<body>"),t(),e(209," on admin routes, plus editor chrome divs"),t(),e(210,`
280                `),n(211,"td"),e(212,"Fixed values. A club theme cannot reach these."),t(),e(213,`
281            `),t(),e(214,`
282            `),n(215,"tr"),e(216,`
283                `),n(217,"td"),c(218,"app-pill",8),e(219,`
284                    `),n(220,"code"),e(221,".site-wrapper"),t()(),e(222,`
285                `),n(223,"td"),e(224,"The app shell wrapper on every non-admin route"),t(),e(225,`
286                `),n(226,"td"),e(227,"Member side. "),n(228,"code"),e(229,"--theme-*"),t(),e(230," is live on "),n(231,"code"),e(232,"<html>"),t(),e(233,"."),t(),e(234,`
287            `),t(),e(235,`
288            `),n(236,"tr"),e(237,`
289                `),n(238,"td"),c(239,"app-pill",8),e(240,`
290                    `),n(241,"code"),e(242,".cms-content"),t()(),e(243,`
291                `),n(244,"td"),e(245,"Page-builder-rendered content, on "),n(246,"em"),e(247,"either"),t(),e(248," side"),t(),e(249,`
292                `),n(250,"td"),e(251,"Opts back into theme values even inside the admin editor."),t(),e(252,`
293            `),t(),e(253,`
294        `),t(),e(254,`
295    `),t(),e(255,`
296
297    `),n(256,"app-inline-alert",9),e(257,`
298        `),n(258,"code"),e(259,".admin-wrapper"),t(),e(260,` is not strictly nested. The page-builder editor puts chrome
299        divs carrying `),n(261,"code"),e(262,".admin-wrapper"),t(),e(263," "),n(264,"em"),e(265,"inside"),t(),e(266,`
300        `),n(267,"code"),e(268,"main.cms-content"),t(),e(269,`, wrapping the member content being previewed. Token scopes
301        therefore key off `),n(270,"code"),e(271,"body.admin-wrapper"),t(),e(272,", not bare "),n(273,"code"),e(274,".admin-wrapper"),t(),e(275,` \u2014
302        a descendant-selector pin would re-pin the preview.
303    `),t(),e(276,`
304`),t(),e(277,`
305
306`),n(278,"div",3),e(279,`
307    `),n(280,"h3"),e(281,"3. The token layers"),t(),e(282,`
308    `),n(283,"p",2),e(284,`
309        Two layers, declared in
310        `),n(285,"code"),e(286,"1_base/variables.scss"),t(),e(287," and scoped in "),n(288,"code"),e(289,"2_layout/buttons.scss"),t(),e(290,`.
311    `),t(),e(291,`
312
313    `),n(292,"table",4),e(293,`
314        `),n(294,"thead"),e(295,`
315            `),n(296,"tr"),e(297,`
316                `),n(298,"th"),e(299,"Layer"),t(),e(300,`
317                `),n(301,"th"),e(302,"Role"),t(),e(303,`
318                `),n(304,"th"),e(305,"Who writes it"),t(),e(306,`
319                `),n(307,"th"),e(308,"Who reads it"),t(),e(309,`
320            `),t(),e(310,`
321        `),t(),e(311,`
322        `),n(312,"tbody"),e(313,`
323            `),n(314,"tr"),e(315,`
324                `),n(316,"td")(317,"code"),e(318,"--theme-*"),t()(),e(319,`
325                `),n(320,"td"),e(321,"Raw palette"),t(),e(322,`
326                `),n(323,"td"),e(324,`
327                    SCSS defaults, then the club theme at runtime on `),n(325,"code"),e(326,"<html>"),t(),e(327,`,
328                    then re-pinned to admin values on `),n(328,"code"),e(329,"body.admin-wrapper"),t(),e(330,`
329                `),t(),e(331,`
330                `),n(332,"td"),e(333,`
331                    `),n(334,"strong"),e(335,"The global button rules read these directly"),t(),e(336,` \u2014
332                    `),n(337,"code"),e(338,".btn"),t(),e(339,", "),n(340,"code"),e(341,".btn-primary"),t(),e(342," and "),n(343,"code"),e(344,".btn-naked"),t(),e(345,` in
333                    `),n(346,"code"),e(347,"2_layout/buttons.scss"),t(),e(348,". Also the "),n(349,"code"),e(350,"--cms-*"),t(),e(351,` layer.
334                `),t(),e(352,`
335            `),t(),e(353,`
336            `),n(354,"tr"),e(355,`
337                `),n(356,"td")(357,"code"),e(358,"--cms-*"),t()(),e(359,`
338                `),n(360,"td"),e(361,"Semantic"),t(),e(362,`
339                `),n(363,"td")(364,"code"),e(365,":root"),t(),e(366,", from "),n(367,"code"),e(368,"--theme-*"),t(),e(369,". Nothing else re-declares them."),t(),e(370,`
340                `),n(371,"td"),e(372,`
341                    Only `),n(373,"code"),e(374,"button-content.component.scss"),t(),e(375,` \u2014 the page-builder Button
342                    block, a component-scoped stylesheet.
343                `),t(),e(376,`
344            `),t(),e(377,`
345        `),t(),e(378,`
346    `),t(),e(379,`
347
348    `),n(380,"app-inline-alert",9),e(381,`
349        `),n(382,"strong"),e(383,"The rule that is easy to get wrong:"),t(),e(384,` a custom property is substituted where
350        it is `),n(385,"em"),e(386,"declared"),t(),e(387,", not where it is read. "),n(388,"code"),e(389,"--cms-*"),t(),e(390,` is declared only at
351        `),n(391,"code"),e(392,":root"),t(),e(393,`, so every element inherits the value already resolved from
352        `),n(394,"code"),e(395,"<html>"),t(),e(396,"'s "),n(397,"code"),e(398,"--theme-*"),t(),e(399,". The "),n(400,"code"),e(401,".admin-wrapper"),t(),e(402,` pin
353        therefore redirects the global `),n(403,"code"),e(404,".btn"),t(),e(405," rules (they read "),n(406,"code"),e(407,"--theme-*"),t(),e(408,`
354        directly) but `),n(409,"em"),e(410,"not"),t(),e(411," the "),n(412,"code"),e(413,"--cms-*"),t(),e(414,` layer. The two layers do not move
355        together, and that asymmetry is load-bearing \u2014 see section 4.
356    `),t(),e(415,`
357
358    `),n(416,"h4"),e(417,"Live: the same markup, both conventions"),t(),e(418,`
359    `),n(419,"p",2),e(420,`
360        Both columns are the app's own `),n(421,"code"),e(422,".btn"),t(),e(423,` classes \u2014 no harness markup. The left
361        column inherits the `),n(424,"code"),e(425,"body.admin-wrapper"),t(),e(426,` pin. The right column has a sample club
362        theme set inline on its container, which outranks that pin for its subtree; that is the
363        only way to render member-side buttons on a route which is itself admin, and it is the same
364        `),n(427,"code"),e(428,"setProperty()"),t(),e(429," call the app's header makes against "),n(430,"code"),e(431,"<html>"),t(),e(432,`.
365        A sample theme is needed because admin routes never apply a real one.
366    `),t(),e(433,`
367
368    `),n(434,"div",10),e(435,`
369        `),S(436,T0,4,3,null,null,_0),t(),e(438,`
370
371    `),n(439,"div",11),e(440,`
372        `),n(441,"div",12),e(442,`
373            `),n(443,"app-sg-caption",6),e(444,`
374                Inherits the `),n(445,"code"),e(446,"body.admin-wrapper"),t(),e(447,` pin \u2014 no theme reaches it
375            `),t(),e(448,`
376            `),n(449,"div",13,0),e(451,`
377                `),n(452,"button",14),e(453,".btn"),t(),e(454,`
378                `),n(455,"button",15),e(456,".btn-primary"),t(),e(457,`
379                `),n(458,"button",16),e(459,".btn-naked"),t(),e(460,`
380            `),t(),e(461,`
381        `),t(),e(462,`
382        `),n(463,"div",12),e(464,`
383            `),n(465,"app-sg-caption",17),e(466,`
384                Sample club theme set on this container
385            `),t(),e(467,`
386            `),n(468,"div",13,1),e(470,`
387                `),n(471,"button",14),e(472,".btn"),t(),e(473,`
388                `),n(474,"button",15),e(475,".btn-primary"),t(),e(476,`
389                `),n(477,"button",16),e(478,".btn-naked"),t(),e(479,`
390            `),t(),e(480,`
391        `),t(),e(481,`
392    `),t(),e(482,`
393
394    `),n(483,"p",2),e(484,`
395        The resolved values behind those buttons, read back with
396        `),n(485,"code"),e(486,"getComputedStyle()"),t(),e(487,". Note the last row: "),n(488,"code"),e(489,"--cms-*"),t(),e(490,` is
397        `),n(491,"strong"),e(492,"identical in both columns"),t(),e(493,`, because the sample theme sets
398        `),n(494,"code"),e(495,"--theme-*"),t(),e(496," and nothing re-derives "),n(497,"code"),e(498,"--cms-*"),t(),e(499,` below
399        `),n(500,"code"),e(501,":root"),t(),e(502,`.
400    `),t(),e(503,`
401
402    `),n(504,"table",4),e(505,`
403        `),n(506,"thead"),e(507,`
404            `),n(508,"tr"),e(509,`
405                `),n(510,"th"),e(511,"Token"),t(),e(512,`
406                `),n(513,"th"),c(514,"app-pill",7),e(515," resolved"),t(),e(516,`
407                `),n(517,"th"),c(518,"app-pill",8),e(519," resolved"),t(),e(520,`
408            `),t(),e(521,`
409        `),t(),e(522,`
410        `),n(523,"tbody"),e(524,`
411            `),S(525,D0,22,5,null,null,k0,!1,F0,7,0),t(),e(528,`
412    `),t(),e(529,`
413
414    `),n(530,"app-inline-alert",18),e(531,`
415        Not everything on a button is themeable. `),n(532,"code"),e(533,".btn"),t(),e(534,` takes its corner radius from
416        `),n(535,"code"),e(536,"var(--base-radius)"),t(),e(537,", not "),n(538,"code"),e(539,"--theme-button-radius"),t(),e(540,` \u2014 that token only
417        reaches the page-builder Button block and a few page-builder content blocks. Colors are
418        themeable; geometry mostly is not.
419    `),t(),e(541,`
420`),t(),e(542,`
421
422`),n(543,"div",3),e(544,`
423    `),n(545,"h3"),e(546,"4. Where this architecture does not hold up"),t(),e(547,`
424    `),n(548,"p",2),e(549,`
425        Two known consequences of the layering above. Both are recorded in
426        `),n(550,"code"),e(551,"docs/ui-migration-and-review/**/Kitchen-Sink-Harness.md"),t(),e(552,`; neither is fixed.
427    `),t(),e(553,`
428
429    `),n(554,"app-inline-alert",9),e(555,`
430        `),n(556,"strong"),e(557,"The page-builder editor previews admin buttons, not the club's."),t(),e(558,` The editor
431        is an admin route, so `),n(559,"code"),e(560,"body.admin-wrapper"),t(),e(561,` pins
432        `),n(562,"code"),e(563,"--theme-button-*"),t(),e(564,` across the whole document \u2014 including
433        `),n(565,"code"),e(566,"main.cms-content"),t(),e(567,`, where member content is being previewed. A
434        `),n(568,"code"),e(569,".cms-content"),t(),e(570,` rule cannot undo it: once the pin overwrites those names in that
435        subtree, the club's values are gone from it and only survive on `),n(571,"code"),e(572,"<html>"),t(),e(573,`.
436        That is why the `),n(574,"code"),e(575,".cms-content"),t(),e(576," reset block in "),n(577,"code"),e(578,"buttons.scss"),t(),e(579,` is
437        commented out \u2014 restoring it would assign the admin values, not the club's. A real fix
438        needs a separate name for the admin pin (an `),n(580,"code"),e(581,"--admin-button-*"),t(),e(582,` set) so
439        `),n(583,"code"),e(584,"--theme-button-*"),t(),e(585,` stays the club layer everywhere.
440    `),t(),e(586,`
441
442    `),n(587,"app-inline-alert",9),e(588,`
443        `),n(589,"strong")(590,"code"),e(591,"--cms-*"),t(),e(592," is a one-consumer layer."),t(),e(593,` Its name suggests it is the
444        semantic layer components read, and the comments in `),n(594,"code"),e(595,"variables.scss"),t(),e(596,` say so, but
445        only the page-builder Button block actually reads it \u2014 and that component also overwrites
446        those same names inline on its host in `),n(597,"code"),e(598,"setThemeButtonStyle()"),t(),e(599,` when the block
447        author picks a color. Treat `),n(600,"code"),e(601,"--cms-*"),t(),e(602,` as a pattern that was started, not as
448        infrastructure you can rely on.
449    `),t(),e(603,`
450`),t(),e(604,`
451
452`),n(605,"div",3),e(606,`
453    `),n(607,"h3"),e(608,"5. Reading the markers on the other pages"),t(),e(609,`
454    `),n(610,"p",2),e(611,`
455        Every captioned sample in this harness can declare which side it belongs to, via
456        `),n(612,"code"),e(613,'<app-sg-caption side="\u2026">'),t(),e(614,`. An uncaptioned or unmarked sample has not been
457        classified yet \u2014 that is a gap, not a statement that it is neutral.
458    `),t(),e(615,`
459
460    `),n(616,"app-sg-caption",6),e(617,"Fixed values; a club theme cannot change this"),t(),e(618,`
461    `),n(619,"app-sg-caption",17),e(620,"Reads the themeable layer"),t(),e(621,`
462    `),n(622,"app-sg-caption",19),e(623,`
463        Renders on both sides \u2014 immutable under `),n(624,"code"),e(625,"body.admin-wrapper"),t(),e(626,`, themeable under
464        `),n(627,"code"),e(628,".cms-content"),t(),e(629,`
465    `),t(),e(630,`
466`),t(),e(631,`
467`)),s&2&&(i(436),E(o.themes),i(89),E(o.readings))},dependencies:[J,le,X],encapsulation:2});let a=r;return a})();var Ko=(()=>{let r=class r{constructor(d){this.siteDataService=d}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-fonts"]],standalone:!1,decls:52,vars:0,consts:[[1,""],[1,"word-break-all",2,"font-size","32px"],["href","https://fonts.adobe.com/fonts/proxima-nova"],["href","https://fontawesome.com/icons?d=gallery","target","_blank"],["href","https://www.primefaces.org/primeng/showcase/#/","target","_blank"],["href","https://www.primefaces.org/primeng/showcase/#/icons","target","_blank"],[1,"normal"],[1,"normal-ital"],[1,"bold"],[1,"black"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
468    `),n(2,"h2"),e(3,"Fonts"),t(),e(4,`
469    `),n(5,"div",0),e(6,`
470      `),n(7,"p",1),e(8,"AbBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"),t(),e(9,`
471      `),n(10,"p",1),e(11,"1234567890\xA0!@#$%^&*()+=[]"),t(),e(12,`
472      `),c(13,"hr"),e(14,`
473      `),n(15,"p"),e(16,"The base font family is "),n(17,"a",2),e(18,"Proxima Nova"),t(),e(19,", using Adobe Fonts."),t(),e(20,`
474      `),n(21,"p"),e(22,"The icon font family used is "),n(23,"a",3),e(24,"Font Awesome"),t(),e(25,"."),t(),e(26,`
475      `),n(27,"p"),e(28,"We are also using the "),n(29,"a",4),e(30,"Prime NG component Library"),t(),e(31,". It also has an "),n(32,"a",5),e(33,"icon set included"),t(),e(34,"."),t(),e(35,`
476      `),n(36,"p"),e(37,"We are loading in four fonts:"),t(),e(38,`
477        `),n(39,"p",6),e(40,"This is the 400 (normal) weight. The quick brown fox jumps over the lazy dog."),t(),e(41,`
478        `),n(42,"p",7),e(43,"This is the 400 (normal) weight with italics. The quick brown fox jumps over the lazy dog."),t(),e(44,`
479        `),n(45,"p",8),e(46,"This is the 700 (bold) weight. The quick brown fox jumps over the lazy dog."),t(),e(47,`
480        `),n(48,"p",9),e(49,"This is the 900 (black) weight. The quick brown fox jumps over the lazy dog."),t(),e(50,`
481    `),t(),e(51,`
482  `),t())},encapsulation:2});let a=r;return a})();var P0=()=>[],A0=(a,r)=>r.anchor,O0=(a,r)=>r.name,Re=(a,r)=>r.token,Xo=(a,r)=>r.className,N0=(a,r)=>
482r.id,B0=(a,r)=>r.index,W0=(a,r)=>r.convention,R0=(a,r)=>r.selector,L0=(a,r)=>r.themeToken,q0=(a,r)=>r.field,V0=(a,r)=>r.hex,Yo=(a,r)=>r.gap,z0=(a,r)=>r.teamID,Qo=(a,r)=>r.label;function U0(a,r){a&1&&(e(0," "),c(1,"app-pill",58),e(2," "))}function H0(a,r){a&1&&(e(0," "),c(1,"app-pill",59),e(2," "))}function j0(a,r){a&1&&(e(0," "),n(1,"span",41),e(2,"fixed"),t(),e(3," "))}function G0(a,r){if(a&1&&(e(0,`
483                    `),n(1,"tr"),e(2,`
484                        `),n(3,"td")(4,"a",57),e(5),t()(),e(6,`
485                        `),n(7,"td")(8,"code",42),e(9),t()(),e(10,`
486                        `),n(11,"td",42),e(12),t(),e(13,`
487                        `),n(14,"td",42),e(15),t(),e(16,`
488                        `),n(17,"td",42),e(18,`
489                            `),v(19,U0,3,0)(20,H0,3,0)(21,j0,4,0),e(22,`
490                        `),t(),e(23,`
491                    `),t(),e(24,`
492                `)),a&2){let l,d=r.$implicit;i(4),m("routerLink",V(7,P0))("fragment",d.anchor),i(),p(d.system),i(4),p(d.home),i(3),p(d.values),i(3),p(d.owner),i(4),y((l=d.themeable)==="club"?19:l==="per-record"?20:21)}}function $0(a,r){a&1&&(e(0,`
493                                    `),n(1,"span",41),e(2,"0"),t(),e(3,`
494                                `))}function K0(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
495                                    `,l.uses,`
496                                `)}}function X0(a,r){a&1&&(e(0,`
497                                    `),n(1,"span",41),e(2,"no consumers"),t(),e(3,`
498                                `))}function Y0(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
499                                    `,l.note,`
500                                `)}}function Q0(a,r){a&1&&(e(0,`
501                                    `),n(1,"span",41),e(2,"\u2014"),t(),e(3,`
502                                `))}function J0(a,r){if(a&1&&(e(0,`
503                        `),n(1,"tr"),e(2,`
504                            `),n(3,"td"),c(4,"span",60),t(),e(5,`
505                            `),n(6,"td")(7,"code"),e(8),t()(),e(9,`
506                            `),n(10,"td")(11,"code"),e(12),t()(),e(13,`
507                            `),n(14,"td"),e(15,`
508                                `),v(16,$0,4,0)(17,K0,1,1),t(),e(18,`
509                            `),n(19,"td",42),e(20,`
510                                `),v(21,X0,4,0)(22,Y0,1,1)(23,Q0,4,0),t(),e(24,`
511                        `),t(),e(25,`
512                    `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(4),p(l.token),i(4),p(l.hex),i(4),y(l.uses===0?16:17),i(5),y(l.note==="dead"?21:l.note?22:23)}}function Z0(a,r){if(a&1&&(e(0,`
513        `),n(1,"h4",19),e(2),t(),e(3,`
514        `),n(4,"div",4),e(5,`
515            `),n(6,"table",5),e(7,`
516                `),n(8,"thead"),e(9,`
517                    `),n(10,"tr"),e(11,`
518                        `),c(12,"th",12),e(13,`
519                        `),n(14,"th",14),e(15,"Token"),t(),e(16,`
520                        `),n(17,"th",23),e(18,"Hex"),t(),e(19,`
521                        `),n(20,"th",15),e(21,"Uses"),t(),e(22,`
522                        `),n(23,"th"),e(24,"Also known as"),t(),e(25,`
523                    `),t(),e(26,`
524                `),t(),e(27,`
525                `),n(28,"tbody"),e(29,`
526                    `),S(30,J0,26,6,null,null,Re),t(),e(32,`
527            `),t(),e(33,`
528        `),t(),e(34,`
529    `)),a&2){let l=r.$implicit;i(2),p(l.name),i(28),E(l.steps)}}function es(a,r){a&1&&(e(0,`
530                                `),n(1,"span",61),e(2," \u25CF"),t(),e(3,`
531                            `))}function ts(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
532                                `,l.note,`
533                            `)}}function ns(a,r){a&1&&(e(0,`
534                                `),n(1,"span",41),e(2,"\u2014"),t(),e(3,`
535                            `))}function is(a,r){if(a&1&&(e(0,`
536                    `),n(1,"tr"),e(2,`
537                        `),n(3,"td"),c(4,"span",60),t(),e(5,`
538                        `),n(6,"td"),e(7,`
539                            `),n(8,"code"),e(9),t(),e(10,`
540                            `),v(11,es,4,0),t(),e(12,`
541                        `),n(13,"td")(14,"code",42),e(15),t()(),e(16,`
542                        `),n(17,"td"),e(18),t(),e(19,`
543                        `),n(20,"td",42),e(21,`
544                            `),v(22,ts,1,1)(23,ns,4,0),t(),e(24,`
545                    `),t(),e(25,`
546                `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(5),p(l.token),i(2),y(l.suspect?11:-1),i(4),p(l.resolvesTo),i(3),p(l.uses),i(4),y(l.note?22
546:23)}}function as(a,r){a&1&&(e(0,`
547                                `),n(1,"span",62),e(2,"below AA for body text"),t(),e(3,`
548                            `))}function rs(a,r){if(a&1&&(e(0,`
549                    `),n(1,"tr"),e(2,`
550                        `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
551                        `),n(7,"td"),e(8,`
552                            `),n(9,"span"),e(10,"The quick brown fox"),t(),e(11,`
553                        `),t(),e(12,`
554                        `),n(13,"td")(14,"code",42),e(15),t()(),e(16,`
555                        `),n(17,"td"),e(18),v(19,as,4,0),t(),e(20,`
556                        `),n(21,"td",42),e(22),t(),e(23,`
557                    `),t(),e(24,`
558                `)),a&2){let l=r.$implicit;i(5),f(".",l.className),i(2),j("bg-navy",l.className==="text-white"),i(2),ne(l.className),i(6),p(l.token),i(3),f(`
559                            `,l.onWhite,`:1
560                            `),i(),y(l.onWhite<4.5&&l.className!=="text-white"?19:-1),i(3),p(l.role)}}function os(a,r){if(a&1&&(e(0,`
561            `),n(1,"div",63),e(2,`
562                `),c(3,"div",64),e(4,`
563                `),n(5,"div",40),e(6,`
564                    `),n(7,"code"),e(8),t(),c(9,"br"),e(10,`
565                    `),n(11,"span",41),e(12),t(),e(13,`
566                `),t(),e(14,`
567            `),t(),e(15,`
568        `)),a&2){let l=r.$implicit;i(3),ne(l.className+" border-all border-radius"),i(5),f(".",l.className),i(4),p(l.token)}}function ls(a,r){if(a&1&&(e(0,`
569                    `),n(1,"tr"),e(2,`
570                        `),n(3,"td"),c(4,"span",60),t(),e(5,`
571                        `),n(6,"td")(7,"code"),e(8),t()(),e(9,`
572                        `),n(10,"td")(11,"code"),e(12),t()(),e(13,`
573                        `),n(14,"td"),e(15),t(),e(16,`
574                        `),n(17,"td"),e(18),t(),e(19,`
575                        `),n(20,"td"),e(21),t(),e(22,`
576                    `),t(),e(23,`
577                `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(4),p(l.token),i(4),p(l.hex),i(3),p(l.label),i(3),p(l.uses),i(3),f("",l.onWhite,":1")}}function ss(a,r){if(a&1&&(e(0,`
578            `),n(1,"li")(2,"code"),e(3),t()(),e(4,`
579        `)),a&2){let l=r.$implicit;i(3),p(l)}}function ds(a,r){if(a&1&&(e(0,`
580                    `),n(1,"tr"),e(2,`
581                        `),n(3,"td"),c(4,"span",60),t(),e(5,`
582                        `),n(6,"td"),e(7),t(),e(8,`
583                        `),n(9,"td",41),e(10),t(),e(11,`
584                        `),n(12,"td")(13,"code"),e(14),t()(),e(15,`
585                        `),n(16,"td",42)(17,"code"),e(18),t()(),e(19,`
586                    `),t(),e(20,`
587                `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(3),p(l.label),i(3),p(l.id),i(4),p(l.hex),i(4),f("--",l.teamToken)}}function ms(a,r){if(a&1&&(e(0,`
588                        `),n(1,"th",65),e(2),t(),e(3,`
589                    `)),a&2){let l=r.$implicit;i(2),p(l)}}function cs(a,r){if(a&1&&(e(0,`
590                        `),n(1,"td",66),e(2,`
591                            `),c(3,"span",67),e(4,`
592                        `),t(),e(5,`
593                    `)),a&2){let l=r.$implicit;i(3),W("background-color","var(--team-color-"+l+")")}}function ps(a,r){if(a&1&&(e(0,`
594                            `),n(1,"td",66),e(2,`
595                                `),c(3,"span",67),e(4,`
596                            `),t(),e(5,`
597                        `)),a&2){let l=r.$implicit;i(3),W("background-color","var(--team-color-"+l+")")}}function xs(a,r){if(a&1&&(e(0,`
598                    `),n(1,"tr"),e(2,`
599                        `),n(3,"td",42)(4,"code"),e(5),t(),c(6,"br"),e(7),t(),e(8,`
600                        `),S(9,ps,6,2,null,null,K),t(),e(11,`
601                `)),a&2){let l=r.$implicit,d=u();i(),ne("team-color-"+l.index),i(4),f(".team-color-",l.index),i(2),p(l.name),i(2),E(d.teamSteps)}}function hs(a,r){if(a&1&&(e(0,`
602                        `),n(1,"td",65),e(2),t(),e(3,`
603                    `)),a&2){let l=r.$implicit,d=u();i(2),p(d.teamStepUses[l])}}function us(a,r){a&1&&(e(0,`
604                                `),n(1,"span",41),e(2,"0"),t(),e(3,`
605                            `))}function gs(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
606                                `,l.uses,`
607                            `)}}function fs(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
608                                `,l.onWhite,`:1
609                            `)}}function bs(a,r){a&1&&(e(0,`
610                                `),n(1,"span",41),e(2,"\u2014"),t(),e(3,`
611                            `))}function Ss(a,r){if(a&1&&(e(0,`
612                    `),n(1,"tr"),e(2,`
613                        `),n(3,"td"),c(4,"span",60),t(),e(5,`
614                        `),n(6,"td")(7,"code"),e(8),t()(),e(9,`
615                        `),n(10,"td")(11,"code"),e(12),t()(),e(13,`
616                        `),n(14,"td"),e(15,`
617                            `),v(16,us,4,0)(17,gs,1,1),t(),e(18,`
618                        `),n(19,"td"),e(20,`
619                            `),v(21,fs,1,1)(22,bs,4,0),t(),e(23,`
620                        `),n(24,"td",42),e(25),t(),e(26,`
621                    `),t(),e(27,`
622                `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(4),p(l.token),i(4),p(l.hex),i(4),y(l.uses===0?16:17),i(5),y(l.onWhite?21:22),i(4),p(l.role)}}function Es(a,r){if(a&1&&(e(0,`
623                    `),n(1,"tr"),e(2,`
624                        `),n(3,"td",42),e(4),t(),e(5,`
625                        `),n(6,"td")(7,"code",42),e(8),t()(),e(9,`
626                        `),n(10,"td",42),e(11),t(),e(12,`
627                        `),n(13,"td",42),e(14),t(),e(15,`
628                    `),t(),e(16,`
629                `)),a&2){let l=r.$implicit;i(4),p(l.convention),i(4),p(l.example),i(3),p(l.seenIn),i(3),p(l.problem)}}function vs(a,r){if(a&1&&(e(0,`
630            `),n(1,"div",38),e(2,`
631                `),n(3,"app-user-initials",39),e(4,`
632                `),t(),e(5,`
633                `),n(6,"div",40),e(7,`
634                    `),n(8,"code"),e(9),t(),c(10,"br"),e(11,`
635                    `),n(12,"span",41),e(13),t(),e(14,`
636                `),t(),e(15,`
637            `),t(),e(16,`
638        `)),a&2){let l=r.$implicit;i(3),m("id",l.sampleId),i(6),p(l.token),i(4),p(l.hex)}}function ys(a,r){if(a&1&&(e(0,`
639                    `),n(1,"tr"),e(2,`
640                        `),n(3,"td")(4,"code",42),e(5),t()(),e(6,`
641                        `),n(7,"td"),e(8,`
642                            `),c(9,"span",44),e(10,`
643                            `),n(11,"span",43),e(12),t(),e(13,`
644                        `),t(),e(14,`
645                        `),n(15,"td"),e(16,`
646                            `),n(17,"code",45),e(18),t(),e(19,`
647                        `),t(),e(20,`
648                        `),n(21,"td"),e(22),t(),e(23,`
649                    `),t(),e(24,`
650                `)),a&2){let l=r.$implicit;i(5),p(l.token),i(4),W("background-color",l.hex),i(3),p(l.hex),i(6),p(l.onLight?"--user-avatar-text-on-light":"--user-avatar-text"),i(4),f("",l.ratio,":1")}}function ws(a,r){if(a&1&&(e(0,`
651                                `),n(1,"span",41),e(2),t(),e(3,`
652                            `)),a&2){let l=u().$implicit;i(2),p(l.reach)}}function Cs(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
653                                `,l.reach,`
654                            `)}}function _s(a,r){if(a&1&&(e(0,`
655                    `),n(1,"tr"),e(2,`
656                        `),n(3,"td"),e(4,`
657                            `),n(5,"code",42),e(6),t(),e(7,`
658                            `),n(8,"span",43),e(9),t(),e(10,`
659                        `),t(),e(11,`
660                        `),n(12,"td")(13,"code",42),e(14),t()(),e(15,`
661                        `),n(16,"td",42),e(17),t(),e(18,`
662                        `),n(19,"td",42),e(20,`
663                            `),v(21,ws,4,1)(22,Cs,1,1),t(),e(23,`
664                    `),t(),e(24,`
665                `)),a&2){let l=r.$implicit;i(6),p(l.selector),i(3),p(l.home),i(5),p(l.foreground),i(3),p(l.sizes),i(4),y(l.status==="dead"?21:22)}}function ks(a,r){a&1&&e(0,`
666                                yes
667                            `)}function Ts(a,r){a&1&&(e(0,`
668                                `),n(1,"span",41),e(2,"no \u2014 CSS default only"),t(),e(3,`
669                            `))}function Is(a,r){if(a&1&&(e(0,`
670                                `),n(1,"span",51),e(2),t(),e(3,`
671                            `)),a&2){let l=u().$implicit;i(2),p(l.directConsumers)}}function Ms(a,r){a&1&&(e(0,`
672                                `),n(1,"span",41),e(2,"0"),t(),e(3,`
673                            `))}function Ds(a,r){if(a&1&&(e(0,`
674                    `),n(1,"tr"),e(2,`
675                        `),n(3,"td")(4,"code",42),e(5),t()(),e(6,`
676                        `),n(7,"td")(8,"code",42),e(9),t()(),e(10,`
677                        `),n(11,"td"),e(12,`
678                            `),v(13,ks,1,0)(14,Ts,4,0),t(),e(15,`
679                        `),n(16,"td"),e(17,`
680                            `),v(18,Is,4,1)(19,Ms,4,0),t(),e(20,`
681                    `),t(),e(21,`
682                `)),a&2){let l=r.$implicit;i(5),p(l.themeToken),i(4),p(l.cmsToken),i(4),y(l.setAtRuntime?13:14),i(5),y(l.directConsumers?18:19)}}function Fs(a,r){if(a&1&&(e(0,`
683                    `),n(1,"tr"),e(2,`
684                        `),n(3,"td")(4,"code",42),e(5),t()(),e(6,`
685                        `),n(7,"td")(8,"code",42),e(9),t()(),e(10,`
686                        `),n(11,"td",42),e(12),t(),e(13,`
687                    `),t(),e(14,`
688                `)),a&2){let l=r.$implicit;i(5),p(l.token),i(4),p(l.resolvesTo),i(3),p(l.drives)}}function Ps(a,r){a&1&&(e(0,`
689                                `),n(1,"span",51),e(2,"0"),t(),e(3,`
690                            `))}function As(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
691                                `,l.consumers,`
692                            `)}}function Os(a,r){if(a&1&&(e(0,`
693                    `),n(1,"tr"),e(2,`
694                        `),n(3,"td",42),e(4),t(),e(5,`
695                        `),n(6,"td")(7,"code",42),e(8),t()(),e(9,`
696                        `),n(10,"td"),e(11,`
697                            `),v(12,Ps,4,0)(13,As,1,1),t(),e(14,`
698                        `),n(15,"td",42),e(16),t(),e(17,`
699                    `),t(),e(18,`
700                `)),a&2){let l=r.$implicit;i(4),p(l.field),i(4),p(l.cssVar),i(4),y(l.consumers===0?12:13),i(3),j("text-red",l.broken),i(),p(l.reaches)}}function Ns(a,r){if(a&1&&(e(0,`
701                    `),n(1,"tr"),e(2,`
702                        `),n(3,"td"),c(4,"span",60),t(),e(5,`
703                        `),n(6,"td")(7,"code"),e(8),t()(),e(9,`
704                        `),n(10,"td",42),e(11),t(),e(12,`
705                        `),n(13,"td"),e(14),t(),e(15,`
706                        `),n(16,"td"),e(17),t(),e(18,`
707                        `),n(19,"td",42)(20,"code"),e(21),t()(),e(22,`
708                    `),t(),e(23,`
709                `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(4),p(l.hex),i(3),p(l.origin),i(3),p(l.decls),i(3),p(l.files),i(4),p(l.nearest)}}function Bs(a,r){a&1&&(e(0," "),c(1,"app-pill",68),e(2," "))}function Ws(a,r){a&1&&(e(0," "),c(1,"app-pill",69),e(2," "))}function Rs(a,r){a&1&&(e(0," "),c(1,"app-pill",70),e(2," "))}function Ls(a,r){a&1&&(e(0,`
710                                            `),n(1,"div",72),e(2,`
711                                                `),c(3,"span",73),e(4,`
712                                                `),n(5,"span",45)(6,"code"),e(7,"var(--theme-color-primary)"),t(),e(8," \u2014 resolves to nothing, so the swatch is empty"),t(),e(9,`
713                                            `),t(),e(10,`
714                                            `),n(11,"div",74),e(12,`
715                                                `),c(13,"span",73),e(14,`
716                                                `),n(15,"span",45)(16,"code"),e(17,"var(--theme-color-accent)"),t(),e(18," \u2014 the sibling field that is wired"),t(),e(19,`
717                                            `),t(),e(20,`
718                                        `)),a&2&&(i(3),W("background-color","var(--theme-color-primary)"),i(10),W("background-color","var(--theme-color-accent)"))}function qs(a,r){a&1&&(e(0,`
719                                                                `),n(1,"span",41),e(2,"resolves"),t(),e(3,`
720                                                            `))}function Vs(a,r){a&1&&(e(0,`
721                                                                `),n(1,"span",51),e(2,"no such class"),t(),e(3,`
722                                                            `))}function zs(a,r){if(a&1&&(e(0,`
723                                                    `),n(1,"div",77),e(2,`
724                                                        `),n(3,"span"),e(4,`
725                                                            `),c(5,"span",44),e(6,`
726                                                        `),t(),e(7,`
727                                                        `),n(8,"div",40),e(9),c(10,"br"),e(11,`
728                                                            `),n(12,"code"),e(13),t(),c(14,"br"),e(15,`
729                                                            `),v(16,qs,4,0)(17,Vs,4,0),t(),e(18,`
730                                                    `),t(),e(19,`
731                                                `)),a&2){let l=r.$implicit;i(3),ne(l.emitted),i(2),W("background-color","var(--team-color-500)"),i(4),f(`
732                                                            teamID `,l.teamID),i(4),f(".",l.emitted),i(3),y(l.resolves?16:17)}}function Us(a,r){if(a&1&&(e(0,`
733                                            `),n(1,"div",75),e(2,`
734                                                `),S(3,zs,20,7,null,null,z0),t(),e(5,`
735                                            `),n(6,"p",76),e(7,`
736                                                Each dot carries the class the service actually emits for that teamID.
737                                            `),t(),e(8,`
738                                        `)),a&2){let l=u(3);i(3),E(l.teamFallbackSamples)}}function Hs(a,r){a&1&&(e(0,`
739                                            `),n(1,"div",78),e(2,`
740                                                `),n(3,"code"),e(4,"color: var(--grey900)"),t(),e(5,` \u2014 this text is inheriting, not colored
741                                            `),t(),e(6,`
742                                            `),n(7,"div",79),e(8,`
743                                                `),n(9,"code"),e(10,"color: var(--grey-900)"),t(),e(11,` \u2014 this text is the token
744                                            `),t(),e(12,`
745                                        `))}function js(a,r){a&1&&(e(0,`
746                                            `),n(1,"div",72),e(2,`
747                                                `),c(3,"span",73),e(4,`
748                                                `),n(5,"span",45),e(6,"the token "),n(7,"code"),e(8,"var(--warning)"),t()(),e(9,`
749                                            `),t(),e(10,`
750                                            `),n(11,"div",74),e(12,`
751                                                `),c(13,"span",73),e(14,`
752                                                `),n(15,"span",45),e(16,"the class "),n(17,"span",80),e(18,".text-warning"),t()(),e(19,`
753                                            `),t(),e(20,`
754                                        `)),a&2&&(i(3),W("background-color","var(--warning)"),i(10),W("background-color","var(--yellow-600)"))}function Gs(a,r){if(a&1&&(e(0,`
755                                                    `),n(1,"div",82),e(2,`
756                                                        `),c(3,"span",60),e(4,`
757                                                        `),n(5,"div",83),e(6),t(),e(7,`
758                                                    `),t(),e(8,`
759                                                `)),a&2){let l=r.$implicit;i(3),W("background-color",l.hex),i(3),p(l.token)}}function $s(a,r){if(a&1&&(e(0,`
760                                            `),n(1,"div",81),e(2,`
761                                                `),S(3,Gs,9,3,null,null,Re),t(),e(5,`
762                                            `),n(6,"p",76),e(7,`
763                                                Left to right should get darker. Step 100 is lighter than step 50, and step 50 is a different hue.
764                                            `),t(),e(8,`
765                      
765                  `)),a&2){let l=u(3);i(3),E(l.yellowOrderDemo)}}function Ks(a,r){a&1&&(e(0,`
766                                            `),n(1,"div",72),e(2,`
767                                                `),c(3,"span",84),e(4,`
768                                                `),n(5,"span",45),e(6,"the literal in "),n(7,"code"),e(8,"program-navigation.component.ts"),t()(),e(9,`
769                                            `),t(),e(10,`
770                                            `),n(11,"div",85),e(12,`
771                                                `),c(13,"span",73),e(14,`
772                                                `),n(15,"span",45),e(16,"live "),n(17,"code"),e(18,".team-color-9"),t(),e(19," \u2192 "),n(20,"code"),e(21,"var(--team-color-300)"),t()(),e(22,`
773                                            `),t(),e(23,`
774                                            `),n(24,"p",76),e(25,`
775                                                Identical today. Nothing keeps them that way \u2014 only the top one is a decision anybody records.
776                                            `),t(),e(26,`
777                                        `)),a&2&&(i(13),W("background-color","var(--team-color-300)"))}function Xs(a,r){if(a&1&&(e(0,`
778                                                    `),n(1,"div",86),e(2,`
779                                                        `),c(3,"span",60),e(4,`
780                                                        `),n(5,"div",83),e(6),c(7,"br"),e(8,`
781                                                            `),n(9,"span",41),e(10),t(),e(11,`
782                                                        `),t(),e(12,`
783                                                    `),t(),e(13,`
784                                                `)),a&2){let l=r.$implicit;i(3),W("background-color",l.hex),i(3),p(l.hex),i(4),p(l.label)}}function Ys(a,r){if(a&1&&(e(0,`
785                                            `),n(1,"div",81),e(2,`
786                                                `),S(3,Xs,14,4,null,null,Qo),t(),e(5,`
787                                        `)),a&2){let l=u(3);i(3),E(l.chartGreensDemo)}}function Qs(a,r){if(a&1&&(e(0,`
788                                                    `),n(1,"div",86),e(2,`
789                                                        `),c(3,"span",60),e(4,`
790                                                        `),n(5,"div",83),e(6),c(7,"br"),e(8,`
791                                                            `),n(9,"span",41),e(10),t(),e(11,`
792                                                        `),t(),e(12,`
793                                                    `),t(),e(13,`
794                                                `)),a&2){let l=r.$implicit;i(3),W("background-color",l.hex),i(3),p(l.hex),i(4),p(l.label)}}function Js(a,r){if(a&1&&(e(0,`
795                                            `),n(1,"div",81),e(2,`
796                                                `),S(3,Qs,14,4,null,null,Qo),t(),e(5,`
797                                            `),n(6,"p",76),e(7,`
798                                                Three borders, three systems, close enough that no review has ever caught the difference.
799                                            `),t(),e(8,`
800                                        `)),a&2){let l=u(3);i(3),E(l.threeGreysDemo)}}function Zs(a,r){a&1&&(e(0,`
801                                            `),n(1,"div",72),e(2,`
802                                                `),c(3,"span",73),e(4,`
803                                                `),n(5,"span",45)(6,"code"),e(7,"var(--color1)"),t(),e(8," as this page used to label it \u2014 empty"),t(),e(9,`
804                                            `),t(),e(10,`
805                                            `),n(11,"div",74),e(12,`
806                                                `),c(13,"span",73),e(14,`
807                                                `),n(15,"span",45)(16,"code"),e(17,"var(--blue-1000)"),t(),e(18," \u2014 the token that replaced it"),t(),e(19,`
808                                            `),t(),e(20,`
809                                        `)),a&2&&(i(3),W("background-color","var(--color1)"),i(10),W("background-color","var(--blue-1000)"))}function ed(a,r){if(a&1&&(e(0,`
810                                `),n(1,"div",71),e(2,`
811                                    `),v(3,Ls,21,4)(4,Us,9,0)(5,Hs,13,0)(6,js,21,4)(7,$s,9,0)(8,Ks,27,2)(9,Ys,6,0)(10,Js,9,0)(11,Zs,21,4),e(12,`
812                                `),t(),e(13,`
813                            `)),a&2){let l,d=u().$implicit;i(3),y((l=d.demo)==="unread-var"?3:l==="team-fallback"?4:l==="missing-hyphen"?5:l==="warning-two-colors"?6:l==="yellow-order"?7:l==="program-hex"?8:l==="chart-greens"?9:l==="three-greys"?10:l==="retired-tokens"?11:-1)}}function td(a,r){if(a&1&&(e(0,`
814                    `),n(1,"tr"),e(2,`
815                        `),n(3,"td"),e(4,`
816                            `),v(5,Bs,3,0)(6,Ws,3,0)(7,Rs,3,0),e(8,`
817                        `),t(),e(9,`
818                        `),n(10,"td",42)(11,"strong"),e(12),t()(),e(13,`
819                        `),n(14,"td",0),e(15),v(16,ed,14,1),t(),e(17,`
820                        `),n(18,"td",42),e(19),t(),e(20,`
821                    `),t(),e(21,`
822                `)),a&2){let l,d=r.$implicit;i(5),y((l=d.severity)==="defect"?5:l==="drift"?6:7),i(7),p(d.gap),i(3),f(`
823                            `,d.evidence,`
824                            `),i(),y(d.demo?16:-1),i(3),p(d.impact)}}function nd(a,r){a&1&&(e(0," "),c(1,"app-pill",68),e(2," "))}function id(a,r){a&1&&(e(0," "),c(1,"app-pill",69),e(2," "))}function ad(a,r){a&1&&(e(0," "),c(1,"app-pill",70),e(2," "))}function rd(a,r){if(a&1&&(e(0,`
825                    `),n(1,"tr"),e(2,`
826                        `),n(3,"td"),e(4,`
827                            `),v(5,nd,3,0)(6,id,3,0)(7,ad,3,0),e(8,`
828                        `),t(),e(9,`
829                        `),n(10,"td",42)(11,"strong"),e(12),t()(),e(13,`
830                        `),n(14,"td",42),e(15),t(),e(16,`
831                        `),n(17,"td",0)(18,"code"),e(19),t()(),e(20,`
832                    `),t(),e(21,`
833                `)),a&2){let l,d=r.$implicit;i(5),y((l=d.severity)==="defect"?5:l==="drift"?6:7),i(7),p(d.gap),i(3),p(d.fix),i(4),p(d.touches)}}var Jo=(()=>{let r=class r{constructor(d){this.siteDataService=d,this.snapshotDate="2026-09-01",this.systems=[{system:"Core ramps",home:"1_base/variables.scss",values:"6 ramps \xB7 90 steps",owner:"design system",themeable:"no",anchor:"ramps"},{system:"Semantic aliases",home:"1_base/variables.scss",values:"34 tokens",owner:"design system",themeable:"no",anchor:"aliases"},{system:"Text & background classes",home:"1_base/modifiers.scss",values:"14 text \xB7 14 bg",owner:"design system",themeable:"no",anchor:"utilities"},{system:"Event colors",home:"1_base/variables.scss",values:"4 tokens",owner:"design system",themeable:"no",anchor:"events"},{system:"Program type colors",home:"program-navigation.component.ts",values:"9 hardcoded hex",owner:"one component",themeable:"no",anchor:"program-types"},{system:"Team colors",home:"1_base/team-colors/",values:"14 ramps \xB7 11 steps",owner:"design system",themeable:"per-record",anchor:"teams"},{system:"Dashboard & chart",home:"variables.scss + chart TS",values:"14 tokens + inline hex",owner:"split",themeable:"no",anchor:"charts"},{system:"Avatar backgrounds",home:"variables.scss + player-profile-photo.scss",values:"10 fills \xB7 3 foregrounds",owner:"design system",themeable:"no",anchor:"avatars"},{system:"Buttons & input chrome",home:"variables.scss + ng-theme.scss",values:"19 --theme- \xB7 19 --cms- \xB7 202 --p-",owner:"design system",themeable:"club",anchor:"chrome"},{system:"Club theme overrides",home:"header.component.ts (runtime)",values:"13 admin fields",owner:"club admin",themeable:"club",anchor:"theme"},{system:"Off-token hex",home:"(scattered)",values:"609 decls \xB7 117 distinct",owner:"nobody",themeable:"no",anchor:"foreign"}],this.ramps=[{name:"Grey",region:"#region Neutral/Grey",steps:[{token:"--grey-0",hex:"#ffffff",uses:4,note:"Same value as --color-white (364 uses)."},{token:"--grey-50",hex:"#fafbfc",uses:82,note:"--primary-background"},{token:"--grey-75",hex:"#f5f8fa",uses:57,note:"--light-grey-background"},{token:"--grey-100",hex:"#f1f5f8",uses:101,note:"--secondary-background \xB7 note alert fill"},{token:"--grey-200",hex:"#e9eff4",uses:101,note:"input group addon fill"},{token:"--grey-300",hex:"#dce4e9",uses:63,note:"--border-color-light"},{token:"--grey-400",hex:"#cdd4da",uses:108,note:"--border-color \xB7 --form-border"},{token:"--grey-500",hex:"#b8c0c5",uses:44,note:""},{token:"--grey-600",hex:"#9ea5aa",uses:91,note:"--text-grey-lt \xB7 .text-grey-lt"},{token:"--grey-700",hex:"#7f8489",uses:85,note:"note alert icon"},{token:"--grey-800",hex:"#595c60",uses:91,note:"--text-grey \xB7 --form-label \xB7 .text-grey"},{token:"--grey-900",hex:"#2e3032",uses:72,note:"--base-text \xB7 --header-link \xB7 --icon-link"},{token:"--grey-1000",hex:"#000000",uses:12,note:"Same value as --color-black (44 uses)."}]},{name:"Green",region:"#region Green",steps:[{token:"--green-25",hex:"#eef9ec",uses:5,note:"--light-green-background"},{token:"--green-50",hex:"#ddf3d9",uses:10,note:"success alert fill"},{token:"--green-100",hex:"#ccf1c2",uses:9,note:""},{token:"--green-200",hex:"#a9e397",uses:4,note:""},{token:"--green-300",hex:"#8fdb75",uses:7,note:".bg-green-lt"},{token:"--green-400",hex:"#78c867",uses:10,note:""},{token:"--green-500",hex:"#5ab361",uses:6,note:""},{token:"--green-600",hex:"#4ca45a",uses:28,note:"--success \xB7 --confirmation \xB7 --border-green \xB7 .text-green-alt"},{token:"--green-700",hex:"#3c894d",uses:31,note:".text-green"},{token:"--green-800",hex:"#2d6944",uses:17,note:""},{token:"--green-900",hex:"#1c4130",uses:6,note:""},{token:"--green-950",hex:"#124012",uses:0,note:"dead"},{token:"--green-1000",hex:"#0d2a0c",uses:1,note:""},{token:"--green-1500",hex:"#081906",uses:0,note:"dead"},{token:"--green-2000",hex:"#030c03",uses:0,note:"dead"}]},{name:"Red",region:"#region Red",steps:[{token:"--red-25",hex:"#fff2f3",uses:2,note:""},{token:"--red-50",hex:"#ffdee0",uses:22,note:""},{token:"--red-100",hex:"#fdb5b8",uses:12,note:"error alert fill"},{token:"--red-200",hex:"#f98d91",uses:5,note:""},{token:"--red-300",hex:"#f4696c",uses:1,note:""},{token:"--red-400",hex:"#eb464a",uses:4,note:""},{token:"--red-500",hex:"#e0222b",uses:11,note:'--warning \u2014 the token named "warning" is RED'},{token:"--red-600",hex:"#c6161f",uses:8,note:""},{token:"--red-700",hex:"#a11019",uses:35,note:"--error \xB7 .text-red"},{token:"--red-800",hex:"#7d0d14",uses:25,note:".text-dark-red \xB7 error alert border"},{token:"--red-900",hex:"#570a0f",uses:4,note:""},{token:"--red-950",hex:"#380508",uses:0,note:"dead"},{token:"--red-1000",hex:"#2a0406",uses:0,note:"dead"},{token:"--red-1500",hex:"#1e0204",uses:0,note:"dead"},{token:"--red-2000",hex:"#0c0102",uses:0,note:"dead"}]},{name:"Orange",region:"#region Orange",steps:[{token:"--orange-25",hex:"#fff4e8",uses:0,note:"dead"},{token:"--orange-50",hex:"#ffe2c8",uses:13,note:""},{token:"--orange-100",hex:"#ffc999",uses:1,note:""},{token:"--orange-200",hex:"#ffb36f",uses:3,note:""},{token:"--orange-300",hex:"#ff9a4c",uses:1,note:""},{token:"--orange-400",hex:"#ff8732",uses:2,note:""},{token:"--orange-500",hex:"#ff7500",uses:8,note:""},{token:"--orange-600",hex:"#e46600",uses:1,note:""},{token:"--orange-700",hex:"#c65400",uses:6,note:""},{token:"--orange-800",hex:"#993800",uses:1,note:""},{token:"--orange-900",hex:"#5e1f00",uses:2,note:""},{token:"--orange-950",hex:"#2e1203",uses:0,note:"dead"},{token:"--orange-1000",hex:"#220a00",uses:0,note:"dead"},{token:"--orange-1500",hex:"#160600",uses:0,note:"dead"},{token:"--orange-2000",hex:"#0d0300",uses:0,note:"dead"}]},{name:"Yellow",region:"#region Yellow",steps:[{token:"--yellow-25",hex:"#fff3c9",uses:2,note:""},{token:"--yellow-50",hex:"#ffe1b8",uses:17,note:"warning alert fill \u2014 an ORANGE inside the yellow ramp"},{token:"--yellow-100",hex:"#ffe98f",uses:3,note:"lighter than --yellow-50 \u2014 ramp is out of order"},{token:"--yellow-200",hex:"#ffe066",uses:5,note:""},{token:"--yellow-300",hex:"#ffd338",uses:7,note:".text-yellow"},{token:"--yellow-400",hex:"#f7cf4c",uses:13,note:""},{token:"--yellow-500",hex:"#f5bf41",uses:13,note:"--caution \xB7 warning alert border"},{token:"--yellow-600",hex:"#d39c36",uses:9,note:".text-warn \xB7 .text-warning"},{token:"--yellow-700",hex:"#b0782a",uses:3,note:"warning alert icon"},{token:"--yellow-800",hex:"#8b501f",uses:3,note:""},{token:"--yellow-900",hex:"#4f2c0b",uses:2,note:""},{token:"--yellow-950",hex:"#2a1b08",uses:0,note:"dead"}]}],this.deadSteps=this.ramps.reduce((s,o)=>s+o.steps.filter(x=>x.uses===0).length,0),this.aliases=[{token:"--color-white",resolvesTo:"#ffffff",hex:"#ffffff",uses:364,note:"The single most-used token in the app. Duplicates --grey-0.",suspect:!0},{token:"--color-black",resolvesTo:"#000000",hex:"#000000",uses:44,note:"Duplicates --grey-1000.",suspect:!0},{token:"--color-black-lt",resolvesTo:"#111111",hex:"#111111",uses:6,note:"Not on any ramp.",suspect:!1},{token:"--base-text",resolvesTo:"--grey-900",hex:"#2e3032",uses:93,note:'Source comment: "not just being used for text \u2014 borders and backgrounds use this too."',suspect:!1},{token:"--base-text-alt",resolvesTo:"--blue-1000",hex:"#001537",uses:6,note:"Same value as --base-header and .text-navy.",suspect:!0},{token:"--base-text-alt-lt",resolvesTo:"--blue-900",hex:"#054584",uses:2,note:"Same value as .text-blue and --002d73.",suspect:!0},{token:"--base-header",resolvesTo:"--blue-1000",hex:"#001537",uses:2,note:"Same value as --base-text-alt. Trailing comment still says //#221E20.",suspect:!0},{token:"--base-sub-header",resolvesTo:"#6684a0",hex:"#6684a0",uses:1,note:'Off-ramp. Comment says "60% of base-header" but it is not that value.',suspect:!0},{token:"--warning",resolvesTo:"--red-500",hex:"#e0222b",uses:20,note:'Named "warning", renders RED. .text-warning renders YELLOW. Same word, two colors.',suspect:!0},{token:"--caution",resolvesTo:"--yellow-500",hex:"#f5bf41",uses:13,note:"The token that actually holds the warning yellow.",suspect:!1},{token:"--error",resolvesTo:"--red-700",hex:"#a11019",uses:3,note:"Only 3 uses \u2014 --warning (a different red) is used 20 times instead.",suspect:!0},{token:"--success",resolvesTo:"--green-600",hex:"#4ca45a",uses:18,note:"",suspect:!1},{token:"--confirmation",resolvesTo:"--green-600",hex:"#4ca45a",uses:1,note:"Identical to --success. Two names, one green.",suspect:!0},{token:"--brand-color",resolvesTo:"#ec4f2e",hex:"#ec4f2e",uses:4,note:"Sprocket orange. Off-ramp \u2014 nearest is --orange-500 #ff7500.",suspect:!0},{token:"--002d73",resolvesTo:"--blue-900",hex:"#054584",uses:20,note:"Named after a hex it no longer holds. #002d73 is a different blue.",suspect:!0},{token:"--border-blue",resolvesTo:"--blue-700",hex:"#1d6ae5",uses:9,note:"Duplicate of --primary-link at another name.",suspect:!0},{token:"--border-green",resolvesTo:"--green-600",hex:"#4ca45a",uses:2,note:"Duplicate of --success at another name.",suspect:!0},{token:"--header-link",resolvesTo:"--grey-900",hex:"#2e3032",uses:1,note:'Filed under "Orphan Colors" in source. Trailing comment says //#30363D.',suspect:!0},{token:"--icon-link",resolvesTo:"--grey-900",hex:"#2e3032",uses:1,note:"Identical to --header-link.",suspect:!0},{token:"--form-label",resolvesTo:"--grey-800",hex:"#595c60",uses:3,note:"",suspect:!1},{token:"--text-grey",resolvesTo:"--grey-800",hex:"#595c60",uses:4,note:"Token and class .text-grey hold the same value by coincidence, not by reference.",suspect:!1},{token:"--text-grey-lt",resolvesTo:"--grey-600",hex:"#9ea5aa",uses:5,note:"",suspect:!1},{token:"--border-color",resolvesTo:"--grey-400",hex:"#cdd4da",uses:90,note:"",suspect:!1},{token:"--border-color-light",resolvesTo:"--grey-300",hex:"#dce4e9",uses:3,note:"",suspect:!1},{token:"--form-border",resolvesTo:"--grey-400",hex:"#cdd4da",uses:13,note:"Duplicate of --border-color at another name.",suspect:!0},{token:"--primary-background",resolvesTo:"--grey-50",hex:"#fafbfc",uses:13,note:"",suspect:!1},{token:"--secondary-background",resolvesTo:"--grey-100",hex:"#f1f5f8",uses:4,note:"",suspect:!1},{token:"--light-grey-background",resolvesTo:"--grey-75",hex:"#f5f8fa",uses:11,note:"",suspect:!1},{token:"--light-blue-background",resolvesTo:"--blue-50",hex:"#ebf7ff",uses:6,note:"Same value as the info alert fill.",suspect:!1},{token:"--light-green-background",resolvesTo:"--green-25",hex:"#eef9ec",uses:1,note:"",suspect:!1},{token:"--color-highlight",resolvesTo:"#ff0",hex:"#ffff00",uses:1,note:"Only 3-digit hex in the file. Backs .text-highlight, which sets background not color.",suspect:!0},{token:"--color-code",resolvesTo:"#e01a76",hex:"#e01a76",uses:1,note:"Off-ramp magenta for <code>. Defined in styles.scss, not the palette.",suspect:!1},{token:"--primary-link",resolvesTo:"--blue-700",hex:"#1d6ae5",uses:96,note:"See blues & links.",suspect:!1},{token:"--primary-link-hover",resolvesTo:"--blue-800",hex:"#0e58bb",uses:36,note:"See blues & links.",suspect:!1}],this.suspectAliases=this.aliases.filter(s=>s.suspect).length,this.textClasses=[{className:"text-red",token:"--red-700",hex:"#a11019",onWhite:8.07,role:"error intent"},{className:"text-dark-red",token:"--red-800",hex:"#7d0d14",onWhite:10.83,role:"darker error"},{className:"text-warning",token:"--yellow-600",hex:"#d39c36",onWhite:2.45,role:"warning intent \u2014 but --warning the token is red"},{className:"text-yellow",token:"--yellow-300",hex:"#ffd338",onWhite:1.44,role:"not usable as text on white"},{className:"text-green",token:"--green-700",hex:"#3c894d",onWhite:4.31,role:"success intent"},{className:"text-green-alt",token:"--green-600",hex:"#4ca45a",onWhite:3.1,role:"second success green"},{className:"text-blue",token:"--blue-900",hex:"#054584",onWhite:9.59,role:"info intent"},{className:"text-navy",token:"--blue-1000",hex:"#001537",onWhite:18.07,role:"heading blue"},{className:"text-header-blue",token:"--blue-800 @ .8 opacity",hex:"#0e58bb",onWhite:6.7,role:"only class that makes a color with opacity"},{className:"text-primary-link",token:"--primary-link",hex:"#1d6ae5",onWhite:4.95,role:"link blue on non-anchors"},{className:"text-color-default",token:"--base-text",hex:"#2e3032",onWhite:13.25,role:"body"},{className:"text-grey",token:"--grey-800",hex:"#595c60",onWhite:6.72,role:"de-emphasis"},{className:"text-grey-lt",token:"--grey-600",hex:"#9ea5aa",onWhite:2.5,role:"furthest de-emphasis"},{className:"text-white",token:"--color-white",hex:"#ffffff",onWhite:1,role:"on dark only"}],this.bgClasses=[{className:"bg-white",token:"--color-white"},{className:"bg-grey-lt",token:"--grey-75"},{className:"bg-grey",token:"--grey-100"},{className:"bg-grey-md",token:"--grey-200"},{className:"bg-blue-lt",token:"--blue-50"},{className:"bg-green-lt",token:"--green-50"},{className:"bg-green",token:"--green-600"},{className:"bg-red-lt",token:"--red-50"},{className:"bg-red",token:"--red-700"},{className:"bg-navy",token:"--blue-1000"},{className:"bg-navy-lt",token:"--blue-900"},{className:"bg-warning",token:"--yellow-50"},{className:"bg-primary",token:"--primary-link"},{className:"bg-secondary",token:"--grey-600"}],this.eventColors=[{token:"--event-color--game",hex:"#f78909",label:"Game",uses:6,onWhite:2.46},{token:"--event-color--practice",hex:"#0e58bb",label:"Practice",uses:6,onWhite:6.7},{token:"--event-color--club",hex:"#039874",label:"Club event",uses:6,onWhite:3.65},{token:"--event-color--default",hex:"#422593",label:"Everything else",uses:8,onWhite:10.95}],this.eventConsumers=["calendar-event-row-simple.component.scss \u2014 fill + 4px left border","calendar-card.component.scss \u2014 card accent","scheduling.component.scss \u2014 dashboard team panel","assets/css/shared/calendarEventCard.scss","3_modules/components/pill.scss \u2014 event pills"],this.programTypes=[{label:"Core (Team)",id:1,hex:"#64BDFF",teamToken:"team-color-9 (blue) \xB7 300"},{label:"Tryouts",id:2,hex:"#8C8BEC",teamToken:"team-color-8 (indigo) \xB7 300"},{label:"Supplemental",id:3,hex:"#B8D84F",teamToken:"team-color-13 (lime) \xB7 400"},{label:"Other / fallback",id:4,hex:"#87D388",teamToken:"team-color-12 (green) \xB7 300"},{label:"Tournament",id:5,hex:"#FDD55C",teamToken:"team-color-1 (yellow) \xB7 300"},{label:"League",id:6,hex:"#189E8A",teamToken:"team-color-11 (teal) \xB7 500"},{label:"Sessions",id:7,hex:"#FF8E43",teamToken:"team-color-2 (orange) \xB7 400"},{label:"Subscription",id:8,hex:"#5756D5",teamToken:"team-color-8 (indigo) \xB7 500"},{label:"Camps & Clinics",id:9,hex:"#1BA6D8",teamToken:"team-color-10 (cyan) \xB7 500"}],this.teamRamps=[{index:1,name:"Yellow"},{index:2,name:"Orange"},{index:3,name:"Red"},{index:4,name:"Ros\xE9"},{index:5,name:"Pink"},{index:6,name:"Fuchsia"},{index:7,name:"Purple"},{index:8,name:"Indigo"},{index:9,name:"Blue"},{index:10,name:"Cyan"},{index:11,name:"Teal"},{index:12,name:"Green"},{index:13,name:"Lime"},{index:14,name:"Moss"}],this.teamSteps=[50,100,200,300,400,500,600,700,800,900,950],this.teamStepUses={50:10,100:10,200:10,300:10,400:10,500:25,600:11,700:10,800:10,900:10,950:10},this.dashboardColors=[{token:"--dashboard-color-default",hex:"#1D6AE5",uses:2,role:"chart series 1 \u2014 same value as --blue-700",onWhite:4.95},{token:"--dashboard-color-success",hex:"#00CE9B",uses:24,role:"chart series 2 \u2014 a green n
833othing else in the app uses",onWhite:2.04},{token:"--dashboard-color-medium",hex:"#FFAA02",uses:23,role:"chart series 3 \u2014 off-ramp amber",onWhite:1.91},{token:"--dashboard-color-critical",hex:"#EC4F2E",uses:25,role:"chart series 4 \u2014 same value as --brand-color",onWhite:3.67},{token:"--dashboard-color-low",hex:"#c9d5dd",uses:7,role:"heatmap low",onWhite:null},{token:"--dashboard-color-medium-low",hex:"#efd17d",uses:1,role:"heatmap medium-low",onWhite:null},{token:"--dashboard-color-none",hex:"#e8f0f6",uses:0,role:"heatmap empty \u2014 dead",onWhite:null},{token:"--dashboard-bar-primary",hex:"#00CE9B",uses:1,role:"identical to --dashboard-bar-secondary",onWhite:null},{token:"--dashboard-bar-secondary",hex:"#00CE9B",uses:1,role:"identical to --dashboard-bar-primary",onWhite:null},{token:"--dashboard-bar-male",hex:"#9abcd6",uses:0,role:"dead",onWhite:null},{token:"--dashboard-bar-female",hex:"#d69a9a",uses:0,role:"dead",onWhite:null},{token:"--dashboard-bar-other",hex:"#9bd8a5",uses:0,role:"dead",onWhite:null},{token:"--dashboard-chart-mobile",hex:"#ff7f0e",uses:0,role:"dead \u2014 matplotlib default orange",onWhite:null},{token:"--dashboard-chart-desktop",hex:"#1f77b4",uses:0,role:"dead \u2014 matplotlib default blue",onWhite:null}],this.chartConventions=[{convention:"Read the token at runtime, fall back to hex",example:"documentStyle.getPropertyValue('--dashboard-color-default').trim() || '#1D6AE5'",seenIn:"analytics-dashboard.component.ts (donut + bar series)",problem:"Correct. This is the one that actually tracks the token."},{convention:"Token read, then commented out and replaced with hex",example:"borderColor: '#1D6AE5', //documentStyle.getPropertyValue('--blue-700') || '#1D6AE5'",seenIn:"analytics-dashboard.component.ts:728, :737",problem:"Someone hit a timing bug and pinned the hex. --green-700 is #3c894d; the pinned partner value is #00D297, a third green."},{convention:"Hex with the token name in a trailing comment",example:"borderColor: '#1d6ae5', // --blue-700",seenIn:"progress.component.ts (29 hex, every one annotated)",problem:"The comment is the only link to the token. Change the ramp and every chart silently keeps the old color."},{convention:"Bare hex from a foreign palette",example:"if (intensity < 0.5) return '#6baed6';",seenIn:"analytics-dashboard.component.ts:613-617, :651-655",problem:"A 5-step ColorBrewer Blues ramp, duplicated in two functions, unrelated to --blue-*."}],this.avatarColors=[{token:"--user-avatar-1",hex:"#f7b905",sampleId:1,ratio:8.51,onLight:!0},{token:"--user-avatar-2",hex:"#e84234",sampleId:2,ratio:3.04},{token:"--user-avatar-3",hex:"#f43993",sampleId:3,ratio:2.75},{token:"--user-avatar-4",hex:"#595c60",sampleId:4,ratio:5.01},{token:"--user-avatar-5",hex:"#ac51fc",sampleId:5,ratio:3.06},{token:"--user-avatar-6",hex:"#7b1fa2",sampleId:6,ratio:5.77},{token:"--user-avatar-7",hex:"#0c4caf",sampleId:7,ratio:5.63},{token:"--user-avatar-8",hex:"#4688f5",sampleId:8,ratio:2.76},{token:"--user-avatar-9",hex:"#0592a1",sampleId:9,ratio:2.93},{token:"--user-avatar-0",hex:"#34b557",sampleId:10,ratio:2.21}],this.avatarFallback={token:"--user-avatar-none",hex:"#D1D1D1",wasHex:"#e9eff4",wasToken:"--grey-200",ratio:9.42,wasShared:1.09,onLight:!0},this.avatarForegrounds=[{selector:"span.user-initials.userN",home:"3_modules/components/player-profile-photo.scss",foreground:"var(--user-avatar-text) \xB7 -on-light on .user1",sizes:"0.65rem tiny/small \xB7 0.875rem default \xB7 1.5rem large \xB7 2.5rem banner",reach:"every avatar in the app \u2014 the one place the foreground is decided",status:"live"},{selector:".chat-first-few div.userN",home:"was message-avatar-group.component.scss:67",foreground:"none declared \u2014 inherited --base-text",sizes:"0.5rem (2-3 up) \xB7 0.65rem (1 up)",reach:"gone \u2014 the group renders app-user-initials now, so it takes the pair above",status:"dead"},{selector:".player-profile-header .profile-image span.user-initials.default-circle",home:"was 3_modules/templates.scss:425",foreground:"var(--grey-500) #b8c0c5",sizes:"70px circle \xB7 --text-larger",reach:"gone \u2014 never matched anything; its only call site rendered .large-circle",status:"dead"}],this.buttonLayers=[{themeToken:"--theme-button-background",cmsToken:"--cms-button-background",setAtRuntime:!1,directConsumers:0},{themeToken:"--theme-button-background-hover",cmsToken:"--cms-button-background-hover",setAtRuntime:!0,directConsumers:0},{themeToken:"--theme-button-text-color",cmsToken:"--cms-button-text-color",setAtRuntime:!0,directConsumers:0},{themeToken:"--theme-button-text-color-hover",cmsToken:"--cms-button-text-color-hover",setAtRuntime:!0,directConsumers:0},{themeToken:"--theme-button-border",cmsToken:"--cms-button-border",setAtRuntime:!0,directConsumers:0},{themeToken:"--theme-button-border-hover",cmsToken:"--cms-button-border-hover",setAtRuntime:!0,directConsumers:0},{themeToken:"--theme-button-background--primary",cmsToken:"--cms-button-background--primary",setAtRuntime:!0,directConsumers:0},{themeToken:"--theme-button-border--primary",cmsToken:"--cms-button-border--primary",setAtRuntime:!0,directConsumers:2},{themeToken:"--theme-button-text-color--naked",cmsToken:"--cms-button-text-color--naked",setAtRuntime:!0,directConsumers:0},{themeToken:"--theme-button-background--naked",cmsToken:"--cms-button-background--naked",setAtRuntime:!1,directConsumers:0},{themeToken:"--theme-button-radius",cmsToken:"--cms-button-radius",setAtRuntime:!0,directConsumers:6}],this.primeBridge=[{token:"--p-primary-500",resolvesTo:"--blue-700",drives:"focus ring, form-field focus border, badge, tabs"},{token:"--p-select-option-selected-background",resolvesTo:"--primary-link",drives:"selected dropdown option"},{token:"--p-select-border-color",resolvesTo:"--form-border",drives:"select chrome"},{token:"--p-select-hover-border-color",resolvesTo:"--primary-link-hover",drives:"select hover"},{token:"--p-inputgroup-addon-background",resolvesTo:"--grey-200",drives:"input group addon"},{token:"--p-inputgroup-addon-color",resolvesTo:"--grey-800",drives:"input group addon text"},{token:"--p-button-primary-active-background",resolvesTo:"--primary-link-hover",drives:"primary button :active"},{token:"--p-button-text-primary-hover-background",resolvesTo:"--grey-200",drives:"text button hover fill"}
833],this.themeFields=[{field:"topNavigationBackground",cssVar:"--theme-top-navigation-background",consumers:24,reaches:"primary nav fill (+ derived -hover)",broken:!1},{field:"topNavigationTextColor",cssVar:"--theme-top-navigation-text-color",consumers:0,reaches:"Reaches CSS only via --theme-top-navigation-background-contrast (24). The named var is dead.",broken:!0},{field:"colorCTAButtons",cssVar:"--theme-color-cta-buttons",consumers:13,reaches:"CTA buttons across page-builder content",broken:!1},{field:"colorCTAButtons (hover)",cssVar:"--theme-color-cta-buttons--hover",consumers:4,reaches:"CTA hover text, darkened until it clears AA on the white hover fill",broken:!1},{field:"colorAccent",cssVar:"--theme-color-accent",consumers:7,reaches:"accent surfaces; contrast partner has 10",broken:!1},{field:"colorPrimary",cssVar:"--theme-color-primary",consumers:0,reaches:"Nothing in CSS reads it, or its -hover / -contrast partners. Only the mobile-home preview uses the raw field.",broken:!0},{field:"bannerColor",cssVar:"--theme-banner-background",consumers:6,reaches:"banner fill (+ auto contrast)",broken:!1},{field:"textColor",cssVar:"--theme-banner-text-color",consumers:3,reaches:"banner text",broken:!1},{field:"buttonBackgroundColor",cssVar:"--theme-button-* (9 of them)",consumers:8,reaches:"default / primary / naked button flavors",broken:!1},{field:"buttonTextColor",cssVar:"--theme-button-text-color-hover*",consumers:5,reaches:"set after a contrast check",broken:!1},{field:"footerNavigationBackground",cssVar:"--theme-footer-background-color",consumers:1,reaches:"footer fill",broken:!1},{field:"footerNavigationHeaderColor",cssVar:"--theme-footer-header-color",consumers:1,reaches:"footer headings",broken:!1},{field:"footerNavigationLinkColor",cssVar:"--theme-footer-link-color",consumers:3,reaches:"footer links",broken:!1}
833,{field:"pageBackgroundColor",cssVar:"--html-background-color",consumers:1,reaches:"html background",broken:!1},{field:"pageOverlayColor / pageSecondaryOverlayColor",cssVar:"--html-background-image",consumers:1,reaches:"composed into a linear-gradient in TS, not a color var",broken:!1},{field:"columnTextColor",cssVar:"(none)",consumers:0,reaches:"Applied inline by page-builder, never becomes a variable.",broken:!1}],this.brokenThemeFields=this.themeFields.filter(s=>s.broken).length,this.foreign=[{hex:"#007bff",origin:"Bootstrap 4 $primary",decls:31,files:12,nearest:"--blue-600 #297ef4"},{hex:"#e5e7eb",origin:"Tailwind gray-200",decls:28,files:3,nearest:"--grey-300 #dce4e9"},{hex:"#6b7280",origin:"Tailwind gray-500",decls:23,files:3,nearest:"--grey-800 #595c60"},{hex:"#6c757d",origin:"Bootstrap 4 $secondary",decls:22,files:6,nearest:"--grey-700 #7f8489"},{hex:"#f8f9fa",origin:"Bootstrap 4 $light",decls:21,files:9,nearest:"--grey-50 #fafbfc"},{hex:"#dee2e6",origin:"Bootstrap 4 $gray-300",decls:20,files:9,nearest:"--grey-300 #dce4e9"},{hex:"#4f46e5",origin:"Tailwind indigo-600",decls:20,files:3,nearest:"--blue-800 #0e58bb"},{hex:"#28a745",origin:"Bootstrap 4 $success",decls:19,files:7,nearest:"--green-600 #4ca45a"},{hex:"#f3f4f6",origin:"Tailwind gray-100",decls:16,files:4,nearest:"--grey-100 #f1f5f8"},{hex:"#e0e0e0",origin:"Material grey-300",decls:16,files:5,nearest:"--grey-300 #dce4e9"},{hex:"#495057",origin:"Bootstrap 4 $gray-700",decls:14,files:4,nearest:"--grey-800 #595c60"},{hex:"#f9fafb",origin:"Tailwind gray-50",decls:13,files:3,nearest:"--grey-50 #fafbfc"},{hex:"#dc3545",origin:"Bootstrap 4 $danger",decls:12,files:6,nearest:"--red-600 #c6161f"},{hex:"#4b5563",origin:"Tailwind gray-600",decls:10,files:3,nearest:"--grey-800 #595c60"},{hex:"#374151",origin:"Tailwind gray-700",decls:9,files:2,nearest:"--grey-900 #2e3032"},{hex:"#ef4444",origin:"Tailwind red-500",decls:8,files:3,nearest:"--red-500 #e0222b"}],this.foreignTotalDecls=609,this.foreignDistinct=117,this.gaps=[{gap:"colorPrimary is an admin-editable theme color that changes nothing",evidence:"theme.component.html:392 exposes the field; header.component.ts:834 writes --theme-color-primary. Zero CSS consumers, including its -hover and -contrast partners.",impact:"Admins set a primary brand color and see no change on the site.",severity:"defect",demo:"unread-var",fix:`Decide what primary means, then either point something at it or retire the field. --theme-color-accent is already wired and already means "the club's color" to 17 rules \u2014 if primary is a duplicate of accent, remove the control rather than wiring a second one.`,touches:"theme.component.html:392 \xB7 header.component.ts:833-839"},{gap:"1 team in 10 falls back to grey",evidence:"TeamColorsService.getTeamColorClassName() does teamID.toString().slice(-2). A teamID ending 00-09 yields class team-color-05, but only .team-color-1 \u2026 .team-color-14 exist.",impact:"Those teams silently render the default grey ramp on calendars, dots and pipes.",severity:"defect",demo:"team-fallback",fix:"Derive the index arithmetically instead of by string slicing: ((teamID - 1) % 14) + 1 always lands in 1-14 and spreads evenly. The slice also biases the distribution \u2014 8 of the 14 hues are only reachable via the two-digit branch.",touches:"team-colors.service.ts getTeamColorClassName()"},{gap:"No avatar fill clears AA under the foreground that ships on it",evidence:"The base span.user-initials rule set one shared foreground for every fill. Composited over the ten --user-avatar-* fills the shared white runs 2.21:1 to 5.77:1 \u2014 see \xA79. It also reached the --grey-200 fallback fill at 1.09:1, and gold at 1.57:1.",impact:"Initials are what tells one avatar from another, and seven of the ten fills sit below 4.5:1 at every size the component renders. On gold and on the fallback they were effectively invisible.",severity:"defect",fix:"Resolved by scope, not by colour: the initials are decorative and aria-hidden, so SC 1.4.3 does not apply \u2014 see the avatars page \xA71. The token set gained a single --user-avatar-text so the three rules in \xA79 stop each picking their own, and the two fills where the type was not low-contrast but absent take --user-avatar-text-on-light instead: gold (1.57:1 white, 8.51:1 dark) and the no-id fallback (#D1D1D1, 1.41:1 white, 9.42:1 dark). Matched to the mobile client 2026-09-03.",touches:"variables.scss #region User Avatar Backgroun
833ds \xB7 player-profile-photo.scss:33 \xB7 message-avatar-group.component.scss"},{gap:"var(--grey900) \u2014 a token that was never defined",evidence:"staff-card.component.scss:7, cms.scss:234, pb-blog.scss:24. The real token is --grey-900 with a hyphen.",impact:"Those three declarations are no-ops; the elements inherit instead.",severity:"defect",demo:"missing-hyphen",fix:"Add the hyphen \u2014 but check the rendered result first. These have been inheriting for long enough that the inherited color may be what the design now expects, in which case delete the declaration instead of fixing it.",touches:"staff-card.component.scss:7 \xB7 cms.scss:234 \xB7 pb-blog.scss:24"},{gap:'"warning" means two different colors',evidence:"--warning resolves to --red-500 (#e0222b). .text-warning resolves to --yellow-600 (#d39c36).",impact:"Picking by name gets you red or yellow depending on whether you reach for the token or the class.",severity:"drift",demo:"warning-two-colors",fix:"Retire --warning. --caution already holds the warning yellow and --error already holds the error red, so every one of the 20 --warning uses is really one or the other \u2014 audit each and re-point it, then delete the token so the name cannot be picked again.",touches:"20 call sites \xB7 variables.scss #region Orphan Colors"},{gap:"The yellow ramp is out of order",evidence:"--yellow-50 is #ffe1b8 (an orange), --yellow-100 is #ffe98f (lighter than the step below it).",impact:"Choosing a step by number does not reliably choose a lightness.",severity:"drift",demo:"yellow-order",fix:"Move #ffe1b8 to the orange ramp where its hue belongs and re-cut yellow 25-200 as a monotonic run. 17 of its 20 uses are the warning-alert fill, so most of the churn lands in one partial.",touches:"variables.scss #region Yellow \xB7 inline-alert.component.scss"},{gap:"Program-type colors are the team palette, retyped as hex",evidence:"All 9 constants in program-navigation.component.ts land exactly on a --team-color-* step.",impact:"Re-tuning the team palette leaves the program cards behind. Locked in by a spec that asserts the literals.",severity:"drift",demo:"program-hex",fix:"Emit the class, not the color: give each program type a .team-color-N and let the card read var(--team-color-300). The spec should then assert the hue index, which is the thing that is actually a decision \u2014 the hex is an implementation detail of the palette.",touches:"program-navigation.component.ts + .spec.ts + .html"},{gap:"Charts pick colors four different ways",evidence:"See \xA78. One reads the token, one comments the token out, one puts the token in a trailing comment, one uses a ColorBrewer ramp.",impact:"Three of the four do not track the palette at all.",severity:"drift",demo:"chart-greens",fix:"One helper \u2014 readToken(name, fallback) \u2014 in shared/constants.ts, and every chart calls it. That collapses the four conventions to one and gives the commented-out reads somewhere to come back to. Resolve the three greens to a single series color while doing it.",touches:"shared/constants.ts \xB7 6 chart components"},{gap:"Components reach past the --cms-* layer they were told to use",evidence:'variables.scss:376 says "--theme-* are the raw/palette layer. Components should not consume these directly." 8 component rules read --theme-button-* anyway.',impact:"The semantic layer cannot be re-pointed without breaking those 8.",severity:"drift",fix:"Re-point the 8 rules at their --cms-* equivalent. Mechanical \u2014 the semantic token already resolves to the raw one, so the rendered result is unchanged and the diff is safe to land on its own.",touches:"page-builder-row-edit \xB7 feature-cards-content \xB7 calendar-content \xB7 button-content"},{gap:"Three grey systems ship side by side",evidence:"Sprocket --grey-*, Bootstrap 4 greys (#6c757d, #f8f9fa, #dee2e6, #495057) and Tailwind greys (#e5e7eb, #6b7280, #f3f4f6, #f9fafb, #4b5563, #374151).",impact:"609 hardcoded declarations, 117 distinct values, none of them themeable.",severity:"drift",demo:"three-greys",fix:"Sweep by origin, not by file. The Bootstrap set and the Tailwind set are each a small fixed vocabulary with a known nearest token, so one find-and-replace table clears most of the 
833609. Worth its own project doc \u2014 the swap is visible, so it needs eyes-on per wave.",touches:"app/** component SCSS \u2014 117 distinct values"},{gap:"The 60-color team accent palette is dead",evidence:"3_modules/components/team-accent-colors.scss generates .team-color-0 \u2026 .team-color-59 and --team-color-0 \u2026 59, but its @import in components.scss:1063 is commented out.",impact:"223 lines of Flat-UI palette that would collide with the .team-color-1 \u2026 14 ramp classes if re-enabled.",severity:"dead",fix:"Delete the file and the commented @import. It has been off long enough that nothing can depend on it, and leaving it in place means the next person to uncomment it silently overwrites 14 live team hues.",touches:"team-accent-colors.scss \xB7 components.scss:1063"},{gap:`${this.deadSteps} ramp steps and 5 dashboard tokens have zero consumers`,evidence:"The 950-2000 tail of green, red, orange and yellow, plus --dashboard-bar-male / -female / -other and --dashboard-chart-mobile / -desktop.",impact:"They read as available palette but nothing has ever validated them.",severity:"dead",fix:"Leave the ramp tails \u2014 a ramp with holes is worse than a ramp with unused ends, and they cost nothing. Delete the 5 dashboard tokens: they are not a ramp, two of them are matplotlib defaults, and the gendered bar colors would need a design decision before anything used them anyway.",touches:"variables.scss #region Dashboard Charting"},{gap:"This page used to document 18 tokens that no longer exist",evidence:"--color1 \u2026 --color11 and --grey1 \u2026 --grey7 were replaced by the ramps. The only remaining references in the whole app were the swatch labels on this page.",impact:"Fixed by this rewrite \u2014 recorded here because it is why the page went stale invisibly.",severity:"dead",demo:"retired-tokens",fix:"Already done. The lasting fix is structural: this page now reads its counts from a dated snapshot, so a stale figure is visible as a stale date rather than as a swatch that still looks fine.",touches:"this page"}],this.defectCount=this.gaps.filter(s=>s.severity==="defect").length,this.teamFallbackSamples=[{teamID:2228,emitted:"team-color-8",resolves:!0},{teamID:662,emitted:"team-color-2",resolves:!0},{teamID:105,emitted:"team-color-05",resolves:!1},{teamID:1400,emitted:"team-color-00",resolves:!1}],this.yellowOrderDemo=[{token:"25",hex:"#fff3c9"},{token:"50",hex:"#ffe1b8"},{token:"100",hex:"#ffe98f"},{token:"200",hex:"#ffe066"},{token:"300",hex:"#ffd338"}],this.chartGreensDemo=[{hex:"#00CE9B",label:"--dashboard-color-success"},{hex:"#00D297",label:"pinned in analytics-dashboard"},{hex:"#3c894d",label:"--green-700 (.text-green)"}],this.threeGreysDemo=[{hex:"#dce4e9",label:"--grey-300"},{hex:"#dee2e6",label:"Bootstrap gray-300"},{hex:"#e5e7eb",label:"Tailwind gray-200"}]}ngOnInit(){this.siteDataService.hideSiteLoader()}severityLabel(d){return d==="defect"?"defect":d==="drift"?"drift":"dead code"}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-color"]],standalone:!1,decls:961,vars:27,consts:[[1,"text-small","text-grey"],[3,"routerLink"],[1,"card"],["side","shared"],[1,"overflow-x-auto"],[1,"table","table-bordered","table-hover","sg-doc-table"],[2,"width","14rem"],[2,"width","18rem"],[2,"width","12rem"],[2,"width","9rem"],["id","ramps",1,"card"],["id","aliases",1,"card"],[2,"width","3rem"],[2,"width","15rem"],[2,"width","10rem"],[2,"width","5rem"],["id","utilities",1,"card"],[2,"width","13rem"],[2,"width","8rem"],[1,"text-medium-large","mt-4"],[1,"row"],["
833id","events",1,"card"],[2,"width","16rem"],[2,"width","6rem"],[2,"width","11rem"],[1,"text-small","text-grey","mb-1"],["id","program-types",1,"card"],["side","admin"],[2,"width","4rem"],[2,"width","7rem"],[1,"text-small","text-grey","mb-0"],["id","teams",1,"card"],[1,"table","table-bordered","sg-doc-table"],[1,"text-small","text-grey-lt"],["id","charts",1,"card"],[2,"width","17rem"],[2,"width","22rem"],["id","avatars",1,"card"],[1,"col-4","col-md-2","mb-3","text-center"],["firstName","Ada","lastName","Byron","size","default",3,"id"],[1,"text-smallest","line-height-3","mt-1"],[1,"text-grey-lt"],[1,"text-small"],[1,"text-smallest","text-grey-lt","d-block"],[1,"sg-swatch","sg-swatch--dot"],[1,"text-smallest"],["id","chrome",1,"card"],[1,"bg-grey-lt","border-all","border-radius","p-3","text-medium","overflow-x-auto"],[2,"width","24rem"],["id","theme",1,"card"],["side","member"],[1,"text-red"],[2,"width","20rem"],["id","foreign",1,"card"],["id","gaps",1,"card"],[2,"width","26rem"],[2,"width","30rem"],[3,"routerLink","fragment"],["variant","tag","status","primary","text","club theme"],["variant","tag","status","secondary","text","per team"],[1,"sg-swatch"],["title","duplicate, stale name, or misleading name",1,"text-red"],[1,"text-red","text-small","d-block"],[1,"col-6","col-md-3","mb-3"],[2,"height","3.5rem"],[1,"text-center","text-small"],[1,"p-1"],[1,"sg-swatch","sg-swatch--block"],["variant","tag","status","error","text","defect"],["variant","tag","status","warning","text","drift"],["variant","tag","status","disabled","text","dead code"],[1,"mt-2","p-2","bg-grey-lt","border-all","border-radius"],[1,"d-flex","align-items-center","mb-1"],[1,"sg-swatch","mr-2"],[1,"d-flex","align-items-center"],[1,"d-flex","flex-wrap"],[1,"text-smallest","text-grey-lt","mb-0","mt-1"],[1,"mr-4","text-center"],[1,"text-medium",2,"color","var(--grey900)"],[1,"text-medium",2,"color","var(--grey-900)"],[1,"text-warning"],[1,"d-flex"],[1,"mr-2","text-center"],[1,"text-smallest","line-height-3"],[1,"sg-swatch","mr-2",2,"background-color","#64BDFF"],[1,"d-flex","align-items-center","team-color-9"],[1,"mr-3","text-center"]],template:function(s,o){s&1&&(n(0,"h2"),e(1,"Color"),t(),e(2,`
834`),n(3,"p",0),e(4,`
835    Every system in the app that decides what color something is \u2014 where it lives, who is
836    allowed to change it, and where two of them disagree. Swatches alone can't show that, so this
837    page leads with the map and carries usage counts through every table.
838`),t(),e(5,`
839`),n(6,"p",0),e(7,`
840    Counts are a grep snapshot of `),n(8,"code"),e(9,"ClientApp/src"),t(),e(10," taken "),n(11,"strong"),e(12),t(),e(13,`,
841    with the styleguide itself and the token declarations excluded so a token's count is its real
842    consumers. Contrast is against white. Companion deep-dives:
843    `),n(14,"a",1),e(15,"blues & links"),t(),e(16,` owns the blue
844    ramp and every link treatment;
845    `),n(17,"a",1),e(18,"system alerts & colored text"),t(),e(19,`
846    owns alert intents and the undefined text modifiers.
847`),t(),e(20,`
848
849`),n(21,"div",2),e(22,`
850    `),n(23,"h3"),e(24,"1. Eleven color systems"),t(),e(25,`
851    `),n(26,"app-sg-caption",3),e(27,"the map \u2014 every row below is a section on this page"),t(),e(28,`
852    `),n(29,"p",0),e(30,`
853        Six of these know nothing about the other five. A color set in one cannot be reached from
854        another, which is why the same green arrives three times at three values.
855    `),t(),e(31,`
856    `),n(32,"div",4),e(33,`
857        `),n(34,"table",5),e(35,`
858            `),n(36,"thead"),e(37,`
859                `),n(38,"tr"),e(39,`
860                    `),n(40,"th",6),e(41,"System"),t(),e(42,`
861                    `),n(43,"th",7),e(44,"Defined in"),t(),e(45,`
862                    `),n(46,"th",8),e(47,"Size"),t(),e(48,`
863                    `),n(49,"th",9),e(50,"Owner"),t(),e(51,`
864                    `),n(52,"th",9),e(53,"Overridable"),t(),e(54,`
865                `),t(),e(55,`
866            `),t(),e(56,`
867            `),n(57,"tbody"),e(58,`
868                `),S(59,G0,25,8,null,null,A0),t(),e(61,`
869        `),t(),e(62,`
870    `),t(),e(63,`
871`),t(),e(64,`
872
873`),n(65,"div",10),e(66,`
874    `),n(67,"h3"),e(68,"2. The core ramps"),t(),e(69,`
875    `),n(70,"app-sg-caption",3),e(71,"1_base/variables.scss"),t(),e(72,`
876    `),n(73,"p",0),e(74,`
877        Five ramps here; the blue ramp lives on
878        `),n(75,"a",1),e(76,"blues & links"),t(),e(77,`. Usage is
879        top-heavy in grey and bottom-empty everywhere else \u2014 `),n(78,"strong"),e(79),t(),e(80,`, all of them in the 950\u20132000 tail.
880    `),t(),e(81,`
881    `),S(82,Z0,35,1,null,null,O0),t(),e(84,`
882
883`),n(85,"div",11),e(86,`
884    `),n(87,"h3"),e(88),t(),e(89,`
885    `),n(90,"app-sg-caption",3),e(91,"1_base/variables.scss \u2014 Utility, Backgroun
885ds, Borders, Orphan Colors"),t(),e(92,`
886    `),n(93,"p",0),e(94,`
887        The layer components are supposed to reach for. Flagged rows are duplicates of another
888        token, names that no longer describe their value, or names that mean the opposite of what
889        they say.
890    `),t(),e(95,`
891    `),n(96,"div",4),e(97,`
892        `),n(98,"table",5),e(99,`
893            `),n(100,"thead"),e(101,`
894                `),n(102,"tr"),e(103,`
895                    `),c(104,"th",12),e(105,`
896                    `),n(106,"th",13),e(107,"Token"),t(),e(108,`
897                    `),n(109,"th",14),e(110,"Resolves to"),t(),e(111,`
898                    `),n(112,"th",15),e(113,"Uses"),t(),e(114,`
899                    `),n(115,"th"),e(116,"Note"),t(),e(117,`
900                `),t(),e(118,`
901            `),t(),e(119,`
902            `),n(120,"tbody"),e(121,`
903                `),S(122,is,26,7,null,null,Re),t(),e(124,`
904        `),t(),e(125,`
905    `),t(),e(126,`
906`),t(),e(127,`
907
908`),n(128,"div",16),e(129,`
909    `),n(130,"h3"),e(131,"4. Color in text & backgrounds"),t(),e(132,`
910    `),n(133,"app-sg-caption",3),e(134,"1_base/modifiers.scss \u2014 #region Text Colors"),t(),e(135,`
911    `),n(136,"p",0),e(137,`
912        Samples carry the live class. Four of the fourteen fall below 4.5:1 on white, which is the
913        floor for body-size text. The full undefined-modifier census (the ones that render as
914        nothing) is on
915        `),n(138,"a",1),e(139,"system alerts & colored text"),t(),e(140,`.
916    `),t(),e(141,`
917    `),n(142,"div",4),e(143,`
918        `),n(144,"table",5),e(145,`
919            `),n(146,"thead"),e(147,`
920                `),n(148,"tr"),e(149,`
921                    `),n(150,"th",8),e(151,"Class"),t(),e(152,`
922                    `),n(153,"th",6),e(154,"Sample"),t(),e(155,`
923                    `),n(156,"th",17),e(157,"Token"),t(),e(158,`
924                    `),n(159,"th",18),e(160,"On white"),t(),e(161,`
925                    `),n(162,"th"),e(163,"Role"),t(),e(164,`
926                `),t(),e(165,`
927            `),t(),e(166,`
928            `),n(167,"tbody"),e(168,`
929                `),S(169,rs,25,9,null,null,Xo),t(),e(171,`
930        `),t(),e(172,`
931    `),t(),e(173,`
932
933    `),n(174,"h4",19),e(175,"Backgrounds"),t(),e(176,`
934    `),n(177,"p",0),e(178,`
935        Each tile carries the live class, so anything blank below is a class that no longer resolves.
936    `),t(),e(179,`
937    `),n(180,"div",20),e(181,`
938        `),S(182,os,16,4,null,null,Xo),t(),e(184,`
939`),t(),e(185,`
940
941`),n(186,"div",21),e(187,`
942    `),n(188,"h3"),e(189,"5. Event colors"),t(),e(190,`
943    `),n(191,"app-sg-caption",3),e(192,"1_base/variables.scss \u2014 #region Event Colors"),t(),e(193,`
944    `),n(194,"p",0),e(195,`
945        Four tokens, applied by event type. They are fixed \u2014 a club theme cannot change them,
946        and they are unrelated to both the core ramps and the team palette.
947    `),t(),e(196,`
948    `),n(197,"div",4),e(198,`
949        `),n(199,"table",5),e(200,`
950            `),n(201,"thead"),e(202,`
951                `),n(203,"tr"),e(204,`
952                    `),c(205,"th",12),e(206,`
953                    `),n(207,"th",22),e(208,"Token"),t(),e(209,`
954                    `),n(210,"th",23),e(211,"Hex"),t(),e(212,`
955                    `),n(213,"th",24),e(214,"Event type"),t(),e(215,`
956                    `),n(216,"th",15),e(217,"Uses"),t(),e(218,`
957                    `),n(219,"th"),e(220,"On white"),t(),e(221,`
958                `),t(),e(222,`
959            `),t(),e(223,`
960            `),n(224,"tbody"),e(225,`
961                `),S(226,ls,24,7,null,null,Re),t(),e(228,`
962        `),t(),e(229,`
963    `),t(),e(230,`
964    `),n(231,"p",25),e(232,"Applied in five places, each re-deriving the type \u2192 color mapping in its own selectors:"),t(),e(233,`
965    `),n(234,"ul",0),e(235,`
966        `),S(236,ss,5,1,null,null,K),t(),e(238,`
967`),t(),e(239,`
968
969`),n(240,"div",26),e(241,`
970    `),n(242,"h3"),e(243,"6. Program type colors"),t(),e(244,`
971    `),n(245,"app-sg-caption",27),e(246,"program-navigation.component.ts \u2014 PROGRAM_TYPE_CARD_COLORS"),t(),e(247,`
972    `),n(248,"p",0),e(249,`
973        Nine hardcoded hex literals in one component, backing the flat art background on each
974        program-type card. `),n(250,"strong"),e(251,"Every one of them is a step on the team palette"),t(),e(252,`, retyped
975        as a literal \u2014 so the two systems already agree, but only by hand.
976    `),t(),e(253,`
977    `),n(254,"div",4),e(255,`
978        `),n(256,"table",5),e(257,`
979            `),n(258,"thead"),e(259,`
980                `),n(260,"tr"),e(261,`
981                    `),c(262,"th",12),e(263,`
982                    `),n(264,"th",17),e(265,"Program type"),t(),e(266,`
983                    `),n(267,"th",28),e(268,"ID"),t(),e(269,`
984                    `),n(270,"th",29),e(271,"Hex"),t(),e(272,`
985                    `),n(273,"th"),e(274,"Identical to"),t(),e(275,`
986                `),t(),e(276,`
987            `),t(),e(277,`
988            `),n(278,"tbody"),e(279,`
989                `),S(280,ds,21,6,null,null,N0),t(),e(282,`
990        `),t(),e(283,`
991    `),t(),e(284,`
992    `),n(285,"p",30),e(286,`
993        The mapping is asserted literal-by-literal in
994        `),n(287,"code"),e(288,"program-navigation.component.spec.ts"),t(),e(289,`, so re-tuning the team palette will leave
995        these behind and the test will pass.
996    `),t(),e(290,`
997`),t(),e(291,`
998
999`),n(292,"div",31),e(293,`
1000    `),n(294,"h3"),e(295,"7. Team colors"),t(),e(296,`
1001    `),n(297,"app-sg-caption",3),e(298,"1_base/team-colors/team-colors.scss"),t(),e(299,`
1002    `),n(300,"p",0),e(301,`
1003        The only per-record color in the app: a team is assigned one of 14 hues, and the class
1004        `),n(302,"code"),e(303,".team-color-N"),t(),e(304," re-points an 11-step ramp of "),n(305,"code"),e(306,"--team-color-50 \u2026 950"),t(),e(307,`
1005        for everything inside it. Components read the ramp, never a hue. The grid below is live
1006        \u2014 every cell is the real class wrapping the real token.
1007    `),t(),e(308,`
1008    `),n(309,"div",4),e(310,`
1009        `),n(311,"table",32),e(312,`
1010            `),n(313,"thead"),e(314,`
1011                `),n(315,"tr"),e(316,`
1012                    `),n(317,"th",18),e(318,"Hue"),t(),e(319,`
1013                    `),S(320,ms,4,1,null,null,K),t(),e(322,`
1014            `),t(),e(323,`
1015            `),n(324,"tbody"),e(325,`
1016                `),n(326,"tr"),e(327,`
1017                    `),n(328,"td",33),e(329,"default (no class)"),t(),e(330,`
1018                    `),S(331,cs,6,2,null,null,K),t(),e(333,`
1019                `),S(334,xs,12,4,null,null,B0),n(336,"tr"),e(337,`
1020                    `),n(338,"td",33),e(339,"consumers"),t(),e(340,`
1021                    `),S(341,hs,4,1,null,null,K),t(),e(343,`
1022            `),t(),e(344,`
1023        `),t(),e(345,`
1024    `),t(),e(346,`
1025    `),n(347,"p",0),e(348,`
1026        `),n(349,"code"),e(350,".tc-50 \u2026 .tc-950"),t(),e(351," in "),n(352,"code"),e(353,"modifiers.scss"),t(),e(354,` are the companion utilities that
1027        pull one step out as `),n(355,"code"),e(356,"color"),t(),e(357," / "),n(358,"code"),e(359,"background-color"),t(),e(360,`, which is how
1028        `),n(361,"code"),e(362,"TeamColorsService"),t(),e(363," emits "),n(364,"code"),e(365,"team-color-9 tc-500"),t(),e(366,`.
1029    `),t(),e(367,`
1030    `),n(368,"p",30),e(369,`
1031        Two things to know about this system. `),n(370,"strong"),e(371,"The fallback drops 1 team in 10 to grey"),t(),e(372,`
1032        \u2014 when a team has no stored color, the service takes the last two digits of the teamID,
1033        so a teamID ending `),n(373,"code"),e(374,"00"),t(),e(375,"\u2013"),n(376,"code"),e(377,"09"),t(),e(378," produces "),n(379,"code"),e(380,"team-color-05"),t(),e(381,`,
1034        which does not exist. And `),n(382,"strong"),e(383,`a second, larger team palette is checked in but switched
1035        off`),t(),e(384,": "),n(385,"code"),e(386,"3_modules/components/team-accent-colors.scss"),t(),e(387,` generates 60 flat
1036        colors as `),n(388,"code"),e(389,".team-color-0 \u2026 .team-color-59"),t(),e(390,`, whose first 14 classes would collide
1037        head-on with the ramp classes above. Its `),n(391,"code"),e(392,"@import"),t(),e(393,` is commented out at
1038        `),n(394,"code"),e(395,"components.scss:1063"),t(),e(396,`.
1039    `),t(),e(397,`
1040`),t(),e(398,`
1041
1042`),n(399,"div",34),e(400,`
1043    `),n(401,"h3"),e(402,"8. Dashboard & chart colors"),t(),e(403,`
1044    `),n(404,"app-sg-caption",27),e(405,"1_base/variables.scss \u2014 #region Chart Dashboard Colors"),t(),e(406,`
1045    `),n(407,"p",0),e(408,`
1046        Fourteen tokens, of which five have no consumer. The four that matter carry the analytics
1047        chart series \u2014 and none of them is a step on any ramp except by accident.
1048    `),t(),e(409,`
1049    `),n(410,"div",4),e(411,`
1050        `),n(412,"table",5),e(413,`
1051            `),n(414,"thead"),e(415,`
1052                `),n(416,"tr"),e(417,`
1053                    `),c(418,"th",12),e(419,`
1054                    `),n(420,"th",35),e(421,"Token"),t(),e(422,`
1055                    `),n(423,"th",29),e(424,"Hex"),t(),e(425,`
1056                    `),n(426,"th",15),e(427,"Uses"),t(),e(428,`
1057                    `),n(429,"th",29),e(430,"On white"),t(),e(431,`
1058                    `),n(432,"th"),e(433,"Role"),t(),e(434,`
1059                `),t(),e(435,`
1060            `),t(),e(436,`
1061            `),n(437,"tbody"),e(438,`
1062                `),S(439,Ss,28,7,null,null,Re),t(),e(441,`
1063        `),t(),e(442,`
1064    `),t(),e(443,`
1065
1066    `),n(444,"h4",19),e(445,"Four conventions for the same job"),t(),e(446,`
1067    `),n(447,"p",0),e(448,`
1068        Chart color has to cross from CSS into JavaScript. The codebase does that four ways, three of
1069        which stop tracking the palette the moment it changes.
1070    `),t(),e(449,`
1071    `),n(450,"div",4),e(451,`
1072        `),n(452,"table",32),e(453,`
1073            `),n(454,"thead"),e(455,`
1074                `),n(456,"tr"),e(457,`
1075                    `),n(458,"th",22),e(459,"Convention"),t(),e(460,`
1076                    `),n(461,"th",36),e(462,"Example"),t(),e(463,`
1077                    `),n(464,"th",22),e(465,"Seen in"),t(),e(466,`
1078                    `),n(467,"th"),e(468,"What it costs"),t(),e(469,`
1079                `),t(),e(470,`
1080            `),t(),e(471,`
1081            `),n(472,"tbody"),e(473,`
1082                `),S(474,Es,17,4,null,null,W0),t(),e(476,`
1083        `),t(),e(477,`
1084    `),t(),e(478,`
1085`),t(),e(479,`
1086
1087`),n(480,"div",37),e(481,`
1088    `),n(482,"h3"),e(483,"9. Avatar backgrounds"),t(),e(484,`
1089    `),n(485,"app-sg-caption",3),e(486,"1_base/variables.scss \u2014 #region User Avatar Backgroun
1089ds"),t(),e(487,`
1090    `),n(488,"p",0),e(489,`
1091        Ten single fills behind a user's initials, picked by the last digit of the user ID, plus a
1092        light neutral eleventh for a user with no ID. Unlike the team palette these are single values
1093        rather than ramps, and nine of the eleven share one foreground,
1094        `),n(490,"code"),e(491,"--user-avatar-text"),t(),e(492,`. Gold and the no-id neutral are too light to carry it and
1095        take `),n(493,"code"),e(494,"--user-avatar-text-on-light"),t(),e(495,` instead. All eleven values match the mobile
1096        client \u2014 the same person is the same colour in both products.
1097    `),t(),e(496,`
1098    `),n(497,"p",0),e(498,`
1099        This section owns the tokens.
1100        `),n(499,"a",1),e(500,"avatars"),t(),e(501,` owns the component
1101        \u2014 the size scale, and the register of bugs fixed and still open, each demonstrated
1102        against a live instance.
1103    `),t(),e(502,`
1104    `),n(503,"div",20),e(504,`
1105        `),S(505,vs,17,3,null,null,Re),n(507,"div",38),e(508,`
1106            `),c(509,"app-user-initials",39),e(510,`
1107            `),n(511,"div",40),e(512,`
1108                `),n(513,"code"),e(514,"--user-avatar-none"),t(),c(515,"br"),e(516,`
1109                `),n(517,"span",41),e(518),t(),e(519,`
1110            `),t(),e(520,`
1111        `),t(),e(521,`
1112    `),t(),e(522,`
1113
1114    `),n(523,"h4",19),e(524,"Why the foreground is shared"),t(),e(525,`
1115    `),n(526,"p",0),e(527,`
1116        `),n(528,"strong"),e(529,"The initials are decorative"),t(),e(530," \u2014 "),n(531,"code"),e(532,"aria-hidden"),t(),e(533,` at every call
1117        site, with the person's name in real text beside the avatar \u2014 so SC 1.4.3 does not
1118        apply to them and a shared `),n(534,"code"),e(535,"--user-avatar-text"),t(),e(536,` is a look decision. The ratios
1119        below are reported for that conversation, not as a grade.
1120    `),t(),e(537,`
1121    `),n(538,"p",0),e(539,`
1122        There is no single text colour that would clear AA on all of them anyway \u2014 the fills
1123        span too much of the lightness range, so anything light enough for
1124        `),n(540,"code"),e(541,"--user-avatar-7"),t(),e(542," is unreadable on "),n(543,"code"),e(544,"--user-avatar-1"),t(),e(545,` and the reverse.
1125        The figures that mattered are gold and the no-id neutral: fills so close to the shared white
1126        that the initials were not low-contrast but `),n(546,"em"),e(547,"absent"),t(),e(548,`. That is a bug at any exemption,
1127        and it is why those two \u2014 and only those two \u2014 take a dark foreground.
1128    `),t(),e(549,`
1129    `),n(550,"div",4),e(551,`
1130        `),n(552,"table",5),e(553,`
1131            `),n(554,"thead"),e(555,`
1132                `),n(556,"tr"),e(557,`
1133                    `),n(558,"th",8),e(559,"Fill token"),t(),e(560,`
1134                    `),n(561,"th",29),e(562,"Fill"),t(),e(563,`
1135                    `),n(564,"th",18),e(565,"Foreground"),t(),e(566,`
1136                    `),n(567,"th",18),e(568,"Ratio"),t(),e(569,`
1137                `),t(),e(570,`
1138            `),t(),e(571,`
1139            `),n(572,"tbody"),e(573,`
1140                `),S(574,ys,25,6,null,null,Re),n(576,"tr"),e(577,`
1141                    `),n(578,"td"),e(579,`
1142                        `),n(580,"code",42),e(581),t(),e(582,`
1143                        `),n(583,"span",43),e(584,"the no-id fill"),t(),e(585,`
1144                    `),t(),e(586,`
1145                    `),n(587,"td"),e(588,`
1146                        `),c(589,"span",44),e(590,`
1147                        `),n(591,"span",43),e(592),t(),e(593,`
1148                    `),t(),e(594,`
1149                    `),n(595,"td"),e(596,`
1150                        `),n(597,"code",45),e(598,"--user-avatar-text-on-light"),t(),e(599,`
1151                    `),t(),e(600,`
1152                    `),n(601,"td"),e(602),n(603,"span",43),e(604),t(),e(605,`
1153                    `),t(),e(606,`
1154                `),t(),e(607,`
1155            `),t(),e(608,`
1156        `),t(),e(609,`
1157    `),t(),e(610,`
1158    `),n(611,"p",0),e(612,`
1159        `),n(613,"code"),e(614,"--user-avatar-4"),t(),e(615," is "),n(616,"code"),e(617,"#595c60"),t(),e(618,`, the same value as
1160        `),n(619,"code"),e(620,"--grey-800"),t(),e(621,`. It is the one fill that restates a core-ramp step rather than
1161        carrying a hue of its own.
1162    `),t(),e(622,`
1163
1164    `),n(623,"h4",19),e(624,"The foregrounds this replaced"),t(),e(625,`
1165    `),n(626,"p",0),e(627,`
1166        Three separate rules used to decide the text colour on these ten fills, and the token set had
1167        no foreground token to point them at \u2014 which is how a foreground change could land on
1168        one surface and miss the other two. Two of the three are deleted, and the survivor reads
1169        `),n(628,"code"),e(629,"--user-avatar-text"),t(),e(630,", or "),n(631,"code"),e(632,"--user-avatar-text-on-light"),t(),e(633,` on the two
1170        light fills.
1171    `),t(),e(634,`
1172    `),n(635,"div",4),e(636,`
1173        `),n(637,"table",5),e(638,`
1174            `),n(639,"thead"),e(640,`
1175                `),n(641,"tr"),e(642,`
1176                    `),n(643,"th",7),e(644,"Selector"),t(),e(645,`
1177                    `),n(646,"th",6),e(647,"Foreground"),t(),e(648,`
1178                    `),n(649,"th",8),e(650,"Text size"),t(),e(651,`
1179                    `),n(652,"th"),e(653,"Reach"),t(),e(654,`
1180                `),t(),e(655,`
1181            `),t(),e(656,`
1182            `),n(657,"tbody"),e(658,`
1183                `),S(659,_s,25,5,null,null,R0),t(),e(661,`
1184        `),t(),e(662,`
1185    `),t(),e(663,`
1186`),t(),e(664,`
1187
1188`),n(665,"div",46),e(666,`
1189    `),n(667,"h3"),e(668,"10. Buttons & input chrome"),t(),e(669,`
1190    `),n(670,"app-sg-caption",3),e(671,"1_base/variables.scss \u2014 #region Button Variables \xB7 sass/ng-theme.scss"),t(),e(672,`
1191    `),n(673,"p",0),e(674,`
1192        Button color is the only part of the design system with a declared two-layer contract. The
1193        source states it plainly at `),n(675,"code"),e(676,"variables.scss:376"),t(),e(677,`:
1194    `),t(),e(678,`
1195    `),n(679,"pre",47),e(680,`// --theme-* are the raw/palette layer. The theme API sets these on <html> at runtime.
1196// Components should not consume these directly.
1197...
1198// --cms-* are the semantic layer. Components consume these.`),t(),e(681,`
1199    `),n(682,"p",0),e(683,`
1200        The counts run the other way. Each `),n(684,"code"),e(685,"--cms-button-*"),t(),e(686,` token has one consumer \u2014
1201        the button partial \u2014 while eight component rules reach `),n(687,"code"),e(688,"--theme-button-*"),t(),e(689,`
1202        directly, seven of them without naming the semantic token at all.
1203    `),t(),e(690,`
1204    `),n(691,"div",4),e(692,`
1205        `),n(693,"table",5),e(694,`
1206            `),n(695,"thead"),e(696,`
1207                `),n(697,"tr"),e(698,`
1208                    `),n(699,"th",36),e(700,"Raw token ("),n(701,"code"),e(702,"--theme-*"),t(),e(703,")"),t(),e(704,`
1209                    `),n(705,"th",36),e(706,"Semantic token ("),n(707,"code"),e(708,"--cms-*"),t(),e(709,")"),t(),e(710,`
1210                    `),n(711,"th",14),e(712,"Set by club theme"),t(),e(713,`
1211                    `),n(714,"th"),e(715,"Rules skipping the semantic layer"),t(),e(716,`
1212                `),t(),e(717,`
1213            `),t(),e(718,`
1214            `),n(719,"tbody"),e(720,`
1215                `),S(721,Ds,22,4,null,null,L0),t(),e(723,`
1216        `),t(),e(724,`
1217    `),t(),e(725,`
1218
1219    `),n(726,"h4",19),e(727,"The PrimeNG bridge"),t(),e(728,`
1220    `),n(729,"p",0),e(730,`
1221        Input chrome is PrimeNG's, re-pointed at our tokens. `),n(731,"code"),e(732,"ng-theme.scss"),t(),e(733,` carries 202
1222        `),n(734,"code"),e(735,"--p-*"),t(),e(736,` declarations; these are the ones that decide color. Everything downstream
1223        of `),n(737,"code"),e(738,"--p-primary-*"),t(),e(739,` is covered on
1224        `),n(740,"a",1),e(741,"blues & links"),t(),e(742,`.
1225    `),t(),e(743,`
1226    `),n(744,"div",4),e(745,`
1227        `),n(746,"table",5),e(747,`
1228            `),n(748,"thead"),e(749,`
1229                `),n(750,"tr"),e(751,`
1230                    `),n(752,"th",48),e(753,"PrimeNG token"),t(),e(754,`
1231                    `),n(755,"th",6),e(756,"Points at"),t(),e(757,`
1232                    `),n(758,"th"),e(759,"Drives"),t(),e(760,`
1233                `),t(),e(761,`
1234            `),t(),e(762,`
1235            `),n(763,"tbody"),e(764,`
1236                `),S(765,Fs,15,3,null,null,Re),t(),e(767,`
1237        `),t(),e(768,`
1238    `),t(),e(769,`
1239    `),n(770,"p",30),e(771,`
1240        Live samples of the resulting chrome are on
1241        `),n(772,"a",1),e(773,"forms"),t(),e(774,` and
1242        `),n(775,"a",1),e(776,"buttons"),t(),e(777,`.
1243    `),t(),e(778,`
1244`),t(),e(779,`
1245
1246`),n(780,"div",49),e(781,`
1247    `),n(782,"h3"),e(783,"11. What a club can actually change"),t(),e(784,`
1248    `),n(785,"app-sg-caption",50),e(786,"admin/content/theme \u2192 header.component.ts setThemePrimatives / setThemeSettings"),t(),e(787,`
1249    `),n(788,"p",0),e(789,`
1250        Thirteen color fields on the club theme form. Each is written to a CSS variable on
1251        `),n(790,"code"),e(791,"<html>"),t(),e(792,` at runtime, and only then does it reach CSS \u2014 so a field whose
1252        variable has no consumer is a control that does nothing.
1253        `),n(793,"strong",51),e(794),t(),e(795,`
1254    `),t(),e(796,`
1255    `),n(797,"div",4),e(798,`
1256        `),n(799,"table",5),e(800,`
1257            `),n(801,"thead"),e(802,`
1258                `),n(803,"tr"),e(804,`
1259                    `),n(805,"th",22),e(806,"Admin field"),t(),e(807,`
1260                    `),n(808,"th",52),e(809,"CSS variable"),t(),e(810,`
1261                    `),n(811,"th",29),e(812,"Consumers"),t(),e(813,`
1262                    `),n(814,"th"),e(815,"What it reaches"),t(),e(816,`
1263                `),t(),e(817,`
1264            `),t(),e(818,`
1265            `),n(819,"tbody"),e(820,`
1266                `),S(821,Os,19,6,null,null,q0),t(),e(823,`
1267        `),t(),e(824,`
1268    `),t(),e(825,`
1269    `),n(826,"p",30),e(827,`
1270        Note the shape of all three failures: the runtime writes one name and the stylesheet reads
1271        another, or reads nothing. Nothing errors \u2014 an unread custom property is simply never
1272        asked for, so the control looks wired and behaves as if it isn't.
1273    `),t(),e(828,`
1274`),t(),e(829,`
1275
1276`),n(830,"div",53),e(831,`
1277    `),n(832,"h3"),e(833,"12. Color that belongs to no system"),t(),e(834,`
1278    `),n(835,"app-sg-caption",3),e(836,"component SCSS, app/**"),t(),e(837,`
1279    `),n(838,"p",0),e(839,`
1280        `),n(840,"strong"),e(841),t(),e(842,` in component stylesheets. They are not random: they are two other
1281        design systems, pasted in. The app ships three greys for every job.
1282    `),t(),e(843,`
1283    `),n(844,"div",4),e(845,`
1284        `),n(846,"table",5),e(847,`
1285            `),n(848,"thead"),e(849,`
1286                `),n(850,"tr"),e(851,`
1287                    `),c(852,"th",12),e(853,`
1288                    `),n(854,"th",29),e(855,"Hex"),t(),e(856,`
1289                    `),n(857,"th",13),e(858,"Where it came from"),t(),e(859,`
1290                    `),n(860,"th",23),e(861,"Decls"),t(),e(862,`
1291                    `),n(863,"th",23),e(864,"Files"),t(),e(865,`
1292                    `),n(866,"th"),e(867,"Nearest token"),t(),e(868,`
1293                `),t(),e(869,`
1294            `),t(),e(870,`
1295            `),n(871,"tbody"),e(872,`
1296                `),S(873,Ns,24,7,null,null,V0),t(),e(875,`
1297        `),t(),e(876,`
1298    `),t(),e(877,`
1299    `),n(878,"p",30),e(879,`
1300        None of these move when a club themes the site, and none of them move when the ramps are
1301        re-tuned.
1302    `),t(),e(880,`
1303`),t(),e(881,`
1304
1305`),n(882,"div",54),e(883,`
1306    `),n(884,"h3"),e(885,"13. Gaps & discrepancies"),t(),e(886,`
1307    `),n(887,"app-sg-caption",3),e(888,"everything above, collected"),t(),e(889,`
1308    `),n(890,"p",0),e(891),n(892,"strong",51),e(893),t(),e(894,`. Recorded here, not fixed \u2014 this page is the inventory.
1309        Where a gap can be shown rather than described, the evidence cell carries a live demo built
1310        from the real tokens and classes, so what you are looking at is the bug itself.
1311        Recommended fixes are the second table.
1312    `),t(),e(895,`
1313    `),n(896,"div",4),e(897,`
1314        `),n(898,"table",32),e(899,`
1315            `),n(900,"thead"),e(901,`
1316                `),n(902,"tr"),e(903,`
1317                    `),n(904,"th",29),e(905,"Kind"),t(),e(906,`
1318                    `),n(907,"th",52),e(908,"Finding"),t(),e(909,`
1319                    `),n(910,"th",55),e(911,"Evidence"),t(),e(912,`
1320                    `),n(913,"th"),e(914,"Consequence"),t(),e(915,`
1321                `),t(),e(916,`
1322            `),t(),e(917,`
1323            `),n(918,"tbody"),e(919,`
1324                `),S(920,td,22,5,null,null,Yo),t(),e(922,`
1325        `),t(),e(923,`
1326    `),t(),e(924,`
1327
1328    `),n(925,"h4",19),e(926,"Recommended fixes"),t(),e(927,`
1329    `),n(928,"p",0),e(929,`
1330        Same rows, same order. These are recommendations from the census, not scheduled work \u2014
1331        each one is a decision for @bob, and several are large enough to want their own doc.
1332    `),t(),e(930,`
1333    `),n(931,"div",4),e(932,`
1334        `),n(933,"table",32),e(934,`
1335            `),n(935,"thead"),e(936,`
1336                `),n(937,"tr"),e(938,`
1337                    `),n(939,"th",29),e(940,"Kind"),t(),e(941,`
1338                    `),n(942,"th",52),e(943,"Finding"),t(),e(944,`
1339                    `),n(945,"th",56),e(946,"Recommended fix"),t(),e(947,`
1340                    `),n(948,"th"),e(949,"Touches"),t(),e(950,`
1341                `),t(),e(951,`
1342            `),t(),e(952,`
1343            `),n(953,"tbody"),e(954,`
1344                `),S(955,rd,22,4,null,null,Yo),t(),e(957,`
1345        `),t(),e(958,`
1346    `),t(),e(959,`
1347`),t(),e(960,`
1348`)),s&2&&(i(12),p(o.snapshotDate),i(2),m("routerLink","/admin/styleguide/global/blues-and-links"),i(3),m("routerLink","/admin/styleguide/components/system-alerts"),i(42),E(o.systems),i(16),m("routerLink","/admin/styleguide/global/blues-and-links"),i(4),f("",o.deadSteps,` steps have
1349        no consumer at all`),i(3),E(o.ramps),i(6),q("3. Semantic aliases \u2014 ",o.aliases.length," tokens, ",o.suspectAliases," of them suspect"),i(34),E(o.aliases),i(16),m("routerLink","/admin/styleguide/components/system-alerts"),i(31),E(o.textClasses),i(13),E(o.bgClasses),i(44),E(o.eventColors),i(10),E(o.eventConsumers),i(44),E(o.programTypes),i(40),E(o.teamSteps),i(11),E(o.teamSteps),i(3),E(o.teamRamps),i(7),E(o.teamSteps),i(98),E(o.dashboardColors),i(35),E(o.chartConventions),i(25),m("routerLink","/admin/styleguide/components/avatars"),i(6),E(o.avatarColors),i(4),m("id",0),i(9),p(o.avatarFallback.hex),i(56),E(o.avatarColors),i(7),p(o.avatarFallback.token),i(8),W("background-color",o.avatarFallback.hex),i(3),p(o.avatarFallback.hex),i(10),f(`
1350                        `,o.avatarFallback.ratio,`:1
1351                        `),i(2),Ve(`
1352                            was `,o.avatarFallback.wasShared,":1 as ",o.avatarFallback.wasToken,`
1353                            (`,o.avatarFallback.wasHex,`) \u2014 white on near-white
1354                        `),i(55),E(o.avatarForegrounds),i(62),E(o.buttonLayers),i(19),m("routerLink","/admin/styleguide/global/blues-and-links"),i(25),E(o.primeBridge),i(7),m("routerLink","/admin/styleguide/global/forms"),i(3),m("routerLink","/admin/styleguide/global/buttons"),i(19),f("",o.brokenThemeFields," of them are in that state."),i(27),E(o.themeFields),i(20),q("",o.foreignTotalDecls," hardcoded hex declarations across ",o.foreignDistinct,`
1355        distinct values`),i(32),E(o.foreign),i(18),f(`
1356        `,o.gaps.length," findings from the census, "),i(2),f("",o.defectCount,` of them
1357        defects a user can see`),i(27),E(o.gaps),i(35),E(o.gaps))},dependencies:[$,J,We,X],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var Zo=(a,r)=>r.verdict;function od(a,r){if(a&1&&(e(0,`
1358            `),n(1,"span",2),e(2,`
1359                `),c(3,"app-sg-verdict",3),e(4,`
1360            `),t(),e(5,`
1361        `)),a&2){let l=r.$implicit;i(3),m("verdict",l.verdict)}}function ld(a,r){if(a&1&&(e(0,`
1362    `),n(1,"div",0),e(2,`
1363        `),n(3,"span"),e(4,"Verdicts:"),t(),e(5,`
1364        `),S(6,od,6,1,null,null,Zo),n(8,"span"),e(9,`\u2014 hover for the definition, or see
1365            `),n(10,"a",1),e(11,"Overview"),t(),e(12,"."),t(),e(13,`
1366    `),t(),e(14,`
1367`)),a&2){let l=u();i(6),E(l.rows),i(4),m("routerLink","/admin/styleguide/global/forms/
1367overview")}}function sd(a,r){if(a&1&&(e(0,`
1368                    `),n(1,"tr"),e(2,`
1369                        `),n(3,"td"),c(4,"app-sg-verdict",3),t(),e(5,`
1370                        `),n(6,"td",7),e(7),t(),e(8,`
1371                    `),t(),e(9,`
1372                `)),a&2){let l=r.$implicit;i(4),m("verdict",l.verdict),i(3),p(l.means)}}function dd(a,r){if(a&1&&(e(0,`
1373    `),n(1,"div",4),e(2,`
1374        `),n(3,"table",5),e(4,`
1375            `),n(5,"thead"),e(6,`
1376                `),n(7,"tr"),e(8,`
1377                    `),n(9,"th",6),e(10,"Verdict"),t(),e(11,`
1378                    `),n(12,"th"),e(13,"What it means"),t(),e(14,`
1379                `),t(),e(15,`
1380            `),t(),e(16,`
1381            `),n(17,"tbody"),e(18,`
1382                `),S(19,sd,10,2,null,null,Zo),t(),e(21,`
1383        `),t(),e(22,`
1384    `),t(),e(23,`
1385`)),a&2){let l=u();i(19),E(l.rows)}}var gt={house:{status:"success",label:"house style",means:"The sanctioned answer. New code uses this one."},live:{status:"black",label:"live",means:"Declared, used, and working \u2014 just narrower in scope than house style. Not a problem."},drift:{status:"warning",label:"drift",means:"Works, but it is a second answer to a question house style already answers \u2014 or it is scoped so tightly that it silently does nothing outside one container."},deprecated:{status:"warning",label:"deprecated",means:"A superseded vocabulary \u2014 Bootstrap 4 leftovers \u2014 still present in the markup."},dead:{status:"secondary",label:"dead",means:"Declared in CSS and referenced by nothing. Weight, not breakage."},undefined:{status:"error",label:"undefined",means:"Referenced by markup and declared nowhere. The template reads as styled and renders bare \u2014 the worse of the two failures, because nothing at the call site suggests it."},defect:{status:"error",label:"defect",means:"Measurably wrong: a duplicated declaration, an unguarded dereference, a missing behavior."}},ve=(()=>{let r=class r{get status(){return gt[this.verdict]?.status}get label(){return gt[this.verdict]?.label}get means(){return gt[this.verdict]?.means}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-sg-verdict"]],inputs:{verdict:"verdict"},standalone:!1,decls:2,vars:4,consts:[["variant","tag","tooltipPosition","left",3,"status","text","tooltipText","nowrap"]],template:function(s,o){s&1&&(c(0,"app-pill",0),e(1,`
1386`)),s&2&&m("status",o.status)("text",o.label)("tooltipText",o.means)("nowrap",!0)},dependencies:[J],encapsulation:2});let a=r;return a})(),we=(()=>{let r=class r{constructor(){this.compact=!1,this.rows=Object.keys(gt).map(d=>({verdict:d,label:gt[d].label,means:gt[d].means}))}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-sg-verdict-legend"]],inputs:{compact:"compact"},standalone:!1,decls:2,vars:1,consts:[[1,"d-flex","flex-wrap","align-items-center","gap-3","text-smallest","text-grey","mb-3"],[3,"routerLink"],[1,"d-inline-flex","align-items-center"],[3,"verdict"],[1,"overflow-x-auto"],[1,"table","table-bordered","sg-doc-table"],[2,"width","9rem"],[1,"text-small","text-grey"]],template:function(s,o){s&1&&v(0,ld,15,1)(1,dd,24,0),s&2&&y(o.compact?0:1)},dependencies:[$,ve],encapsulation:2});let a=r;return a})();var tl=()=>[],nl=a=>({kind:a,mode:"shipped"}),il=a=>({kind:a,mode:"fixed"}),md=(a,r)=>r.who,el=(a,r)=>r.where,cd=(a,r)=>r.background,pd=(a,r)=>r.fn,xd=(a,r)=>r.input,hd=(a,r)=>r.thing,ud=(a,r)=>r.tier;function gd(a,r){if(a&1&&(e(0,`
1387            `),n(1,"div"),e(2,`
1388                `),n(3,"button",61),e(4,"Register Now"),t(),e(5,`
1389            `),t(),e(6,`
1390        `)),a&2){let l=u(),d=l.kind,s=l.mode,o=u();i(),te(Bi("--theme-color-cta-buttons: ",o.demoColors(d,s).bg,"; --theme-color-cta-buttons-contrast: ",o.demoColors(d,s).fg,"; --theme-color-cta-buttons--hover: ",o.demoColors(d,s).hover,";"))}}function fd(a,r){if(a&1&&(e(0,`
1391            `),n(1,"div"),e(2,`
1392                `),n(3,"button",62),e(4,"Save Changes"),t(),e(5,`
1393            `),t(),e(6,`
1394        `)),a&2){let l=u(),d=l.kind,s=l.mode,o=u();i(),te(Bi("--theme-button-background--primary: ",o.demoColors(d,s).bg,"; --theme-button-border--primary: ",o.demoColors(d,s).bg,"; --theme-button-text-color--primary: ",o.demoColors(d,s).fg,";"))}}function bd(a,r){if(a&1&&(e(0,`
1395            `),n(1,"div"),e(2,`
1396                `),n(3,"button",63),e(4,"Learn More"),t(),e(5,`
1397            `),t(),e(6,`
1398        `)),a&2){let l=u(),d=l.kind,s=l.mode,o=u();i(),te(ca("--theme-button-background: #ffffff; --theme-button-border: ",o.demoColors(d,s).fg,"; --theme-button-text-color: ",o.demoColors(d,s).fg,";"))}}function Sd(a,r){if(a&1&&(e(0,`
1399            `),n(1,"div",64),e(2,`
1400                `),n(3,"strong",65),e(4,"Riverside FC"),t(),e(5,`
1401                `),n(6,"span",66),e(7,"Teams"),t(),e(8,`
1402                `),n(9,"span",66),e(10,"Schedule"),t(),e(11,`
1403                `),n(12,"span",67),e(13,"Register"),t(),e(14,`
1404            `),t(),e(15,`
1405        `)),a&2){let l=u(),d=l.kind,s=l.mode,o=u();i(),W("background-color",o.demoColors(d,s).bg)("color",o.demoColors(d,s).fg)}}function Ed(a,r){if(a&1&&(e(0,`
1406            `),n(1,"div",68),e(2,`
1407                `),n(3,"div",69),e(4,"Spring Season"),t(),e(5,`
1408                `),n(6,"div",67),e(7,"Registration closes March 14"),t(),e(8,`
1409            `),t(),e(9,`
1410        `)),a&2){let l=u(),d=l.kind,s=l.mode,o=u();i(),W("background-color",o.demoColors(d,s).bg)("color",o.demoColors(d,s).fg)}}function vd(a,r){if(a&1&&(e(0,`
1411            `),n(1,"div",70),e(2,`
1412                `),n(3,"span",67),e(4,"Team Roster"),t(),e(5,`
1413            `),t(),e(6,`
1414        `)),a&2){let l=u(),d=l.kind,s=l.mode,o=u();i(),W("background-color",o.demoColors(d,s).bg)("color",o.demoColors(d,s).fg)}}function yd(a,r){if(a&1&&(e(0,`
1415            `),n(1,"div",71),e(2,`
1416                `),n(3,"span",72),e(4,"Sign Up"),t(),e(5,`
1417            `),t(),e(6,`
1418        `)),a&2){let l=u(),d=l.kind,s=l.mode,o=u();i(3),W("background-color",o.demoColors(d,s).bg)("border-color",o.demoColors(d,s).bg)("color",o.demoColors(d,s).fg)}}function wd(a,r){a&1&&(e(0,`
1419            `),n(1,"div",73),e(2,`
1420                nothing renders \u2014 no consumer reads this variable
1421            `),t(),e(3,`
1422        `))}function Cd(a,r){if(a&1&&(e(0,`
1423    `),v(1,gd,7,5)(2,fd,7,5)(3,bd,7,4)(4,Sd,16,4)(5,Ed,10,4)(6,vd,7,4)(7,yd,7,6)(8,wd,4,0),e(9,`
1424`)),a&2){let l,d=r.kind;i(),y((l=d)==="cta"?1:l==="primary-btn"?2:l==="outline-btn"?3:l==="nav"?4:l==="banner"?5:l==="accent"?6:l==="author-text"?7:8)}}function _d(a,r){a&1&&(e(0,`
1425        `),n(1,"p",18),e(2,`
1426            `),c(3,"app-pill",74),e(4,`
1427            `),n(5,"span",75),e(6,`
1428                The threshold has been corrected but the `),n(7,"code"),e(8,"#333333"),t(),e(9,` rule has not, and
1429                `),n(10,"strong"),e(11,"that combination measures worse than the original bug did"),t(),e(12,`. See
1430                `),n(13,"a",76),e(14,"How wrong, measured"),t(),e(15,`.
1431            `),t(),e(16,`
1432        `),t(),e(17,`
1433    `)),a&2&&(i(13),m("routerLink",V(1,tl)))}function kd(a,r){if(a&1&&(e(0,`
1434            The code uses `),n(1,"code"),e(2),t(),e(3,` \u2014 a dropped zero, introduced in
1435            `),n(4,"code"),e(5),t(),e(6)),a&2){let l=u();i(2),p(l.LEGACY_THRESHOLD),i(3),p(l.introducedIn),i(),f(" on ",l.introducedOn,` and never touched since.
1436        `)}}function Td(a,r){if(a&1&&(e(0,`
1437            The code used `),n(1,"code"),e(2),t(),e(3,` \u2014 a dropped zero, introduced in
1438            `),n(4,"code"),e(5),t(),e(6),n(7,"strong"),e(8,"It has since been corrected"),t(),e(9,`, which is why the live check at the foot of
1439            this section is green. The curve below is kept as history.
1440        `)),a&2){let l=u();i(2),p(l.LEGACY_THRESHOLD),i(3),p(l.introducedIn),i(),f(" on ",l.introducedOn,` and carried for four years.
1441            `)}}function Id(a,r){a&1&&(e(0,`
1442            `),c(1,"app-pill",77),e(2,`
1443            `),n(3,"span",75),e(4,"The shipped "),n(5,"code"),e(6,"getLuminance"),t(),e(7," still disagrees with WCAG right now \u2014 this page is reading the unfixed code."),t(),e(8,`
1444        `))}function Md(a,r){a&1&&(e(0,`
1445            `),c(1,"app-pill",78),e(2,`
1446            `),n(3,"span",75),e(4,"The shipped "),n(5,"code"),e(6,"getLuminance"),t(),e(7," now agrees with WCAG. The curve above is kept as history; this line is the regression check."),t(),e(8,`
1447        `))}function Dd(a,r){a&1&&(e(0,`
1448        `),n(1,"div",15),e(2,`
1449            `),c(3,"app-pill",79),e(4,`
1450            `),n(5,"span",80),e(6,`
1451                The live code has the corrected threshold and the old rule \u2014 the configuration
1452                described above. Finish Tier 1 or revert the threshold.
1453            `),t(),e(7,`
1454        `),t(),e(8,`
1455    `))}function Fd(a,r){if(a&1){let l=B();e(0,`
1456                `),n(1,"button",81),g("click",function(){let s=w(l).$implicit,o=u();return C(o.demoHex=s)}),e(2,`
1457                    `),c(3,"span",82),e(4),t(),e(5,`
1458            `)}if(a&2){let l=r.$implicit;i(3),W("background-color",l),i(),f("",l,`
1459                `)}}function Pd(a,r){a&1&&(e(0,`
1460                        `),n(1,"span",86),e(2,"passes AA"),t(),e(3,`
1461                    `))}function Ad(a,r){a&1&&(e(0,`
1462                        `),n(1,"span",89),e(2,"fails AA"),t(),e(3,`
1463                    `))}function Od(a,r){a&1&&e(0,`
1464                The two panels differ, so the left one is what a club with this colour is seeing in
1465                production today.
1466            `)}function Nd(a,r){a&1&&e(0,`
1467                Both rules agree on this colour \u2014 the gap only opens on the mid-tones.
1468            `)}function Bd(a,r){a&1&&(e(0,`
1469                        `),n(1,"span",75),c(2,"app-pill",93),t(),e(3,`
1470                    `))}function Wd(a,r){a&1&&(e(0,`
1471                        `),n(1,"span",75),c(2,"app-pill",94),t(),e(3,`
1472                    `))}function Rd(a,r){a&1&&de(0)}function Ld(a,r){a&1&&(e(0,`
1473                                `),n(1,"span",86),e(2,"passes AA"),t(),e(3,`
1474                            `))}function qd(a,r){a&1&&(e(0,`
1475                                `),n(1,"span",89),e(2,"fails AA"),t(),e(3,`
1476                            `))}function Vd(a,r){a&1&&de(0)}function zd(a,r){a&1&&(e(0,`
1477                                `),n(1,"span",86),e(2,"passes AA"),t(),e(3,`
1478                            `))}function Ud(a,r){a&1&&(e(0,`
1479                                `),n(1,"span",89),e(2,"fails AA"),t(),e(3,`
1480                            `))}function Hd(a,r){if(a&1&&(e(0,`
1481            `),n(1,"div",90),e(2,`
1482                `),n(3,"div",91),e(4,`
1483                    `),n(5,"strong",67),e(6),t(),e(7,`
1484                    `),v(8,Bd,4,0)(9,Wd,4,0),t(),e(10,`
1485                `),n(11,"div",19),e(12,`
1486                    `),n(13,"div",83),e(14,`
1487                        `),n(15,"app-sg-caption",33),e(16,"as it ships now"),t(),e(17,`
1488                        `),k(18,Rd,1,0,"ng-container",92),e(19,`
1489                        `),n(20,"p",85),e(21),L(22,"number"),v(23,Ld,4,0)(24,qd,4,0),t(),e(25,`
1490                    `),t(),e(26,`
1491                    `),n(27,"div",83),e(28,`
1492                        `),n(29,"app-sg-caption",33),e(30,"a fully-correct rule"),t(),e(31,`
1493                        `),k(32,Vd,1,0,"ng-container",92),e(33,`
1494                        `),n(34,"p",85),e(35),L(36,"number"),v(37,zd,4,0)(38,Ud,4,0),t(),e(39,`
1495                    `),t(),e(40,`
1496                `),t(),e(41,`
1497            `),t(),e(42,`
1498        `)),a&2){let l=r.$implicit,d=u(2),s=ue(2);i(6),p(d.demoLabels[l]),i(2),y(d.demoChanges(l)?8:9),i(10),m("ngTemplateOutlet",s)("ngTemplateOutletContext",ie(16,nl,l)),i(3),f(`
1499                            `,G(22,10,d.pairRatio(d.demoColors(l,"shipped").fg,d.demoColors(l,"shipped").bg),"1.2-2"),`:1 \u2014
1500                            `),i(2),y(d.pairPasses(d.demoColors(l,"shipped").fg,d.demoColors(l,"shipped").bg)?23:24),i(9),m("ngTemplateOutlet",s)("ngTemplateOutletContext",ie(18,il,l)),i(3),f(`
1501                            `,G(36,13,d.pairRatio(d.demoColors(l,"fixed").fg,d.demoColors(l,"fixed").bg),"1.2-2"),`:1 \u2014
1502                            `),i(2),y(d.pairPasses(d.demoColors(l,"fixed").fg,d.demoColors(l,"fixed").bg)?37:38)}}function jd(a,r){if(a&1&&(e(0,`
1503        `),n(1,"div",26),e(2,`
1504            `),n(3,"div",83),e(4,`
1505                `),n(5,"app-sg-caption",2),e(6,"as the app decides it today \u2014 live"),t(),e(7,`
1506                `),n(8,"div",84),e(9),t(),e(10,`
1507                `),n(11,"p",85),e(12),L(13,"number"),n(14,"strong"),e(15),L(16,"number"),t(),e(17,` \u2014
1508                    the two agree now that the threshold is right \u2014
1509                    `),v(18,Pd,4,0)(19,Ad,4,0),t(),e(20,`
1510            `),t(),e(21,`
1511            `),n(22,"div",83),e(23,`
1512                `),n(24,"app-sg-caption",2),e(25,"best of black / white"),t(),e(26,`
1513                `),n(27,"div",84),e(28),t(),e(29,`
1514                `),n(30,"p",85),e(31,`
1515                    True ratio `),n(32,"strong"),e(33),L(34,"number"),t(),e(35,`
1516                    \u2014 `),n(36,"span",86),e(37,"passes AA"),t(),e(38),L(39,"number"),L(40,"number"),t(),e(41,`
1517            `),t(),e(42,`
1518        `),t(),e(43,`
1519        `),n(44,"p",87),e(45,`
1520            `),v(46,Od,1,0)(47,Nd,1,0),t(),e(48,`
1521
1522        `),n(49,"h4",88),e(50,"What that colour does to the elements that use it"),t(),e(51,`
1523        `),n(52,"p",3),e(53,`
1524            Swatches make the ratio arguable; buttons make it obvious. Each pair below is the real
1525            element a club would see, with `),n(54,"strong"),e(55,`the same custom properties
1526            `),n(56,"code"),e(57,"header.component.ts"),t(),e(58," writes"),t(),e(59,` set on a wrapper \u2014 so the primary,
1527            outline and CMS buttons are styled by the actual shipping `),n(60,"code"),e(61,".btn"),t(),e(62,` rules, not by
1528            anything this page invented. Only the CTA is a replica, because its rule is
1529            component-scoped and the harness cannot reach it.
1530            `),n(63,"strong"),e(64,"Hover the CTA and the buttons"),t(),e(65,` \u2014 several of these only diverge on hover.
1531        `),t(),e(66,`
1532
1533        `),S(67,Hd,43,20,null,null,K),n(69,"p",31),e(70,`
1534            Two of these are still broken, deliberately: the `),n(71,"strong"),e(72,"outline button"),t(),e(73,`
1535            paints its label in the raw club colour on a white fill and nothing ever checks that pair,
1536            and the `),n(74,"strong"),e(75,"author-set CMS button"),t(),e(76,` takes both colours verbatim. Neither is a
1537            maths problem \u2014 they are Tier 3 and Tier 4, and they are the reason the tiers exist.
1538        `),t(),e(77,`
1539    `)),a&2){let l=u();i(8),W("background-color",l.demoHex)("color",l.shippedTextColor(l.demoHex)),i(),f(`
1540                    Register Now \u2014 `,l.shippedTextColor(l.demoHex),`
1541                `),i(3),f(`
1542                    The app computes `,G(13,17,l.shippedBelievedRatio(l.demoHex),"1.2-2"),`:1 for this
1543                    pair. It actually measures
1544                    `),i(3),f("",G(16,20,l.shippedActualRatio(l.demoHex),"1.2-2"),":1"),i(3),y(l.shippedActualRatio(l.demoHex)>=4.5?18:19),i(9),W("background-color",l.demoHex)("color",l.correctTextColor(l.demoHex)),i(),f(`
1545                    Register Now \u2014 `,l.correctTextColor(l.demoHex),`
1546                `),i(5),f("",G(34,23,l.correctPickRatio(l.demoHex),"1.2-2"),":1"),i(5),q(`. Black scores
1547                    `,G(39,26,l.trueRatio("#000000",l.demoHex),"1.2-2"),`:1, white
1548                    `,G(40,29,l.trueRatio("#ffffff",l.demoHex),"1.2-2"),`:1.
1549                `),i(8),y(l.picksDiffer(l.demoHex)?46:47),i(21),E(l.elementDemos)}}function Gd(a,r){a&1&&(e(0,`
1550        `),n(1,"p",95),e(2,"Enter a 6-digit hex, e.g. "),n(3,"code"),e(4,"#f663a5"),t(),e(5,"."),t(),e(6,`
1551    `))}function $d(a,r){if(a&1&&(e(0,`
1552                    `),n(1,"tr"),e(2,`
1553                        `),n(3,"td",67),e(4),t(),e(5,`
1554                        `),n(6,"td",96)(7,"code"),e(8),t()(),e(9,`
1555                        `),n(10,"td",3),e(11),t(),e(12,`
1556                    `),t(),e(13,`
1557                `)),a&2){let l=r.$implicit;i(4),p(l.when),i(4),p(l.who),i(3),p(l.what)}}function Kd(a,r){a&1&&de(0)}function Xd(a,r){a&1&&de(0)}function Yd(a,r){if(a&1&&(e(0,`
1558                                `),n(1,"div",99),e(2,`
1559                                    `),n(3,"div",19),e(4,`
1560                                        `),n(5,"div",100),e(6,`
1561                                            `),n(7,"div",101),e(8,"as shipped"),t(),e(9,`
1562                                            `),k(10,Kd,1,0,"ng-container",92),e(11,`
1563                                        `),t(),e(12,`
1564                                        `),n(13,"div",100),e(14,`
1565                                            `),n(15,"div",101),e(16,"after the fix"),t(),e(17,`
1566                                            `),k(18,Xd,1,0,"ng-container",92),e(19,`
1567                                        `),t(),e(20,`
1568                                    `),t(),e(21,`
1569                                    `),n(22,"div",10),e(23,`
1570                                        driven by `),n(24,"code"),e(25),t(),e(26,` from
1571                                        `),n(27,"a",102),e(28,"Try a colour"),t(),e(29,`
1572                                    `),t(),e(30,`
1573                                `),t(),e(31,`
1574                            `)),a&2){let l=u().$implicit,d=u(),s=ue(2);i(10),m("ngTemplateOutlet",s)("ngTemplateOutletContext",ie(6,nl,l.demo)),i(8),m("ngTemplateOutlet",s)("ngTemplateOutletContext",ie(8,il,l.demo)),i(7),p(d.demoHex),i(2),m("routerLink",V(10,tl))}}function Qd(a,r){a&1&&(e(0,`
1575                                `),n(1,"div",103),e(2,`
1576                                    not replicable here \u2014 it toggles a class in an admin preview, or renders into email.
1577                                `),t(),e(3,`
1578                            `))}function Jd(a,r){if(a&1&&(e(0,`
1579                    `),n(1,"tr"),e(2,`
1580                        `),n(3,"td"),c(4,"app-sg-verdict",97),t(),e(5,`
1581                        `),n(6,"td",67)(7,"code"),e(8),t()(),e(9,`
1582                        `),n(10,"td",67)(11,"code"),e(12),t()(),e(13,`
1583                        `),n(14,"td",96),e(15),t(),e(16,`
1584                        `),n(17,"td",3),e(18,`
1585                            `),n(19,"div",98),e(20),t(),e(21),v(22,Yd,32,11)(23,Qd,4,0),t(),e(24,`
1586                    `),t(),e(25,`
1587                `)),a&2){let l=r.$implicit;i(4),m("verdict",l.verdict),i(4),p(l.where),i(4),p(l.tested),i(3),p(l.shape),i(5),p(l.decides),i(),f(`
1588                            `,l.risk,`
1589                            `),i(),y(l.demo?22:23)}}function Zd(a,r){if(a&1&&(e(0,`
1590                    `),n(1,"tr"),e(2,`
1591                        `),n(3,"td",67)(4,"code"),e(5),t()(),e(6,`
1592                        `),n(7,"td",67)(8,"code"),e(9),t()(),e(10,`
1593                        `),n(11,"td",96),e(12),t(),e(13,`
1594                    `),t(),e(14,`
1595                `)),a&2){let l=r.$implicit;i(5),p(l.background),i(4),p(l.foreground),i(3),p(l.where)}}function em(a,r){if(a&1&&(e(0,`
1596                    `),n(1,"tr"),e(2,`
1597                        `),n(3,"td"),c(4,"app-sg-verdict",97),t(),e(5,`
1598                        `),n(6,"td",67)(7,"code"),e(8),t(),n(9,"span",104),e(10),t()(),e(11,`
1599                        `),n(12,"td",67),e(13),t(),e(14,`
1600                        `),n(15,"td",3),e(16),t(),e(17,`
1601                    `),t(),e(18,`
1602                `)),a&2){let l=r.$implicit;i(4),m("verdict",l.verdict),i(4),p(l.fn),i(2),f(":",l.line),i(3),p(l.callSites),i(3),p(l.problem)}}function tm(a,r){if(a&1&&(e(0,`
1603            `),n(1,"div",105),e(2,`
1604                `),c(3,"span",106),e(4,`
1605                `),n(5,"div",107)(6,"code"),e(7),t()(),e(8,`
1606                `),n(9,"div",23),e(10),t(),e(11,`
1607            `),t(),e(12,`
1608        `)),a&2){let l=r.$implicit;i(3),W("background-color",l.output),i(4),p(l.input),i(3),p(l.output)}}function nm(a,r){if(a&1&&(e(0,`
1609                    `),n(1,"tr"),e(2,`
1610                        `),n(3,"td",67)(4,"code"),e(5),t()(),e(6,`
1611                        `),n(7,"td",67),e(8),t(),e(9,`
1612                        `),n(10,"td",67),e(11),t(),e(12,`
1613                        `),n(13,"td",67),e(14),t(),e(15,`
1614                    `),t(),e(16,`
1615                `)),a&2){let l=r.$implicit,d=u();i(5),p(l||"(empty string)"),i(3),p(d.validity(l).checker),i(3),p(d.validity(l).toArray),i(3),p(d.validity(l).toRgba)}}function im(a,r){if(a&1&&(e(0,`
1616            `),c(1,"app-pill",108),e(2,`
1617            `),n(3,"code",75),e(4),t(),e(5,`
1618        `)),a&2){let l=u();i(4),p(l.darkenThrows.result)}}function am(a,r){if(a&1&&(e(0,`
1619            `),c(1,"app-pill",109),e(2,`
1620            `),n(3,"code",75),e(4),t(),e(5,`
1621        `)),a&2){let l=u();i(4),p(l.darkenThrows.result)}}function rm(a,r){if(a&1&&(e(0,`
1622                    `),n(1,"tr"),e(2,`
1623                        `),n(3,"td"),c(4,"app-sg-verdict",97),t(),e(5,`
1624                        `),n(6,"td",67)(7,"code"),e(8),t()(),e(9,`
1625                        `),n(10,"td",67)(11,"code"),e(12),t()(),e(13,`
1626                        `),n(14,"td",96),e(15),t(),e(16,`
1627                        `),n(17,"td",3),e(18),t(),e(19,`
1628                    `),t(),e(20,`
1629                `)),a&2){let l=r.$implicit;i(4),m("verdict",l.verdict),i(4),p(l.where),i(4),p(l.tests),i(3),p(l.mechanism),i(3),p(l.does)}}function om(a,r){if(a&1&&(e(0,`
1630                    `),n(1,"tr"),e(2,`
1631                        `),n(3,"td"),c(4,"app-sg-verdict",97),t(),e(5,`
1632                        `),n(6,"td",67)(7,"code"),e(8),t()(),e(9,`
1633                        `),n(10,"td",3),e(11),t(),e(12,`
1634                    `),t(),e(13,`
1635                `)),a&2){let l=r.$implicit;i(4),m("verdict",l.verdict),i(4),p(l.thing),i(3),p(l.state)}}function lm(a,r){if(a&1&&(e(0,`
1636            `),n(1,"li")(2,"code"),e(3),t()(),e(4,`
1637        `)),a&2){let l=r.$implicit;i(3),p(l)}}function sm(a,r){if(a&1&&(e(0,`
1638                    `),n(1,"tr"),e(2,`
1639                        `),n(3,"td",67)(4,"strong"),e(5),t()(),e(6,`
1640                        `),n(7,"td",3),e(8),t(),e(9,`
1641                        `),n(10,"td",3),e(11),t(),e(12,`
1642                    `),t(),e(13,`
1643                `)),a&2){let l=r.$implicit;i(5),p(l.tier),i(3),p(l.contents),i(3),p(l.buys)}}var al=(()=>{let r=class r{linearize(d,s){let o=d/255;return o<=s?o/12.92:Math.pow((o+.055)/1.055,2.4)}channels(d){let s=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(d);return s?{r:parseInt(s[1],16),g:parseInt(s[2],16),b:parseInt(s[3],16)}:null}luminanceAt(d,s){let o=this.channels(d);return .2126*this.linearize(o.r,s)+.7152*this.linearize(o.g,s)+.0722*this.linearize(o.b,s)}ratioFrom(d,s){return d>s?(d+.05)/(s+.05):(s+.05)/(d+.05)}trueRatio(d,s){return this.ratioFrom(this.luminanceAt(d,this.WCAG_THRESHOLD),this.luminanceAt(s,this.WCAG_THRESHOLD))}shippedRatio(d,s){return this.ratioFrom(At(d),At(s))}expand(d){return d.length===4?"#"+d[1]+d[1]+d[2]+d[2]+d[3]+d[3]:d}correctTextColor(d){return this.trueRatio("#000000",d)>=this.trueRatio("#ffffff",d)?"#000":"#fff"}shippedTextColor(d){return Li(d)}halfFixedTextColor(d){return this.trueRatio("#333333",d)>=this.AA?"#000":"#fff"}legacyTextColor(d){return this.ratioFrom(this.luminanceAt("#333333",this.LEGACY_THRESHOLD),this.luminanceAt(d,this.LEGACY_THRESHOLD))>=this.AA?"#000":"#fff"}hex2(d){return d.toString(16).padStart(2,"0")}plot(d){return this.curve.map(s=>`${s.byte/255*this.chart.width},${this.chart.height-d(s)*this.chart.height}`).join(" ")}get halfFixedUnreadablePercent(){return this.sweep.total?100*this.sweep.halfFixedUnreadable/this.sweep.total:0}get legacyUnreadablePercent(){return this.sweep.total?100*this.sweep.legacyUnreadable/this.sweep.total:0}get bothFixedUnreadablePercent(){return this.sweep.total?100*this.sweep.bothFixedUnreadable/this.sweep.total:0}get inHalfFixedState(){return!this.shippedStillWrong&&this.unreadablePercent>this.legacyUnreadablePercent}get disagreePercent(){return this.sweep.total?100*this.sweep.disagree/this.sweep.total:0}get unreadablePercent(){return this.sweep.total?100*this.sweep.unreadable/this.sweep.total:0}get hoverFailPercent(){return this.sweep.total?100*this.sweep.hoverFails/this.sweep.total:0}runSweep(){let d=this.sweep;for(let s=0;s<256;s+=this.SWEEP_STEP)for(let o=0;o<256;o+=this.SWEEP_STEP)for(let x=0;x<256;x+=this.SWEEP_STEP){let h="#"+this.hex2(s)+this.hex2(o)+this.hex2(x);d.total++;let _=this.shippedTextColor(h),se=this.correctTextColor(h),qe=this.trueRatio(this.expand(_),h);_!==se&&(d.disagree++,qe<this.AA?d.unsafe++:d.safe++),qe<this.AA&&(d.unreadable++,qe<d.worstRatio&&(d.worstRatio=qe,d.worstColor=h,d.worstPick=_)),this.trueRatio(this.expand(this.legacyTextColor(h)),h)<this.AA&&d.legacyUnreadable++,this.trueRatio(this.expand(this.halfFixedTextColor(h)),h)<this.AA&&d.halfFixedUnreadable++,this.trueRatio(this.expand(se),h)<this.AA&&d.bothFixedUnreadable++;let ea=Math.max(this.trueRatio("#000000",h),this.trueRatio("#ffffff",h));ea<d.bestOfWorst&&(d.bestOfWorst=ea,d.bestOfWorstColor=h);let Oi=this.trueRatio(this.correctDarkenUntilReadable(h,"#ffffff"),"#ffffff");Oi<this.AA&&d.hoverFails++,Oi<d.hoverWorst&&(d.hoverWorst=Oi)}}get demoValid(){return/^#[a-f\d]{6}$/i.test(thi
1643s.demoHex)}shippedBelievedRatio(d){return this.shippedRatio(this.expand(this.shippedTextColor(d)),d)}shippedActualRatio(d){return this.trueRatio(this.expand(this.shippedTextColor(d)),d)}correctPickRatio(d){return this.trueRatio(this.expand(this.correctTextColor(d)),d)}picksDiffer(d){return this.shippedTextColor(d)!==this.correctTextColor(d)}ctaContrastShipped(d){return Li(d)}ctaContrastFixed(d){return this.correctTextColor(d)}ctaHoverShipped(d){return Ta(d,"#ffffff")}ctaHoverFixed(d){return this.correctDarkenUntilReadable(d,"#ffffff")}primaryTextShipped(d){return Pt("#ffffff",d)?"#ffffff":"#111111"}primaryTextFixed(d){return this.correctTextColor(d)==="#000"?"#111111":"#ffffff"}accentContrastShipped(){return"#ffffff"}accentContrastFixed(d){return this.correctTextColor(d)}bannerContrastShipped(d){return Pt("#ffffff",d)?"#ffffff":"#111111"}bannerContrastFixed(d){return this.correctTextColor(d)}navContrastShipped(d){return this.shippedTextColor(d)}navContrastFixed(d){return this.correctTextColor(d)}correctDarkenUntilReadable(d,s){let o=this.channels(d);if(!o)return"#000000";for(let x=9;x>=1;x--){let h=x/10,_="#"+this.hex2(Math.round(o.r*h))+this.hex2(Math.round(o.g*h))+this.hex2(Math.round(o.b*h));if(this.trueRatio(_,s)>=this.AA)return _}return"#000000"}pairRatio(d,s){return this.trueRatio(this.expand(d),s)}pairPasses(d,s){return this.pairRatio(d,s)>=this.AA}demoColors(d,s){let o=this.demoValid?this.demoHex:"#ffffff",x=s==="fixed";switch(d){case"cta":return{bg:o,fg:x?this.ctaContrastFixed(o):this.ctaContrastShipped(o),hover:x?this.ctaHoverFixed(o):this.ctaHoverShipped(o)};case"primary-btn":return{bg:o,fg:x?this.primaryTextFixed(o):this.primaryTextShipped(o),hover:o};case"outline-btn":return{bg:"#ffffff",fg:o,hover:o};case"accent":return{bg:o,fg:x?this.accentContrastFixed(o):this.accentContrastShipped(),hover:o};case"banner":return{bg:o,fg:x?this.bannerContrastFixed(o):this.bannerContrastShipped(o),hover:o};case"nav":return{bg:o,fg:x?this.navContrastFixed(o):this.navContrastShipped(o),hover:o};case"author-text":return{bg:o,fg:o,hover:o};default:return{bg:o,fg:"#ffffff",hover:o}}}demoChanges(d){return this.demoColors(d,"shipped").fg!==this.demoColors(d,"fixed").fg||this.demoColors(d,"shipped").hover!==this.demoColors(d,"fixed").hover}get oneWayCount(){return this.callSites.filter(d=>d.shape==="one-way").length}validity(d){let s;try{s=Pt(d,"#000000")?"true (passes)":"false (fails)"}catch(h){s="throws"}let o;try{o=this.channels(d)?"parsed":"null"}catch(h){o="throws"}let x;try{x=Je(d,1)}catch(h){x="throws"}return{checker:s,toArray:o,toRgba:x}}constructor(d){this.siteDataService=d,this.snapshotDate="2026-09-01",this.tier1FixedOn="2026-09-04",this.WCAG_THRESHOLD=.03928,this.LEGACY_THRESHOLD=.3928,this.AA=4.5,this.brandColor="#ec4f2e",this.introducedIn="2c9c77fcae",this.introducedOn="2021-05-13",this.SWEEP_STEP=17,this.curve=Array.from({length:52},(s,o)=>{let x=Math.min(255,o*5);return{byte:x,legacy:this.linearize(x,this.LEGACY_THRESHOLD),wcag:this.linearize(x,this.WCAG_THRESHOLD)}}),this.chart={width:480,height:170},this.legacyPlot=this.plot(s=>s.legacy),this.wcagPlot=this.plot(s=>s.wcag),this.legacyCrossover=Math.floor(this.LEGACY_THRESHOLD*255),this.wcagCrossover=Math.floor(this.WCAG_THRESHOLD*255),this.worstChannel=(()=>{let s=this.legacyCrossover,o=this.linearize(s,this.LEGACY_THRESHOLD),x=this.linearize(s,this.WCAG_THRESHOLD);return{byte:s,legacy:o,wcag:x,factor:x/o}})(),this.shippedStillWrong=Math.abs(At("#646464")-this.luminanceAt("#646464",this.WCAG_THRESHOLD))>1e-4,this.sweep={total:0,disagree:0,unreadable:0,unsafe:0,safe:0,worstRatio:99,worstColor:"",worstPick:"",hoverFails:0,hoverWorst:99,bestOfWorst:99,bestOfWorstColor:"",legacyUnreadable:0,halfFixedUnreadable:0,bothFixedUnreadable:0},this.fullSweep={total:636056,unreadable:88942,unreadablePercent:14,worstRatio:2.9,worstColor:"#f663a5",bestOfWorst:4.58,halfFixed:149873,halfFixedPercent:23.6,bothFixed:0},this.shippedSweep={total:16777216,textFails:0,textFloor:4.58,textFloorColor:"#cf0dcc",hoverFails:0,hoverFloor:4.5,ratioDrift:0},this.demoHex="#f663a5",this.demoLabels={cta:"CTA button \u2014 banner, club 
1643contact, CMS","primary-btn":"Primary button \u2014 the real .btn-primary rule","outline-btn":"Default/outline button \u2014 the real .btn rule",accent:"Accent surface \u2014 nav hover, panel menu active",banner:"Banner \u2014 team, player, league",nav:"Top navigation bar","author-text":"CMS button with an author-set text colour","dead-var":"Nothing \u2014 the variable has no consumer"},this.elementDemos=["cta","primary-btn","outline-btn","accent","nav","banner","author-text"],this.presets=["#f663a5","#ffffff","#7ccdef","#0088ff","#ffe066","#00aa00","#7f3ca1","#111111"],this.probeHistory=[{when:"2021-05-13",who:"commit 2c9c77fcae",what:'contrastChecker introduced. It tested #ffffff \u2014 the colour that actually rendered \u2014 purely to WARN an admin in the theme editor: "text on this background may be too light". Correct by construction: it asked about the real pair, and changed nothing.'},{when:"later",who:"moved into header.component.ts",what:"The same call was repurposed from warning to deciding, testing #000000 and toggling a .needsContrast CSS class."},{when:"2025-07-09",who:"commit 2944810373",what:'#000000 \u2192 #333333, "contrast checker adjustment on header". Still a boolean driving a class, so asking "is dark-ish text readable here?" was reasonable. #333333 was a stand-in for dark text, never a value anything returned.'},{when:"2026-05-20",who:"commit 8b4b0397b8",what:'Someone fixed it exactly right: "checks contrast against actual color instead of hardcoded value" \u2014 #333333 \u2192 theme.topNavigationTextColor.'},{when:"2026-05-20",who:"commit 3f4ba8ee15",what:'Reverted the same day, one line, message "restore change". The likely reason is Tier 2: topNavigationTextColor is frequently unset or the #ffffff0 sentinel, and contrastChecker fails OPEN on the first and CLOSED on the second \u2014 so the correct fix returned garbage.'},{when:"2026-09-01",who:"this audit",what:"The rule was briefly extracted into a shared contrastingTextColor and pointed at the CTA button too \u2014 which would have spread #333333 to a second consumer. Rolled back with every other change so this page could be built first and the tier decision made from evidence."},{when:"2026-09-04",who:"Tier 1",what:"The probe is gone. contrastingTextColor compares black against white and returns whichever actually wins, so nothing tests a colour it does not render. It shipped in the same change as the threshold, because the measurements above show that either one alone is worse than both."}],this.callSites=[{where:"header.component.ts:847 \u2014 colorAccent",tested:"#000000",decides:"--theme-color-accent-contrast",shape:"one-way",risk:"Writes #fff only when black FAILS. A light accent falls through to the var(--color-white) default \u2014 white on light. 10 consumers.",verdict:"defect",demo:"accent"},{where:"header.component.ts:837 \u2014 colorPrimary",tested:"#000000",decides:"--theme-color-primary-contrast",shape:"dead",risk:"Same shape, but the variable has zero CSS consumers and is never declared. The check cannot reach anything.",verdict:"dead",demo:"dead-var"},{where:"header.component.ts:880 \u2014 bannerColor",tested:"#ffffff",decides:"--theme-banner-background-contrast",shape:"one-way",risk:"Correctly oriented \u2014 the fall-through default is the safe answer. The #ffffff0 sentinel still length-fails into #111111.",verdict:"live",demo:"banner"},{where:"header.component.ts:937 \u2014 topNavigationBackground",tested:"black vs white",decides:"--theme-top-navigation-background-contrast",shape:"two-way",risk:"On contrastingTextColor since Tier 1, and now derived from navBgColor so the #ffffff0 sentinel resolves first. The most-consumed contrast var in the app (24+ readers). An explicit topNavigationTextColor still overrides it unchecked \u2014 Tier 4.",verdict:"house",demo:"nav"},{where:"header.component.ts:947 \u2014 colorCTAButtons",tested:"black vs white",decides:"--theme-color-cta-buttons-contrast + --theme-color-cta-buttons--hover",shape:"two-way",risk:"Tier 1. Always writes, both directions, and skips the #ffffff0 sentinel instead of emitting an invali
1643d colour. This is the shape the one-way sites below should copy.",verdict:"house",demo:"cta"},{where:"header.component.ts:988 \u2014 buttonBackgroundColor",tested:"(none)",decides:"--theme-button-text-color",shape:"one-way",risk:"Outline button: white fill, label painted the raw club colour, never checked. The check at 1025 covers only the filled and hover states.",verdict:"defect",demo:"outline-btn"},{where:"header.component.ts:1025 \u2014 button text",tested:"#ffffff",decides:"5 --theme-button-text-* vars",shape:"one-way",risk:"Fall-through default is correct here, so filled/primary buttons are safe.",verdict:"live",demo:"primary-btn"},{where:"button-content.component.ts:233 / :252",tested:"#ffffff",decides:"5 --cms-button-text-* vars",shape:"one-way",risk:"Reads its input back out of the DOM, so it can be an empty string or a var(...) reference. 252 is two-directional; 233 is not.",verdict:"drift"},{where:"button-content.component.ts:243",tested:"(none)",decides:"5 --cms-button-text-* vars",shape:"one-way",risk:"An author's explicit textColor is applied verbatim to all five vars \u2014 yellow on yellow is reachable.",verdict:"defect",demo:"author-text"},{where:"page-builder-row.component.ts:204 + view twin :212",tested:"#2e3032",decides:"--row-needs-contrast",shape:"one-way",risk:"Duplicated admin/view pair. Only the scoreboard widget reads the variable; every other content type in a dark row keeps its own colour.",verdict:"drift"},{where:"content-dashboard.component.ts:495",tested:"#ffffff",decides:".needs-contrast class",shape:"class",risk:"Class toggle on colorPrimary.",verdict:"live"},{where:"mobile-home-preview.component.ts:96",tested:"#ffffff",decides:".needs-contrast class",shape:"class",risk:"bgColor can be undefined, which contrastChecker treats as passing.",verdict:"drift"},{where:"roster-card-content.component.ts:54",tested:"#ffffff",decides:".needs-contrast class",shape:"class",risk:'Decision is computed against bgColor, but html:32 binds "#" + bgColor \u2014 ##003261, invalid.',verdict:"defect"},{where:"social-media-links-content.component.ts:63 / :98",tested:"#636363",decides:"highContrast \u2192 icon fallback",shape:"class",risk:"bgStyle is columnStyle[background-color] || rowBackground || '' \u2014 frequently empty, which reads as passing. Icons are non-text UI judged at the 4.5 text bar.",verdict:"drift"},{where:"compose.component.ts:652 \xB7 email-format-form.component.ts:83",tested:"#ffffff",decides:"inline email button text colour",shape:"two-way",risk:"Both branches written. Goes out in email, where it cannot be corrected after send.",verdict:"live"}],this.pairs=[{background:"footerNavigationBackground",foreground:"footerNavigationHeaderColor \xB7 footerNavigationLinkColor",where:"header.component.ts:862-871 \u2192 footer.component.scss"},{background:"bannerColor",foreground:"textColor (banner headline)",where:"header.component.ts:879 / :884"},{background:"topNavigationBackground",foreground:"topNavigationTextColor when the club sets one",where:"header.component.ts:934-944"}
1643,{background:"pageBackgroundColor + overlays",foreground:"columnTextColor and all body text",where:"header.component.ts:973, column templates"},{background:"row backgroundColor",foreground:"everything except the scoreboard widget",where:"page-builder-view-row.component.ts:208"},{background:"column backgroundColor",foreground:"column content",where:"page-builder-column.component.ts:133"},{background:"CMS button backgroundColor",foreground:"explicit button textColor",where:"button-content.component.ts:243-248"},{background:"carousel textBoxBackgroundColor",foreground:"headlineTextColor \xB7 descriptionTextColor",where:"image-carousel-item.component.html:129-139"}],this.utilities=[{fn:"contrastChecker",line:1060,callSites:12,verdict:"defect",problem:'Its maths is right now \u2014 it delegates to contrastRatio \u2014 but its input handling is not, and that is Tier 2. Missing input fails OPEN (returns true, "contrast is fine"); a valid #fff or 8-digit hex fails CLOSED. Two different wrong answers for two kinds of bad input, and the mobile fork still carries the 0.3928 threshold.'},{fn:"getLuminancePart",line:1131,callSites:0,verdict:"house",problem:"Was 0.3928 for five years; corrected to 0.03928 in Tier 1, together with the rule below. The measurements above are why the two had to land as one change. The regression check is the live line under the curve."},{fn:"contrastingTextColor",line:1088,callSites:2,verdict:"house",problem:"Tier 1 replaced the inline #333333 probe. Compares the two colours it can actually return, emits six-digit hex so contrastChecker's length-7 gate accepts it back, and returns black rather than throwing on unparseable input. Swept over all 16,777,216 colours: zero AA failures, floor 4.58:1."},{fn:"hexToRgba",line:1158,callSites:12,verdict:"defect",problem:"No validation at all. 3-digit hex yields rgba(255, 15, NaN, 1); any non-hex yields all-NaN. Both are invalid CSS, so the declaration is dropped and the overlay silently vanishes. Discards the alpha byte of 8-digit hex, and alpha = NaN survives the clamp."},{fn:"darkenHexColor",line:1073,callSites:5,verdict:"drift",problem:"Emits unrounded rgb(229.5,229.5,229.5) that no sibling helper can read back, and dereferences a null the line above may have produced."},{fn:"darkenHexColorUntilReadable",line:1096,callSites:1,verdict:"house",problem:"Tier 1. Steps the colour down until it clears AA against the surface it lands on, so a near-white CTA is darkened far enough \u2014 a fixed multiplier never could. Swept over all 16,777,216 colours against the white hover fill: zero failures, floor 4.50:1."},{fn:"lightenHexColor",line:1114,callSites:0,verdict:"dead",problem:"Divides where darkenHexColor multiplies, so the same 0.9 means opposite things. modifier < 1 overflows past 255, 0 gives Infinity, and it cannot lighten black at all. Not called live from this page \u2014 deleting it is the recommendation."},{fn:"isValidHexColor",line:1130,callSites:0,verdict:"dead",problem:"The one helper that would catch the 3-digit and sentinel cases, and nothing uses it."}],this.rgbaDemos=[{input:"#ffffff",output:Je("#ffffff",.5)},{input:"#fff",output:Je("#fff",.5)},{input:"#ffffff80",output:Je("#ffffff80",.5)},{input:"rgb(255,255,255)",output:Je("rgb(255,255,255)",.5)}],this.darkenDemo=qi("#ffffff",.9),this.darkenThrows=(()=>{try{return{threw:!1,result:qi("#fff",.9)}}catch(s){return{threw:!0,result:s instanceof Error?s.message:String(s)}}})(),this.validityMatrix=["#ffffff","#fff","ffffff","#ffffff80","#ffffff0",""],this.needsContrastRows=[{where:"content-dashboard.component.ts:495",tests:"#ffffff",mechanism:".needs-contrast class",does:"white \u2192 var(--color-black-lt)",verdict:"drift"},{where:"mobile-home-preview.component.ts:96",tests:"#ffffff",mechanism:".needs-contrast class",does:"white \u2192 var(--color-black-lt)",verdict:"drift"},{where:"roster-card-content.component.ts:54",tests:"#ffffff",mechanism:".needs-contrast class",does:"white \u2192 var(--color-black) \u2014 a different token from its two siblings",verdict:"drift"},{where:"header.component.ts:933",tests:"#333333",mechanism:".needsContrast \u2014 camel
1643Case",does:"sets 7 PrimeNG menubar tokens to LIGHT greys \u2014 the opposite direction. Dead: its only markup is two commented-out <header> tags.",verdict:"dead"},{where:"social-media-links-content.component.ts:63",tests:"#636363",mechanism:"highContrast \u2192 .needs-contrast &",does:"inverted boolean name, ancestor selector rather than a modifier, and icons are non-text UI judged at the 4.5 text bar",verdict:"drift"},{where:"page-builder-row.component.ts:204 + view twin",tests:"#2e3032",mechanism:"--row-needs-contrast variable",does:"not a class at all. Read by 2 rules in scoreboard-content; every other content type in a dark row keeps its own colour.",verdict:"drift"},{where:"variables.scss:274",tests:"\u2014",mechanism:"--theme-needs-contrast variable",does:'zero consumers; the declaration itself says "not really using this anymore"',verdict:"dead"}],this.deadThings=[{thing:"--theme-color-primary-contrast",state:"Written at header.component.ts:838, never declared in any stylesheet, zero readers.",verdict:"dead"},{thing:"--theme-button-background-contrast--naked (+ its -hover twin)",state:"Read by button-content.component.ts:273-274 and declared nowhere \u2014 those two lines are the only references in the codebase. Invalid at computed-value time, so naked CMS buttons fall back to inherited colour.",verdict:"undefined"},{thing:"checkButtonContrast()",state:"theme.component.ts:628-637 is entirely commented out with a bare return, so showButtonContrastWarning can never be true and the admin warning at theme.component.html:248 is unreachable. This is the mechanism the theme-editor warnings need.",verdict:"dead"},{thing:"--theme-needs-contrast",state:'Declared at variables.scss:274 with the comment "not really using this anymore". Zero consumers.',verdict:"dead"},{thing:"page-builder-edit.component.ts:731, 732, 761, 762",state:"Guards the overlay with +t?.pageOverlayColor. Unary plus on a hex string is NaN, always falsy, so the page-builder editor renders 
1643NO overlay while the published page renders it. The three sibling copies use plain truthiness.",verdict:"defect"},{thing:"Overlay gradient block \xD74",state:"The same ~20-line computation is copy-pasted across page-builder-edit (\xD72), page-builder-view (\xD72), theme.component.ts and header.component.ts \u2014 which is how one copy drifted into the bug above.",verdict:"drift"},{thing:"CTA hover border",state:"3 of the 4 CTA rules set border-color to the contrast colour over a white hover fill; cms.scss:101 alone keeps the club colour, which is the one that stays visible.",verdict:"defect"}],this.mobile={file:"Capacitor/src/app/shared/constants.ts:822",documentedPath:"../SprocketSports Mobile",actualPath:"/Users/bob/Develop/SprocketSports Mobile",callSites:["club.page.ts:105 \u2192 setBgColor(theme?.colorPrimary)",'overview.page.html:129 \u2192 [bgColor]="clubTheme?.colorPrimary" \u2192 mobile-banner'],commentedOut:"overview.page.ts:389-391"},this.tiers=[{tier:"1 \u2014 the maths and the rule, together \u2014 SHIPPED 2026-09-04",contents:"0.3928 \u2192 0.03928; the #333333 probe replaced by contrastingTextColor, which compares the two colours the rule actually returns; darkenHexColorUntilReadable for CTA hover; the runtime writing the hover variable name the CSS actually reads; the #ffffff0 sentinel skipped rather than emitted. Regression tests in constants.spec.ts.",buys:"Failure rate is zero across all 16,777,216 colours, with a floor of 4.58:1 that no club colour can defeat. Shipped as one change \u2014 the measurements above show the threshold alone is worse than the bug. The mobile fork still carries 0.3928; both its call sites are #ffffff class toggles, so the one-character fix is safe there on its own."},{tier:"2 \u2014 the colour utilities",contents:"One hex normalizer (3-digit, 8-digit alpha, optional #, the #ffffff0 sentinel) and the rest of the family routed through it. Consistent failure mode. hexToRgba validated. Null-deref guards. Delete lightenHexColor and isValidHexColor.",buys:"Removes the silent-wrong-answer class from every colour helper, not just the contrast ones."},{tier:"3 \u2014 call sites",contents:"The one-sided writes above, chiefly colorAccent. The page-builder editor overlay bug. The undefined --naked vars. The CTA hover border. One shared overlay helper in place of four copies.",buys:"Clears the remaining user-visible bugs of the same class as the CTA one."},{tier:"4 \u2014 unguarded pairs",contents:"Warn in the theme editor for the 8 pairs where a club picks both colours. Re-enabling checkButtonContrast is most of the work.",buys:'Turns "a club can make it unreadable and never know" into "a club is told, and still decides".'},{tier:"5 \u2014 retire needs-contrast",contents:"Fold the boolean into the token system: derive the colour once, emit it as a --*-contrast token, and delete the four class variants, the two spare CSS variables and the inverted highContrast flag.",buys:"Removes the second, parallel answer to the same question. A component reading var(--x-contrast) needs no boolean, so this is mostly deletion."}]}ngOnInit(){let d=getComputedStyle(document.documentElement).getPropertyValue("--brand-color").trim();/^#[a-f\d]{6}$/i.test(d)&&(this.brandColor=d),this.runSweep(),this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-contrast"]],standalone:!1,decls:912,vars:135,consts:[["sitePanel",""],["id","defect",1,"card"],["side","shared"],[1,"text-small","text-grey"],[1,"overflow-x-auto"],["role","img","aria-label","Linearized channel value against 8-bit input, shipped curve versus WCAG curve",1,"d-block"],["x1","0","stroke","var(--grey-300)","stroke-width","1"],["y1","0","stroke","var(--grey-300)","stroke-width","1","stroke-dasharray","3 3"],["fill","none","stroke","var(--green-600)","stroke-width","2"],["fill","none","stroke","var(--red-600)","stroke-width","2"],[1,"text-smallest","text-grey-lt","mt-1"],[1,"sg-swatch","sg-swatch--sm","mr-1",2,"background-color","var(--green-600)"],[1,"sg-swatch","sg-swatch--sm","ml-3","mr-1",2,"background-color","var(--red-600)"],[1,"text-small","mt-3","mb-0"],["
1643id","how-wrong",1,"card"],[1,"p-3","mb-3","border-all","border-radius","bg-grey-lt"],["variant","tag","status","error","text","read this first"],[1,"text-small","mt-2","mb-2"],[1,"text-small","mb-0"],[1,"row"],[1,"col-md-4"],[1,"sub-head"],[1,"text-header-3","mb-0"],[1,"text-smallest","text-grey-lt"],[1,"text-header-3","mb-0","text-red"],[1,"text-header-3","mb-0","text-green"],[1,"row","mt-3"],[1,"p-3","mt-3","border-all","border-radius","bg-grey-lt"],["variant","tag","status","success","text","Tier 1 verified"],[1,"text-small","mt-2","mb-0"],[1,"text-small","text-grey","mt-3","mb-0"],[1,"text-small","text-grey","mb-0"],["id","try-it",1,"card"],["side","member"],[1,"form-group"],["for","sgContrastHex"],["id","sgContrastHex","type","text","name","sgContrastHex","placeholder","#f663a5",2,"max-width","12rem",3,"ngModelChange","ngModel"],[1,"mt-2"],["id","second-flaw",1,"card"],[1,"sub-head","mt-3"],[1,"table","table-bordered","sg-doc-table"],[2,"width","7rem"],[2,"width","14rem"],["id","call-sites",1,"card"],[1,"table","table-bordered","table-hover","sg-doc-table"],[2,"width","6rem"],[2,"width","20rem"],[2,"width","5rem"],["id","pairs",1,"card"],[2,"width","18rem"],["id","utilities",1,"card"],[2,"width","15rem"],[2,"width","10rem"],[2,"width","12rem"],[1,"text-small","text-grey","mb-1"],["id","needs-contrast",1,"card"],["id","dead",1,"card"],[2,"width","22rem"],["id","mobile",1,"card"],["id","tiers",1,"card"],["id","legend",1,"card"],["type","button",1,"btn","sg-cta-replica"],["type","button",1,"btn","btn-primary"],["type","button",1,"btn"],[1,"p-2","d-flex","align-items-center"],[1,"mr-3"],[1,"mr-3","text-small"],[1,"text-small"],[1,"p-3"],[1,"text-header-4","mb-0"],[1,"p-2","border-radius"],[1,"p-3","bg-grey-lt","border-radius"],[1,"btn"],[1,"sg-slot-outline","p-3","text-smallest","text-grey-lt"],["variant","tag","status","warning","text","partly fixed"],[1,"ml-2"],["fragment","how-wrong",3,"routerLink"],["variant","tag","status","error","text","live"],["variant","tag","status","success","text","live"],["variant","tag","status","error","text","the tree is in that state now"],[1,"text-small","ml-2"],["type","button",1,"btn","btn-naked","btn-sm","mr-1",3,"click"],[1,"sg-swatch","sg-swatch--sm","mr-1"],[1,"col-md-6"],[1,"p-3","border-radius"],[1,"text-smallest","text-grey-lt","mt-1","mb-0"],[1,"text-green"],[1,"text-small","text-grey","mt-3"],[1,"sub-head","mt-4"],[1,"text-red"],[1,"mb-4"],[1,"d-flex","align-items-center","mb-1"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],["variant","tag","status","warning","text","the fix changes this"],["variant","tag","status","disabled","text","already correct"],[1,"text-small","text-red","mb-0"],[1,"text-smallest","text-grey"],[3,"verdict"],[1,"text-smallest"],[1,"mt-2","p-2","bg-grey-lt","border-all","border-radius"],[1,"col-6"],[1,"text-smallest","text-grey-lt","mb-1"],["fragment","try-it",3,"routerLink"],[1,"text-smallest","text-grey-lt","mt-2"],[1,"text-grey-lt"],[1,"col-md-3"],[1,"sg-swatch","sg-swatch--block","sg-slot-outline"],[1,"text-smallest","mt-1"],["variant","tag","status","error","text","throws"],["variant","tag","status","success","text","returns"]],template:function(s,o){if(s&1){let x=B();e(0,`
1644`),k(1,Cd,10,1,"ng-template",null,0,fe),e(3,`
1645
1646`),n(4,"div",1),e(5,`
1647    `),n(6,"h2"),e(7,"Contrast"),t(),e(8,`
1648    `),n(9,"app-sg-caption",2),e(10),t(),e(11,`
1649    `),n(12,"p",3),e(13),n(14,"strong"),e(15,`Tier 1 \u2014 the maths and the rule
1650        \u2014 has shipped;`),t(),e(16,` Tiers 2\u20135 have not, so the defect verdicts below are the
1651        live remainder rather than history. `),n(17,"strong"),e(18,"Every number is computed in your browser"),t(),e(19,`
1652        from the shipped `),n(20,"code"),e(21,"constants.ts"),t(),e(22,` against a WCAG-correct reference implemented
1653        alongside it \u2014 nothing here is a figure typed in from an audit, so the page keeps
1654        telling the truth as the code changes underneath it.
1655    `),t(),e(23,`
1656    `),v(24,_d,18,2),n(25,"h3"),e(26,"One character"),t(),e(27,`
1657    `),n(28,"p",3),e(29,`
1658        `),n(30,"code"),e(31,"getLuminancePart()"),t(),e(32," at "),n(33,"code"),e(34,"constants.ts:1060"),t(),e(35,` linearizes each sRGB
1659        channel. WCAG 2.1 sets the crossover between the linear branch and the gamma curve at
1660        `),n(36,"code"),e(37,"0.03928"),t(),e(38,`.
1661        `),v(39,kd,7,3)(40,Td,10,3),e(41,`
1662        Every other constant on that line was correct.
1663    `),t(),e(42,`
1664    `),n(43,"p",3),e(44,`
1665        The consequence is that the linear branch is taken for channel bytes up to
1666        `),n(45,"strong"),e(46),t(),e(47," instead of "),n(48,"strong"),e(49),t(),e(50),n(51,"code"),e(52),L(53,"number"),t(),e(54,` where the true value is
1667        `),n(55,"code"),e(56),L(57,"number"),t(),e(58,` \u2014
1668        `),n(59,"strong"),e(60),L(61,"number"),t(),e(62,`.
1669    `),t(),e(63,`
1670
1671    `),n(64,"div",4),e(65,`
1672        `),ra(),n(66,"svg",5),e(67,`
1673            `),c(68,"line",6),e(69,`
1674            `),c(70,"line",7),e(71,`
1675            `),c(72,"polyline",8),e(73,`
1676            `),c(74,"polyline",9),e(75,`
1677        `),t(),e(76,`
1678    `),t(),e(77,`
1679    `),oa(),n(78,"p",10),e(79,`
1680        `),c(80,"span",11),e(81,` WCAG
1681        `),c(82,"span",12),e(83),t(),e(84,`
1682
1683    `),n(85,"p",13),e(86,`
1684        `),v(87,Id,9,0)(88,Md,9,0),t(),e(89,`
1685`),t(),e(90,`
1686
1687`),n(91,"div",14),e(92,`
1688    `),n(93,"h3"),e(94,"How wrong, measured"),t(),e(95,`
1689    `),n(96,"app-sg-caption",2),e(97),t(),e(98,`
1690    `),n(99,"p",3),e(100,`
1691        The threshold error only ever ran one way. Luminance came out understated, so contrast
1692        `),n(101,"em"),e(102,"against light backgrounds was overstated"),t(),e(103,` \u2014 the check said "readable" when it
1693        was not. Against dark backgrounds it was understated, which is merely conservative.
1694    `),t(),e(104,`
1695
1696    `),n(105,"div",15),e(106,`
1697        `),c(107,"app-pill",16),e(108,`
1698        `),n(109,"p",17),e(110,`
1699            `),n(111,"strong"),e(112,"Correcting the threshold on its own makes this worse, not better."),t(),e(113,` The
1700            two flaws partly cancel: understating luminance makes the `),n(114,"code"),e(115,"#333333"),t(),e(116,` test
1701            `),n(117,"em"),e(118,"pass"),t(),e(119,` more often, which means black text more often, which is the right answer
1702            more often than it deserves to be. Correct the maths and that probe starts failing on
1703            mid-tones, handing back an unchecked `),n(120,"code"),e(121,"#fff"),t(),e(122,` \u2014 and the rate
1704            `),n(123,"strong"),e(124),L(125,"number"),L(126,"number"),t(),e(127,`. This was verified by
1705            applying the one-character fix and re-measuring, then reverting it.
1706        `),t(),e(128,`
1707        `),n(129,"p",18),e(130,`
1708            That was never an argument against fixing the threshold. It was the argument for
1709            `),n(131,"strong"),e(132,"shipping both halves of Tier 1 as one change"),t(),e(133),n(134,"strong"),e(135),L(136,"number"),t(),e(137,`. Keep this section:
1710            it is the reason the two can never be separated again.
1711        `),t(),e(138,`
1712    `),t(),e(139,`
1713    `),v(140,Dd,9,0),n(141,"div",19),e(142,`
1714        `),n(143,"div",20),e(144,`
1715            `),n(145,"h4",21),e(146,"Before Tier 1"),t(),e(147,`
1716            `),n(148,"p",22),e(149),L(150,"number"),t(),e(151,`
1717            `),n(152,"p",23),e(153,`
1718                Both flaws present. The wrong maths masked part of the wrong rule.
1719            `),t(),e(154,`
1720        `),t(),e(155,`
1721        `),n(156,"div",20),e(157,`
1722            `),n(158,"h4",21),e(159,"Threshold fixed only"),t(),e(160,`
1723            `),n(161,"p",24),e(162),L(163,"number"),t(),e(164,`
1724            `),n(165,"p",23),e(166,`
1725                The rule still tests `),n(167,"code"),e(168,"#333333"),t(),e(169," and never checks its "),n(170,"code"),e(171,"#fff"),t(),e(172,`
1726                fallback. `),n(173,"strong"),e(174,"Worse than leaving it alone."),t(),e(175,`
1727            `),t(),e(176,`
1728        `),t(),e(177,`
1729        `),n(178,"div",20),e(179,`
1730            `),n(180,"h4",21),e(181,"Both fixed \u2014 shipped"),t(),e(182,`
1731            `),n(183,"p",25),e(184),L(185,"number"),t(),e(186,`
1732            `),n(187,"p",23),e(188),L(189,"number"),t(),e(190,`
1733        `),t(),e(191,`
1734    `),t(),e(192,`
1735
1736    `),n(193,"div",26),e(194,`
1737        `),n(195,"div",20),e(196,`
1738            `),n(197,"h4",21),e(198,"Picks unreadable text"),t(),e(199,`
1739            `),n(200,"p",24),e(201),L(202,"number"),t(),e(203,`
1740            `),n(204,"p",23),e(205),n(206,"code"),e(207),t(),e(208,` \u2192
1741                `),n(209,"code"),e(210),t(),e(211),L(212,"number"),t(),e(213,`
1742        `),t(),e(214,`
1743        `),n(215,"div",20),e(216,`
1744            `),n(217,"h4",21),e(218,"Disagrees with WCAG"),t(),e(219,`
1745            `),n(220,"p",22),e(221),L(222,"number"),t(),e(223,`
1746            `),n(224,"p",23),e(225),n(226,"strong"),e(227),t(),e(228),t(),e(229,`
1747        `),t(),e(230,`
1748        `),n(231,"div",20),e(232,`
1749            `),n(233,"h4",21),e(234,"CTA hover text"),t(),e(235,`
1750            `),n(236,"p",25),e(237,"0%"),t(),e(238,`
1751            `),n(239,"p",23),e(240,`
1752                A separate defect with a simpler shape, fixed in Tier 1: the runtime wrote
1753                `),n(241,"code"),e(242,"--theme-color-cta-hover"),t(),e(243,` while the four CSS rules read
1754                `),n(244,"code"),e(245,"--theme-color-cta-buttons--hover"),t(),e(246,`. The names never met, so hover text was
1755                always `),n(247,"code"),e(248,"var(--brand-color)"),t(),e(249,` \u2014
1756                `),n(250,"strong"),e(251),L(252,"number"),t(),e(253,` on the
1757                white hover fill, for every club, regardless of their colour. The runtime now writes
1758                the name the CSS reads, solved against that fill.
1759            `),t(),e(254,`
1760        `),t(),e(255,`
1761    `),t(),e(256,`
1762
1763    `),n(257,"div",27),e(258,`
1764        `),c(259,"app-pill",28),e(260,`
1765        `),n(261,"p",29),e(262,`
1766            Swept over `),n(263,"strong"),e(264),t(),e(265),n(266,"code"),e(267,"contrastRatio"),t(),e(268,` differed from that
1767            reference on `),n(269,"strong"),e(270),t(),e(271,` colours.
1768            `),n(272,"code"),e(273,"contrastingTextColor"),t(),e(274," failed AA on "),n(275,"strong"),e(276),t(),e(277,`,
1769            floor `),n(278,"strong"),e(279),t(),e(280,` at
1770            `),n(281,"code"),e(282),t(),e(283,". "),n(284,"code"),e(285,"darkenHexColorUntilReadable"),t(),e(286,`
1771            failed on `),n(287,"strong"),e(288),t(),e(289,` against the white hover fill,
1772            floor `),n(290,"strong"),e(291),t(),e(292),n(293,"code"),e(294,"constants.spec.ts"),t(),e(295,`.
1773        `),t(),e(296,`
1774    `),t(),e(297,`
1775
1776    `),n(298,"p",30),e(299),n(300,"strong"),e(301),t(),e(302,` colours measured
1777        `),n(303,"strong"),e(304),t(),e(305,`
1778        as it ships, worst `),n(306,"strong"),e(307),t(),e(308,` at
1779        `),n(309,"code"),e(310),t(),e(311,"; "),n(312,"strong"),e(313),t(),e(314,` with the threshold corrected alone; and
1780        `),n(315,"strong"),e(316),t(),e(317,` with both halves done.
1781    `),t(),e(318,`
1782    `),n(319,"p",31),e(320),n(321,"strong"),e(322),t(),e(323),L(324,"number"),t(),e(325,`
1783`),t(),e(326,`
1784
1785`),n(327,"div",32),e(328,`
1786    `),n(329,"h3"),e(330,"Try a colour"),t(),e(331,`
1787    `),n(332,"app-sg-caption",33),e(333,"any colour a club can pick in the theme editor"),t(),e(334,`
1788    `),n(335,"div",34),e(336,`
1789        `),n(337,"label",35),e(338,"Background colour"),t(),e(339,`
1790        `),n(340,"input",36),M("ngModelChange",function(_){return w(x),I(o.demoHex,_)||(o.demoHex=_),C(_)}),t(),e(341,`
1791        `),n(342,"div",37),e(343,`
1792            `),S(344,Fd,6,3,null,null,K),t(),e(346,`
1793    `),t(),e(347,`
1794
1795    `),v(348,jd,78,32)(349,Gd,7,0),t(),e(350,`
1796
1797`),n(351,"div",38),e(352,`
1798    `),n(353,"h3"),e(354,"A second flaw, independent of the maths"),t(),e(355,`
1799    `),n(356,"app-sg-caption",2),e(357,"constants.ts:1089"),t(),e(358,`
1800    `),n(359,"p",3),e(360,`
1801        `),n(361,"code"),e(362,"contrastingTextColor()"),t(),e(363," tests "),n(364,"code"),e(365,"#333333"),t(),e(366,` against the background and
1802        then returns `),n(367,"code"),e(368,"#000"),t(),e(369," or "),n(370,"code"),e(371,"#fff"),t(),e(372,". "),n(373,"strong"),e(374,`It validates a colour it never
1803        renders`),t(),e(375,", and it never checks the "),n(376,"code"),e(377,"#fff"),t(),e(378,` fallback at all \u2014 when the
1804        `),n(379,"code"),e(380,"#333333"),t(),e(381,` test fails, white is returned on the assumption that white must be
1805        better, which is not true for mid-tones. Fixing the threshold alone would leave this in place.
1806    `),t(),e(382,`
1807    `),n(383,"p",3),e(384,`
1808        The proposed rule is to compare the two colours it can actually return and keep the better
1809        one. That is not just safer, it is `),n(385,"em"),e(386,"provably sufficient"),t(),e(387),n(388,"strong"),e(389),L(390,"number"),t(),e(391,` at
1810        `),n(392,"code"),e(393),t(),e(394,` \u2014 comfortably over the 4.5 bar. At full
1811        step-1 resolution the floor is `),n(395,"strong"),e(396),t(),e(397,`.
1812        `),n(398,"strong"),e(399,"No colour a club can pick can defeat a correct two-way check."),t(),e(400,`
1813    `),t(),e(401,`
1814    `),n(402,"p",3),e(403,`
1815        One more trap worth noting: it returns 3-digit hex. `),n(404,"code"),e(405,"contrastChecker"),t(),e(406,` rejects
1816        anything that is not exactly 7 characters, so its own output would fail its own gate if the
1817        two were ever composed.
1818    `),t(),e(407,`
1819
1820    `),n(408,"h4",39),e(409,"Where "),n(410,"code"),e(411,"#333333"),t(),e(412," came from"),t(),e(413,`
1821    `),n(414,"p",3),e(415,`
1822        It is not a design-system colour. The base text colour is
1823        `),n(416,"code"),e(417,"--grey-900: #2e3032"),t(),e(418,", and "),n(419,"code"),e(420,"#333333"),t(),e(421,` appears
1824        `),n(422,"strong"),e(423,"nowhere in the stylesheets"),t(),e(424," \u2014 the one "),n(425,"code"),e(426,"#333"),t(),e(427,` in the SCSS is
1825        in a GIF picker. Nothing the contrast decisions drive has ever rendered it. It got there by
1826        drift:
1827    `),t(),e(428,`
1828    `),n(429,"div",4),e(430,`
1829        `),n(431,"table",40),e(432,`
1830            `),n(433,"thead"),e(434,`
1831                `),n(435,"tr"),e(436,`
1832                    `),n(437,"th",41),e(438,"When"),t(),e(439,`
1833                    `),n(440,"th",42),e(441,"What"),t(),e(442,`
1834                    `),n(443,"th"),e(444,"\xA0"),t(),e(445,`
1835                `),t(),e(446,`
1836            `),t(),e(447,`
1837            `),n(448,"tbody"),e(449,`
1838                `),S(450,$d,14,3,null,null,md),t(),e(452,`
1839        `),t(),e(453,`
1840    `),t(),e(454,`
1841    `),n(455,"p",31),e(456,`
1842        The lesson in that table is not that anyone picked a bad colour \u2014 `),n(457,"code"),e(458,"#333333"),t(),e(459,`
1843        was a sensible probe for the question being asked in 2025. It is that
1844        `),n(460,"strong"),e(461,"the question changed and the probe did not"),t(),e(462,`. A boolean asking "would dark
1845        text work here?" became a function that returns the text colour, and the stand-in came along
1846        for the ride. It also shows the idea has surfaced before: in May 2026 the probe was pointed
1847        at the real text colour and reverted the same day. That commit changed the
1848        `),n(463,"code"),e(464,"needsContrast"),t(),e(465,` boolean at line 933 rather than the colour-picking path, and no
1849        reason for the revert is recorded \u2014 so read it as evidence the smell was noticed, not
1850        as a failed attempt at this fix.
1851    `),t(),e(466,`
1852`),t(),e(467,`
1853
1854`),n(468,"div",43),e(469,`
1855    `),n(470,"h3"),e(471),t(),e(472,`
1856    `),n(473,"app-sg-caption",2),e(474),t(),e(475,`
1857    `),n(476,"p",3),e(477,`
1858        The shape matters as much as the maths. A `),n(478,"strong"),e(479,"one-way"),t(),e(480,` site sets its variable
1859        only when the check fails and relies on the declared default otherwise \u2014 which is fine
1860        when the default happens to be the safe answer and a bug when it does not. That is exactly
1861        the defect fixed on the CTA button earlier today, and it is still present elsewhere.
1862    `),t(),e(481,`
1863    `),n(482,"div",4),e(483,`
1864        `),n(484,"table",44),e(485,`
1865            `),n(486,"thead"),e(487,`
1866                `),n(488,"tr"),e(489,`
1867                    `),c(490,"th",45),e(491,`
1868                    `),n(492,"th",46),e(493,"Site"),t(),e(494,`
1869                    `),n(495,"th",45),e(496,"Tests"),t(),e(497,`
1870                    `),n(498,"th",47),e(499,"Shape"),t(),e(500,`
1871                    `),n(501,"th"),e(502,"What it means"),t(),e(503,`
1872                `),t(),e(504,`
1873            `),t(),e(505,`
1874            `),n(506,"tbody"),e(507,`
1875                `),S(508,Jd,26,7,null,null,el),t(),e(510,`
1876        `),t(),e(511,`
1877    `),t(),e(512,`
1878`),t(),e(513,`
1879
1880`),n(514,"div",48),e(515,`
1881    `),n(516,"h3"),e(517),t(),e(518,`
1882    `),n(519,"app-sg-caption",33),e(520,"the club picks both colours; no code compares them"),t(),e(521,`
1883    `),n(522,"p",3),e(523,`
1884        These are different from the sites above. Nothing is computing a wrong answer \u2014 nothing
1885        is computing an answer. A club sets a background in one field and the text over it in
1886        another, and the two never meet. `),n(524,"strong"),e(525,`The agreed direction is to warn in the theme editor
1887        and keep the club's choice`),t(),e(526,`, not to override a deliberate brand decision at runtime.
1888    `),t(),e(527,`
1889    `),n(528,"div",4),e(529,`
1890        `),n(530,"table",40),e(531,`
1891            `),n(532,"thead"),e(533,`
1892                `),n(534,"tr"),e(535,`
1893                    `),n(536,"th",49),e(537,"Background field"),t(),e(538,`
1894                    `),n(539,"th",46),e(540,"Text drawn on it"),t(),e(541,`
1895                    `),n(542,"th"),e(543,"Where"),t(),e(544,`
1896                `),t(),e(545,`
1897            `),t(),e(546,`
1898            `),n(547,"tbody"),e(548,`
1899                `),S(549,Zd,15,3,null,null,cd),t(),e(551,`
1900        `),t(),e(552,`
1901    `),t(),e(553,`
1902`),t(),e(554,`
1903
1904`),n(555,"div",50),e(556,`
1905    `),n(557,"h3"),e(558,"The colour utilities around it"),t(),e(559,`
1906    `),n(560,"app-sg-caption",2),e(561,"constants.ts \u2014 the whole family, not just the contrast pair"),t(),e(562,`
1907    `),n(563,"p",3),e(564,`
1908        Four of these functions have four different ideas of what a valid hex colour is, and the one
1909        that would settle the argument is the one nothing calls.
1910    `),t(),e(565,`
1911    `),n(566,"div",4),e(567,`
1912        `),n(568,"table",44),e(569,`
1913            `),n(570,"thead"),e(571,`
1914                `),n(572,"tr"),e(573,`
1915                    `),c(574,"th",45),e(575,`
1916                    `),n(576,"th",51),e(577,"Function"),t(),e(578,`
1917                    `),n(579,"th",47),e(580,"Callers"),t(),e(581,`
1918                    `),n(582,"th"),e(583,"Problem"),t(),e(584,`
1919                `),t(),e(585,`
1920            `),t(),e(586,`
1921            `),n(587,"tbody"),e(588,`
1922                `),S(589,em,19,5,null,null,pd),t(),e(591,`
1923        `),t(),e(592,`
1924    `),t(),e(593,`
1925
1926    `),n(594,"h4",39),e(595,"hexToRgba, live"),t(),e(596,`
1927    `),n(597,"p",3),e(598,`
1928        The swatch below each result is filled with the string the shipped function returned. Two of
1929        the four are invalid CSS, so the browser drops the declaration and the swatch renders empty
1930        \u2014 which is precisely how a page-background overlay disappears without an error anywhere.
1931    `),t(),e(599,`
1932    `),n(600,"div",19),e(601,`
1933        `),S(602,tm,13,4,null,null,xd),t(),e(604,`
1934
1935    `),n(605,"h4",39),e(606,"The four notions of a valid hex"),t(),e(607,`
1936    `),n(608,"div",4),e(609,`
1937        `),n(610,"table",40),e(611,`
1938            `),n(612,"thead"),e(613,`
1939                `),n(614,"tr"),e(615,`
1940                    `),n(616,"th",52),e(617,"Input"),t(),e(618,`
1941                    `),n(619,"th",53),e(620,"contrastChecker"),t(),e(621,`
1942                    `),n(622,"th",52),e(623,"hexColorToArray"),t(),e(624,`
1943                    `),n(625,"th"),e(626,"hexToRgba"),t(),e(627,`
1944                `),t(),e(628,`
1945            `),t(),e(629,`
1946            `),n(630,"tbody"),e(631,`
1947                `),S(632,nm,17,4,null,null,K),t(),e(634,`
1948        `),t(),e(635,`
1949    `),t(),e(636,`
1950    `),n(637,"p",23),e(638,`
1951        `),n(639,"code"),e(640,"#ffffff0"),t(),e(641,` is the colour picker's "no colour" sentinel, and it is a real value
1952        stored on real themes. Note that a missing colour reads as `),n(642,"em"),e(643,"passing"),t(),e(644,` while a perfectly
1953        valid `),n(645,"code"),e(646,"#fff"),t(),e(647," reads as "),n(648,"em"),e(649,"failing"),t(),e(650,`.
1954    `),t(),e(651,`
1955
1956    `),n(652,"h4",39),e(653,"darkenHexColor, live"),t(),e(654,`
1957    `),n(655,"p",54),e(656,`
1958        `),n(657,"code"),e(658,"darkenHexColor('#ffffff', 0.9)"),t(),e(659," returns "),n(660,"code"),e(661),t(),e(662,` \u2014
1959        valid CSS, but fractional and in a format no other helper in the file can read back.
1960        And with a 3-digit hex:
1961    `),t(),e(663,`
1962    `),n(664,"p",18),e(665,`
1963        `),v(666,im,6,1)(667,am,6,1),t(),e(668,`
1964`),t(),e(669,`
1965
1966`),n(670,"div",55),e(671,`
1967    `),n(672,"h3"),e(673,"The other half of the system: "),n(674,"code"),e(675,"needs-contrast"),t()(),e(676,`
1968    `),n(677,"app-sg-caption",2),e(678,"one decision, five mechanisms"),t(),e(679,`
1969    `),n(680,"p",3),e(681,`
1970        Everything above is the `),n(682,"strong"),e(683,"token"),t(),e(684," half \u2014 a "),n(685,"code"),e(686,"--*-contrast"),t(),e(687,`
1971        variable carrying a computed colour. There is a second, parallel half that answers the same
1972        question with a `),n(688,"strong"),e(689,"boolean"),t(),e(690,`, and nothing connects the two.
1973    `),t(),e(691,`
1974    `),n(692,"div",4),e(693,`
1975        `),n(694,"table",44),e(695,`
1976            `),n(696,"thead"),e(697,`
1977                `),n(698,"tr"),e(699,`
1978                    `),c(700,"th",45),e(701,`
1979                    `),n(702,"th",49),e(703,"Where"),t(),e(704,`
1980                    `),n(705,"th",45),e(706,"Tests"),t(),e(707,`
1981                    `),n(708,"th",53),e(709,"Mechanism"),t(),e(710,`
1982                    `),n(711,"th"),e(712,"What it does"),t(),e(713,`
1983                `),t(),e(714,`
1984            `),t(),e(715,`
1985            `),n(716,"tbody"),e(717,`
1986                `),S(718,rm,21,5,null,null,el),t(),e(720,`
1987        `),t(),e(721,`
1988    `),t(),e(722,`
1989    `),n(723,"p",3),e(724,`
1990        Four different tested foregrounds, two opposite directions, two different blacks, class
1991        `),n(725,"em"),e(726,"and"),t(),e(727," CSS variable, "),n(728,"code"),e(729,"needsContrast"),t(),e(730," "),n(731,"em"),e(732,"and"),t(),e(733,`
1992        `),n(734,"code"),e(735,"needs-contrast"),t(),e(736,`, plus one variable that documents its own disuse.
1993    `),t(),e(737,`
1994    `),n(738,"p",3),e(739,`
1995        The reason it drifted is in the name. `),n(740,"strong")(741,"code"),e(742,"needs-contrast"),t(),e(743,` means "not the
1996        default" without saying what the default was or what to switch to`),t(),e(744,` \u2014 so its
1997        meaning is set by whichever component it lands in. On the roster card it means
1998        `),n(745,"em"),e(746,"go dark"),t(),e(747,"; on the header it means "),n(748,"em"),e(749,"go light"),t(),e(750,`. Both are "needs contrast". A
1999        boolean cannot carry the difference, so nothing can be shared and every new surface
2000        reinvents it \u2014 which is exactly how one of the three siblings ended up on
2001        `),n(751,"code"),e(752,"--color-black"),t(),e(753," while the other two use "),n(754,"code"),e(755,"--color-black-lt"),t(),e(756,`.
2002    `),t(),e(757,`
2003    `),n(758,"p",31),e(759,`
2004        It should not be made consistent \u2014 it should mostly be `),n(760,"strong"),e(761,"deleted"),t(),e(762,`. The
2005        token approach subsumes it: a boolean can only flip to the single alternative a stylesheet
2006        hardcoded, while a token carries the actual computed colour, and a component that reads
2007        `),n(763,"code"),e(764,"var(--x-contrast)"),t(),e(765,` needs no boolean at all. That is Tier 5, and it is mostly
2008        removal: four components, roughly eight SCSS rules and two dead variables.
2009    `),t(),e(766,`
2010`),t(),e(767,`
2011
2012`),n(768,"div",56),e(769,`
2013    `),n(770,"h3"),e(771,"Dead and broken nearby"),t(),e(772,`
2014    `),n(773,"app-sg-caption",2),e(774,"found while tracing the call sites above"),t(),e(775,`
2015    `),n(776,"div",4),e(777,`
2016        `),n(778,"table",44),e(779,`
2017            `),n(780,"thead"),e(781,`
2018                `),n(782,"tr"),e(783,`
2019                    `),c(784,"th",45),e(785,`
2020                    `),n(786,"th",57),e(787,"Thing"),t(),e(788,`
2021                    `),n(789,"th"),e(790,"State"),t(),e(791,`
2022                `),t(),e(792,`
2023            `),t(),e(793,`
2024            `),n(794,"tbody"),e(795,`
2025                `),S(796,om,14,3,null,null,hd),t(),e(798,`
2026        `),t(),e(799,`
2027    `),t(),e(800,`
2028`),t(),e(801,`
2029
2030`),n(802,"div",58),e(803,`
2031    `),n(804,"h3"),e(805,"The mobile fork"),t(),e(806,`
2032    `),n(807,"app-sg-caption",2),e(808,"one colour, two decisions"),t(),e(809,`
2033    `),n(810,"p",3),e(811,`
2034        The mobile app carries its own copy of the same maths at `),n(812,"code"),e(813),t(),e(814,`, with
2035        the same `),n(815,"code"),e(816),t(),e(817,`. It is a narrow surface: mobile reads exactly one
2036        club colour, `),n(818,"code"),e(819,"colorPrimary"),t(),e(820,`, in exactly two places.
2037    `),t(),e(821,`
2038    `),n(822,"ul",3),e(823,`
2039        `),S(824,lm,5,1,null,null,K),t(),e(826,`
2040    `),n(827,"p",3),e(828,`
2041        A third usage at `),n(829,"code"),e(830),t(),e(831,` is commented out. Everything else in
2042        that app is Ionic theming rather than club colour. The irony worth recording:
2043        `),n(832,"strong")(833,"code"),e(834,"colorPrimary"),t(),e(835,` is the field this styleguide already lists as dead on
2044        web`),t(),e(836,` \u2014 zero CSS consumers here, and the only one mobile depends on.
2045    `),t(),e(837,`
2046    `),n(838,"p",31),e(839,`
2047        The two forks also disagree on malformed input: web returns `),n(840,"code"),e(841,"false"),t(),e(842,` for a
2048        wrong-length string, mobile returns `),n(843,"code"),e(844,"true"),t(),e(845,`. Worth knowing:
2049        `),n(846,"code"),e(847,"CLAUDE.md"),t(),e(848," documents the mobile repo at "),n(849,"code"),e(850),t(),e(851,`,
2050        which does not exist \u2014 it is at `),n(852,"code"),e(853),t(),e(854,`. A cross-client
2051        grep at the documented path finds nothing and reports a false all-clear.
2052    `),t(),e(855,`
2053`),t(),e(856,`
2054
2055`),n(857,"div",59),e(858,`
2056    `),n(859,"h3"),e(860,"What fixing it looks like"),t(),e(861,`
2057    `),n(862,"app-sg-caption",2),e(863,"proposed \u2014 no decision taken"),t(),e(864,`
2058    `),n(865,"p",3),e(866,`
2059        The tiers are ordered by how much each depends on the one before it. Tier 1 stands alone and
2060        is where all the measured harm is; each later tier is progressively more about hygiene than
2061        about what a member sees.
2062    `),t(),e(867,`
2063    `),n(868,"div",4),e(869,`
2064        `),n(870,"table",40),e(871,`
2065            `),n(872,"thead"),e(873,`
2066                `),n(874,"tr"),e(875,`
2067                    `),n(876,"th",53),e(877,"Tier"),t(),e(878,`
2068                    `),n(879,"th"),e(880,"Contents"),t(),e(881,`
2069                    `),n(882,"th",57),e(883,"What it buys"),t(),e(884,`
2070                `),t(),e(885,`
2071            `),t(),e(886,`
2072            `),n(887,"tbody"),e(888,`
2073                `),S(889,sm,14,3,null,null,ud),t(),e(891,`
2074        `),t(),e(892,`
2075    `),t(),e(893,`
2076    `),n(894,"p",31),e(895,`
2077        `),n(896,"strong"),e(897,"Tier 1 must ship as one change."),t(),e(898,` Its two halves cancel in the wrong
2078        direction if separated \u2014 the figures above were taken by applying the threshold fix
2079        alone and watching the rate rise. One item is independent of all of it and cheap: the
2080        `),n(899,"code"),e(900,"+t?.pageOverlayColor"),t(),e(901,` guard in the page-builder editor, which is hiding every
2081        author's background overlay.
2082    `),t(),e(902,`
2083`),t(),e(903,`
2084
2085`),n(904,"div",60),e(905,`
2086    `),n(906,"h3"),e(907,"Verdict legend"),t(),e(908,`
2087    `),c(909,"app-sg-verdict-legend"),e(910,`
2088`),t(),e(911,`
2089`)}s&2&&(i(10),q("audited ",o.snapshotDate," \u2014 Tier 1 shipped ",o.tier1FixedOn," \u2014 the page measures the code live, so it tracks what is fixed"),i(3),f(`
2090        Every contrast decision in the app runs through one function, and that function was wrong
2091        from the day it was written until `,o.tier1FixedOn,`. This page measures how wrong, shows the
2092        elements it drives, and sets out what remains. `),i(11),y(o.inHalfFixedState?24:-1),i(15),y(o.shippedStillWrong?39:40),i(7),p(o.legacyCrossover),i(3),p(o.wcagCrossover),i(),Ve(`. Bytes
2093        `,o.wcagCrossover+1,"\u2013",o.legacyCrossover,` \u2014 most of the dark half of every
2094        ramp \u2014 are linearized with the cheap branch and come out far too dark. At byte
2095        `,o.worstChannel.byte,` the code reports
2096        `),i(2),p(G(53,87,o.worstChannel.legacy,"1.5-5")),i(4),p(G(57,90,o.worstChannel.wcag,"1.5-5")),i(4),f("",G(61,93,o.worstChannel.factor,"1.1-1"),"\xD7 too dark"),i(6),pe("viewBox","0 0 "+o.chart.width+" "+o.chart.height)("width",o.chart.width)("height",o.chart.height),i(2),pe("y1",o.chart.height)("x2",o.chart.width)("y2",o.chart.height),i(2),pe("x1",o.legacyCrossover/255*o.chart.width)("x2",o.legacyCrossover/255*o.chart.width)("y2",o.chart.height),i(2),pe("points",o.wcagPlot),i(2),pe("points",o.legacyPlot),i(9),Ve(" the ",o.LEGACY_THRESHOLD,` curve
2097        \u2014 the gap between them, from byte `,o.wcagCrossover," to byte ",o.legacyCrossover,`, was the defect.
2098        Note the discontinuity where the legacy curve jumps back onto the correct one.
2099    `),i(4),y(o.shippedStillWrong?87:88),i(10),q("swept live in your browser \u2014 ",o.sweep.total," colours, every ",o.SWEEP_STEP,"th step of the cube"),i(27),q("rises from ",G(125,96,o.legacyUnreadablePercent,"1.1-1"),`% to
2100            `,G(126,99,o.halfFixedUnreadablePercent,"1.1-1"),"%"),i(9),f(`, which is what happened on
2101            `,o.tier1FixedOn,` and takes it to
2102            `),i(2),f("",G(136,102,o.bothFixedUnreadablePercent,"1.1-1"),"%"),i(5),y(o.inHalfFixedState?140:-1),i(9),f("",G(150,105,o.legacyUnreadablePercent,"1.1-1"),"%"),i(13),f("",G(163,108,o.halfFixedUnreadablePercent,"1.1-1"),"%"),i(22),f("",G(185,111,o.bothFixedUnreadablePercent,"1.1-1"),"%"),i(4),f(`
2103                Best-of black/white, which cannot drop below
2104                `,G(189,114,o.sweep.bestOfWorst,"1.2-2"),`:1.
2105            `),i(13),f("",G(202,117,o.unreadablePercent,"1.1-1"),"%"),i(4),q(`
2106                `,o.sweep.unreadable," of ",o.sweep.total,` colours get a text colour that fails real
2107                WCAG AA. Worst: `),i(2),p(o.sweep.worstColor),i(3),p(o.sweep.worstPick),i(),f(" at ",G(212,120,o.sweep.worstRatio,"1.2-2"),`:1.
2108            `),i(10),f("",G(222,123,o.disagreePercent,"1.1-1"),"%"),i(4),f(`
2109                `,o.sweep.disagree,` colours where the shipped rule and a correct one pick different
2110                text. `),i(2),f("",o.sweep.unsafe," of those are unsafe"),i(),f(` and
2111                `,o.sweep.safe,` are merely conservative.
2112            `),i(23),f("",G(252,126,o.trueRatio(o.brandColor,"#ffffff"),"1.2-2"),":1"),i(13),f("every one of the ",o.shippedSweep.total," colours"),i(),f(` on
2113            `,o.tier1FixedOn,`, executing the shipped functions rather than a copy of them, against a
2114            WCAG reference implemented separately. `),i(5),p(o.shippedSweep.ratioDrift),i(6),p(o.shippedSweep.textFails),i(3),f("",o.shippedSweep.textFloor,":1"),i(3),p(o.shippedSweep.textFloorColor),i(6),p(o.shippedSweep.hoverFails),i(3),f("",o.shippedSweep.hoverFloor,":1"),i(),f(". The step-",o.SWEEP_STEP,` form of
2115            the same two sweeps is pinned in `),i(7),f(`
2116        The sweep above samples every `,o.SWEEP_STEP,`th value so it can run on page load. A full
2117        step-1 sweep of all `),i(2),p(o.fullSweep.total),i(3),q("",o.fullSweep.unreadable," unreadable (",o.fullSweep.unreadablePercent,"%)"),i(3),f("",o.fullSweep.worstRatio,":1"),i(3),p(o.fullSweep.worstColor),i(3),q("",o.fullSweep.halfFixed,`
2118        (`,o.fullSweep.halfFixedPercent,"%)"),i(3),p(o.fullSweep.bothFixed),i(4),f(`
2119        The proposed hover solver, swept live here against every one of the `,o.sweep.total,`
2120        colours, fails `),i(2),p(o.sweep.hoverFails),i(),f(` times \u2014 its worst result is
2121        `,G(324,129,o.sweep.hoverWorst,"1.2-2"),`:1, because it iterates until it clears the bar
2122        instead of guessing once.
2123    `),i(17),T("ngModel",o.demoHex),i(4),E(o.presets),i(4),y(o.demoValid?348:349),i(39),f(`: swept live here, the worst
2124        case of best-of-black-or-white across all `,o.sweep.total,` colours is
2125        `),i(2),f("",G(390,132,o.sweep.bestOfWorst,"1.2-2"),":1"),i(4),p(o.sweep.bestOfWorstColor),i(3),f("",o.fullSweep.bestOfWorst,":1"),i(54),E(o.probeHistory),i(21),f("Where the answer is used \u2014 ",o.callSites.length," sites"),i(3),f("",o.oneWayCount," of them write only one branch and lean on a CSS default for the other"),i(34),E(o.callSites),i(9),f("",o.pairs.length," pairs nothing checks at all"),i(32),E(o.pairs),i(40),E(o.utilities),i(13),E(o.rgbaDemos),i(30),E(o.validityMatrix),i(29),p(o.darkenDemo),i(5),y(o.darkenThrows.threw?666:667),i(52),E(o.needsContrastRows),i(78),E(o.deadThings),i(17),p(o.mobile.file),i(3),p(o.LEGACY_THRESHOLD),i(8),E(o.mobile.callSites),i(6),p(o.mobile.commentedOut),i(20),p(o.mobile.documentedPath),i(3),p(o.mobile.actualPath),i(36),E(o.tiers))},dependencies:[De,be,U,H,$,J,X,ve,we,Ye],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var Ui=(a,r)=>r.token,dm=(a,r)=>r.className,mm=(a,r)=>r.hex;function cm(a,r){a&1&&(e(0,`
2126                            `),n(1,"span",30),e(2,"(not for text)"),t(),e(3,`
2127                        `))}function pm(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
2128                            `,l.aliases,`
2129                        `)}}function xm(a,r){a&1&&(e(0,`
2130                            `),n(1,"span",31),e(2,"\u2014"),t(),e(3,`
2131                        `))}function hm(a,r){if(a&1&&(e(0,`
2132                `),n(1,"tr"),e(2,`
2133                    `),n(3,"td"),c(4,"span",29),t(),e(5,`
2134                    `),n(6,"td")(7,"code"),e(8),t()(),e(9,`
2135                    `),n(10,"td")(11,"code"),e(12),t()(),e(13,`
2136                    `),n(14,"td"),e(15),t(),e(16,`
2137                    `),n(17,"td"),e(18),v(19,cm,4,0),t(),e(20,`
2138                    `),n(21,"td",24),e(22,`
2139                        `),v(23,pm,1,1)(24,xm,4,0),t(),e(25,`
2140                `),t(),e(26,`
2141            `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(4),p(l.token),i(4),p(l.hex),i(3),p(l.uses),i(3),f(`
2142                        `,l.onWhite,`:1
2143                        `),i(),y(l.onWhite<4.5?19:-1),i(4),y(l.aliases?23:24)}}function um(a,r){if(a&1&&(e(0,`
2144                `),n(1,"tr"),e(2,`
2145                    `),n(3,"td"),c(4,"span",29),t(),e(5,`
2146                    `),n(6,"td")(7,"code"),e(8),t()(),e(9,`
2147                    `),n(10,"td")(11,"span"),e(12,"Reserve your spot"),t()(),e(13,`
2148                    `),n(14,"td",24)(15,"code"),e(16),t()(),e(17,`
2149                    `),n(18,"td"),e(19),t(),e(20,`
2150                    `),n(21,"td"),e(22),t(),e(23,`
2151                    `),n(24,"td",24),e(25),t(),e(26,`
2152                `),t(),e(27,`
2153            `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(4),f(".",l.className),i(3),ne(l.className),i(5),p(l.token),i(3),p(l.uses),i(3),f("",l.onWhite,":1"),i(3),p(l.role)}}function gm(a,r){a&1&&(e(0,`
2154                            `),n(1,"app-pill",32),e(2,"suspect"),t(),e(3,`
2155                        `))}function fm(a,r){if(a&1&&(e(0,`
2156                `),n(1,"tr"),e(2,`
2157                    `),n(3,"td"),c(4,"span",29),t(),e(5,`
2158                    `),n(6,"td"),e(7,`
2159                        `),n(8,"code"),e(9),t(),e(10,`
2160                        `),v(11,gm,4,0),t(),e(12,`
2161                    `),n(13,"td",24)(14,"code"),e(15),t()(),e(16,`
2162                    `),n(17,"td",24)(18,"code"),e(19),t()(),e(20,`
2163                    `),n(21,"td"),e(22),t(),e(23,`
2164                    `),n(24,"td",24),e(25),t(),e(26,`
2165                `),t(),e(27,`
2166            `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(5),p(l.token),i(2),y(l.suspect?11:-1),i(4),p(l.resolvesTo),i(4),p(l.hex),i(3),p(l.uses),i(3),p(l.note)}}function bm(a,r){if(a&1&&(e(0,`
2167                `),n(1,"tr"),e(2,`
2168                    `),n(3,"td"),c(4,"span",29),t(),e(5,`
2169                    `),n(6,"td")(7,"code"),e(8),t()(),e(9,`
2170                    `),n(10,"td",24)(11,"code"),e(12),t()(),e(13,`
2171                    `),n(14,"td",24)(15,"code"),e(16),t()(),e(17,`
2172                    `),n(18,"td",24),e(19),t(),e(20,`
2173                `),t(),e(21,`
2174            `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(4),p(l.token),i(4),p(l.resolvesTo),i(4),p(l.hex),i(3),p(l.drives)}}function Sm(a,r){a&1&&(e(0,`
2175                            `),n(1,"app-pill",33),e(2,"text fails"),t(),e(3,`
2176                        `))}function Em(a,r){if(a&1&&(e(0,`
2177                `),n(1,"tr"),e(2,`
2178                    `),n(3,"td"),c(4,"span",29),t(),e(5,`
2179                    `),n(6,"td")(7,"code"),e(8),t()(),e(9,`
2180                    `),n(10,"td",24),e(11),t(),e(12,`
2181                    `),n(13,"td"),e(14),t(),e(15,`
2182                    `),n(16,"td"),e(17),t(),e(18,`
2183                    `),n(19,"td"),e(20),v(21,Sm,4,0),t(),e(22,`
2184                    `),n(23,"td"),c(24,"span",29),t(),e(25,`
2185                    `),n(26,"td",24)(27,"code"),e(28),t()(),e(29,`
2186                `),t(),e(30,`
2187            `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(4),p(l.hex),i(3),p(l.origin),i(3),p(l.decls),i(3),p(l.files),i(3),f(`
2188                        `,l.onWhite,`:1
2189                        `),i(),y(l.onWhite<4.5?21:-1),i(3),W("background-color",l.nearestHex),i(4),p(l.nearest)}}var rl=(()=>
2189{let r=class r{constructor(d){this.siteDataService=d,this.snapshotDate="2026-08-19",this.ramp=[{token:"--blue-25",hex:"#f8fcff",uses:14,aliases:"",onWhite:1.03},{token:"--blue-50",hex:"#ebf7ff",uses:24,aliases:"--light-blue-background \xB7 alert info fill",onWhite:1.11},{token:"--blue-75",hex:"#c9ebff",uses:5,aliases:"",onWhite:1.32},{token:"--blue-100",hex:"#bae5ff",uses:9,aliases:"",onWhite:1.41},{token:"--blue-200",hex:"#92d2ff",uses:8,aliases:"",onWhite:1.72},{token:"--blue-300",hex:"#6fbdff",uses:5,aliases:"",onWhite:2.09},{token:"--blue-400",hex:"#51a8ff",uses:4,aliases:"",onWhite:2.52},{token:"--blue-500",hex:"#3a93ff",uses:11,aliases:"",onWhite:3.06},{token:"--blue-600",hex:"#297ef4",uses:21,aliases:"",onWhite:3.83},{token:"--blue-700",hex:"#1d6ae5",uses:23,aliases:"--primary-link \xB7 --border-blue \xB7 $btn-primary",onWhite:4.95},{token:"--blue-800",hex:"#0e58bb",uses:23,aliases:"--primary-link-hover \xB7 .text-header-blue \xB7 alert info icon",onWhite:6.7},{token:"--blue-900",hex:"#054584",uses:33,aliases:".text-blue \xB7 --base-text-alt-lt \xB7 --002d73 \xB7 alert info border",onWhite:9.59},{token:"--blue-950",hex:"#001d46",uses:3,aliases:"",onWhite:15.9},{token:"--blue-1000",hex:"#001537",uses:104,aliases:".text-navy \xB7 --base-text-alt \xB7 --base-header \xB7 header-emphasis",onWhite:18.07},{token:"--blue-1500",hex:"#000c24",uses:2,aliases:"",onWhite:19.51},{token:"--blue-2000",hex:"#00040f",uses:2,aliases:"",onWhite:20.63}],this.aliases=[{token:"--primary-link",resolvesTo:"--blue-700",hex:"#1d6ae5",uses:121,note:"The link color. Also the bare <a> color and $btn-primary.",suspect:!1},{token:"--primary-link-hover",resolvesTo:"--blue-800",hex:"#0e58bb",uses:48,note:"Link hover, and every PrimeNG hover we hand-patched.",suspect:!1},{token:"--002d73",resolvesTo:"--blue-900",hex:"#054584",uses:20,note:"Named after a hex it no longer holds \u2014 #002d73 is a DIFFERENT blue.",suspect:!0},{token:"--border-blue",resolvesTo:"--blue-700",hex:"#1d6ae5",uses:10,note:"Duplicate of --primary-link at a different name.",suspect:!0},{token:"--light-blue-background",resolvesTo:"--blue-50",hex:"#ebf7ff",uses:7,note:"Same value as the inline-alert info fill.",suspect:!1},{token:"--base-text-alt",resolvesTo:"--blue-1000",hex:"#001537",uses:6,note:"Same value as --base-header and .text-navy.",suspect:!0},{token:"--base-header",resolvesTo:"--blue-1000",hex:"#001537",uses:5,note:"Same value as --base-text-alt and .text-navy.",suspect:!0},{token:"--base-text-alt-lt",resolvesTo:"--blue-900",hex:"#054584",uses:2,note:"Same value as .text-blue and --002d73.",suspect:!0}],this.blueText=[{className:"text-primary-link",token:"--primary-link (--blue-700)",hex:"#1d6ae5",uses:147,onWhite:4.95,role:"Looks like a link. Mostly on non-anchors \u2014 73 buttons, 47 spans, 10 icons, only 6 anchors."},{className:"text-blue",token:"--blue-900",hex:"#054584",uses:31,onWhite:9.59,role:"The info intent color. Four ramp steps away from the link color."},{className:"text-navy",token:"--blue-1000 !important",hex:"#001537",uses:59,onWhite:18.07,role:"Heading-weight blue. Same value as --base-header, but reached by a different name."},{className:"text-header-blue",token:"--blue-800 @ .8 opacity",hex:"#0e58bb",uses:1,role:"Only class in the block that uses opacity to make a color.",onWhite:6.7}],this.foreign=[{hex:"#007bff",origin:"Bootstrap 4 $primary",decls:31,files:12,onWhite:3.98,nearest:"--blue-600 #297ef4",nearestHex:"#297ef4"},{hex:"#4f46e5",origin:"Tailwind indigo-600",decls:20,files:3,onWhite:6.29,nearest:"--blue-800 #0e58bb",nearestHex:"#0e58bb"},{hex:"#6366f1",origin:"Tailwind indigo-500",decls:7,files:1,onWhite:4.36,nearest:"--blue-700 #1d6ae5",nearestHex:"#1d6ae5"},{hex:"#e0e7ff",origin:"Tailwind indigo-100",decls:7,files:2,onWhite:1.2,nearest:"--blue-50 #ebf7ff",nearestHex:"#ebf7ff"},{hex:"#116fbf",origin:"one-off",decls:6,files:1,onWhite:5.24,nearest:"--blue-800 #0e58bb",nearestHex:"#0e58bb"},{hex:"#a5b4fc",origin:"Tailwind indigo-300",decls:5,files:1,onWhite:1.9,nearest:"--blue-200 #92d2ff",nearestHex:"#92d2ff"},{hex:"#4338ca",origin:"Tailwind indigo-700",decls:4,files:1,onWhite:8.09,nearest:"--blue-900 #054584",nearestHex:"#054584"},{hex:"#2196f3",origin:"Material blue 500",decls:4,files:3,onWhite:3.12,nearest:"--blue-600 #297ef4",nearestHex:"#297ef4"},{hex:"#e3f2fd",origin:"Material blue 50",decls:4,files:2,onWhite:1.14,nearest:"--blue-50 #ebf7ff",nearestHex:"#ebf7ff"}],this.foreignDecls=this.foreign.reduce((s,o)=>s+o.decls,0),this.primeRamp=[{token:"--p-primary-50",resolvesTo:"--blue-50",hex:"#ebf7ff",drives:"highlight.background \u2014 selected option / row / page"},{token:"--p-primary-100",resolvesTo:"--blue-100",hex:"#bae5ff",drives:"highlight.focusB
2189ackground, tag fill"},{token:"--p-primary-200",resolvesTo:"--blue-200",hex:"#92d2ff",drives:"dark scheme only"},{token:"--p-primary-300",resolvesTo:"--blue-400",hex:"#51a8ff",drives:"dark scheme only"},{token:"--p-primary-400",resolvesTo:"--blue-600",hex:"#297ef4",drives:"dark scheme primary.color"},{token:"--p-primary-500",resolvesTo:"--blue-700",hex:"#1d6ae5",drives:"primary.color \u2014 focus ring, form-field focus border, badge, tabs"},{token:"--p-primary-600",resolvesTo:"--blue-800",hex:"#0e58bb",drives:"primary.hoverColor"},{token:"--p-primary-700",resolvesTo:"--blue-900",hex:"#054584",drives:"primary.activeColor, highlight.color"},{token:"--p-primary-800",resolvesTo:"--blue-950",hex:"#001d46",drives:"highlight.focusColor"},{token:"--p-primary-900",resolvesTo:"--blue-1000",hex:"#001537",drives:"dark scheme only"},{token:"--p-primary-950",resolvesTo:"--blue-1500",hex:"#000c24",drives:"nothing consumes it"}]}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-sg-blues-and-links"]],standalone:!1,decls:542,vars:6,consts:[[1,"text-small","text-grey"],[3,"routerLink"],[1,"card"],["side","shared"],[1,"table","table-bordered","table-hover"],[2,"width","3rem"],[2,"width","9rem"],[2,"width","6rem"],[2,"width","5rem"],[2,"width","7rem"],[1,"bg-grey-lt","border-all","border-radius","p-3","text-medium","overflow-x-auto"],[1,"border-bottom","py-2"],[1,"row"],[1,"col-3","text-small","text-grey"],[1,"col"],["href","javascript:void(0)"],["width","20","height","20","alt","","src","data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20'%3E%3Crect width='20' height='20' fill='%239ea5aa'/%3E%3C/svg%3E"],[1,"text-small","text-grey","mb-0"],[2,"width","12rem"],[2,"width","16rem"],[2,"width","14rem"],[1,"mt-3"],[1,"d-flex","align-items-center","gap-3","flex-wrap","border-bottom","py-2"],[1,"sg-swatch","sg-swatch--lg",2,"background-color","#002d73"],[1,"text-small"],[1,"sg-swatch","sg-swatch--lg",2,"background-color","#054584"],[2,"width","10rem"],[2,"width","8rem"],[1,"text-medium"],[1,"sg-swatch"],[1,"text-grey-lt","text-small"],[1,"text-grey-lt"],["status","warning"],["status","error"]],template:function(s,o){s&1&&(n(0,"h2"),e(1,"Blues & Links"),t(),e(2,`
2190`),n(3,"p",0),e(4,`
2191    Every blue the app can render, and every way it says "this is a link." The trigger for this study
2192    was noticing that link blue, info blue, and heading blue are three unrelated values that arrived
2193    by three different routes.
2194`),t(),e(5,`
2195`),n(6,"p",0),e(7,`
2196    Counts are a grep snapshot of `),n(8,"code"),e(9,"ClientApp/src"),t(),e(10," taken "),n(11,"strong"),e(12),t(),e(13,`,
2197    styleguide excluded. Contrast is against white \u2014 the background the vast majority of this text
2198    sits on. Companion study:
2199    `),n(14,"a",1),e(15,"system alerts & colored text"),t(),e(16,`,
2200    which owns the `),n(17,"code"),e(18,"info"),t(),e(19,` intent.
2201`),t(),e(20,`
2202
2203`),n(21,"div",2),e(22,`
2204    `),n(23,"h3"),e(24,"1. The ramp"),t(),e(25,`
2205    `),n(26,"app-sg-caption",3),e(27,"1_base/variables.scss \u2014 #region Blue"),t(),e(28,`
2206    `),n(29,"p",0),e(30,`
2207        16 steps. Usage is heavily bimodal: `),n(31,"code"),e(32,"--blue-1000"),t(),e(33," (104) and "),n(34,"code"),e(35,"--blue-900"),t(),e(36,`
2208        (33) carry the headings, `),n(37,"code"),e(38,"--blue-700"),t(),e(39,"/"),n(40,"code"),e(41,"--blue-800"),t(),e(42,` carry links, and the
2209        entire 25\u2013400 range \u2014 6 steps \u2014 accounts for 65 uses of mostly backgrounds.
2210    `),t(),e(43,`
2211    `),n(44,"table",4),e(45,`
2212        `),n(46,"thead"),e(47,`
2213            `),n(48,"tr"),e(49,`
2214                `),c(50,"th",5),e(51,`
2215                `),n(52,"th",6),e(53,"Token"),t(),e(54,`
2216                `),n(55,"th",7),e(56,"Hex"),t(),e(57,`
2217                `),n(58,"th",8),e(59,"Uses"),t(),e(60,`
2218                `),n(61,"th",9),e(62,"On white"),t(),e(63,`
2219                `),n(64,"th"),e(65,"Also known as"),t(),e(66,`
2220            `),t(),e(67,`
2221        `),t(),e(68,`
2222        `),n(69,"tbody"),e(70,`
2223            `),S(71,hm,27,8,null,null,Ui),t(),e(73,`
2224    `),t(),e(74,`
2225`),t(),e(75,`
2226
2227`),n(76,"div",2),e(77,`
2228    `),n(78,"h3"),e(79,'2. What "link" means'),t(),e(80,`
2229    `),n(81,"app-sg-caption",3),e(82,"1_base/global.scss \u2014 /*Links and buttons*/"),t(),e(83,`
2230    `),n(84,"p",0),e(85,`
2231        There is exactly one global anchor rule, and it carries a `),n(86,"code"),e(87,":has()"),t(),e(88,` guard:
2232    `),t(),e(89,`
2233`),n(90,"pre",10),e(91,`a:not(:has(img)) {
2234    color: var(--primary-link);
2235    text-decoration: none;
2236}
2237a:hover {
2238    color: var(--primary-link-hover);
2239    text-decoration: underline;
2240}`),t(),e(92,`
2241    `),n(93,"p",0),e(94,`
2242        `),n(95,"strong"),e(96,"The guard is on the base rule but not on the hover rule."),t(),e(97,` An anchor wrapping
2243        an image is deliberately left un-recolored \u2014 then picks up link color and an underline the
2244        moment you hover it. The two rules disagree about whether image links are links.
2245    `),t(),e(98,`
2246    `),n(99,"div",11),e(100,`
2247        `),n(101,"div",12),e(102,`
2248            `),n(103,"div",13),e(104,"plain anchor"),t(),e(105,`
2249            `),n(106,"div",14)(107,"a",15),e(108,"Register for this program"),t()(),e(109,`
2250        `),t(),e(110,`
2251    `),t(),e(111,`
2252    `),n(112,"div",11),e(113,`
2253        `),n(114,"div",12),e(115,`
2254            `),n(116,"div",13),e(117,"anchor with an image"),t(),e(118,`
2255            `),n(119,"div",14)(120,"a",15),c(121,"img",16),e(122," hover me \u2014 the base rule skips this anchor, the hover rule does not"),t()(),e(123,`
2256        `),t(),e(124,`
2257    `),t(),e(125,`
2258    `),n(126,"p",17),e(127,`
2259        The source already carries the author's own note: `),n(128,"em"),e(129,`"this is too global \u2014 bumping into
2260        issues with this with primeng. we should refactor this as a BEM modifier and not a global
2261        definition."`),t(),e(130,`
2262    `),t(),e(131,`
2263`),t(),e(132,`
2264
2265`),n(133,"div",2),e(134,`
2266    `),n(135,"h3"),e(136,"3. Blue text classes"),t(),e(137,`
2267    `),n(138,"app-sg-caption",3),e(139,"1_base/modifiers.scss \u2014 #region Text Colors"),t(),e(140,`
2268    `),n(141,"p",0),e(142,`
2269        Four classes, four different blues, spanning `),n(143,"code"),e(144,"--blue-700"),t(),e(145,` to
2270        `),n(146,"code"),e(147,"--blue-1000"),t(),e(148,`. Samples carry the live class.
2271    `),t(),e(149,`
2272    `),n(150,"table",4),e(151,`
2273        `),n(152,"thead"),e(153,`
2274            `),n(154,"tr"),e(155,`
2275                `),c(156,"th",5),e(157,`
2276                `),n(158,"th",18),e(159,"Class"),t(),e(160,`
2277                `),n(161,"th"),e(162,"Sample"),t(),e(163,`
2278                `),n(164,"th",19),e(165,"Token"),t(),e(166,`
2279                `),n(167,"th",8),e(168,"Uses"),t(),e(169,`
2280                `),n(170,"th",7),e(171,"On white"),t(),e(172,`
2281                `),n(173,"th"),e(174,"Role"),t(),e(175,`
2282            `),t(),e(176,`
2283        `),t(),e(177,`
2284        `),n(178,"tbody"),e(179,`
2285            `),S(180,um,28,9,null,null,dm),t(),e(182,`
2286    `),t(),e(183,`
2287    `),n(184,"p",17),e(185,`
2288        `),n(186,"code"),e(187,".text-primary-link"),t(),e(188," duplicates the bare "),n(189,"code"),e(190,"<a>"),t(),e(191,` color, but 141 of
2289        its 147 usages are on `),n(192,"em"),e(193,"non-anchors"),t(),e(194,` \u2014 it is the "style this button/span as a link"
2290        class. That is a real need, and it already has a project:
2291        `),n(195,"strong"),e(196,"Btn-Anchor Style"),t(),e(197," proposes a shared "),n(198,"code"),e(199,"btn-anchor"),t(),e(200,` to replace the
2292        `),n(201,"code"),e(202,"btn-a11y text-primary-link text-medium"),t(),e(203,` combo.
2293    `),t(),e(204,`
2294`),t(),e(205,`
2295
2296`),n(206,"div",2),e(207,`
2297    `),n(208,"h3"),e(209,"4. Aliases \u2014 how many names does one blue get?"),t(),e(210,`
2298    `),n(211,"p",0),e(212,`
2299        `),n(213,"code"),e(214,"--blue-1000"),t(),e(215,` is reachable as three different token names plus a class.
2300        `),n(216,"code"),e(217,"--blue-900"),t(),e(218," as three. Renaming is not the problem; "),n(219,"em"),e(220,`not knowing which name is
2301        canonical`),t(),e(221,` is.
2302    `),t(),e(222,`
2303    `),n(223,"table",4),e(224,`
2304        `),n(225,"thead"),e(226,`
2305            `),n(227,"tr"),e(228,`
2306                `),c(229,"th",5),e(230,`
2307                `),n(231,"th",20),e(232,"Token"),t(),e(233,`
2308                `),n(234,"th",6),e(235,"Resolves to"),t(),e(236,`
2309                `),n(237,"th",7),e(238,"Hex"),t(),e(239,`
2310                `),n(240,"th",8),e(241,"Uses"),t(),e(242,`
2311                `),n(243,"th"),e(244,"Note"),t(),e(245,`
2312            `),t(),e(246,`
2313        `),t(),e(247,`
2314        `),n(248,"tbody"),e(249,`
2315            `),S(250,fm,28,8,null,null,Ui),t(),e(252,`
2316    `),t(),e(253,`
2317
2318    `),n(254,"h4",21)(255,"code"),e(256,"--002d73"),t(),e(257," \u2014 the name is a lie"),t(),e(258,`
2319    `),n(259,"p",0),e(260,`
2320        Declared under `),n(261,"em"),e(262,"Orphan Colors"),t(),e(263," as "),n(264,"code"),e(265,"--002d73: var(--blue-900); //#002d73"),t(),e(266,`.
2321        A token named after a hex literal is already a convention break; this one no longer even
2322        holds that hex. 20 stylesheets read it \u2014 the left nav, the calendar, program overview,
2323        page-builder content \u2014 all believing they are asking for `),n(267,"code"),e(268,"#002d73"),t(),e(269,`.
2324    `),t(),e(270,`
2325    `),n(271,"div",22),e(272,`
2326        `),c(273,"span",23),e(274,`
2327        `),n(275,"span",24)(276,"code"),e(277,"#002d73"),t(),e(278," \u2014 the name"),t(),e(279,`
2328        `),c(280,"span",25),e(281,`
2329        `),n(282,"span",24)(283,"code"),e(284,"#054584"),t(),e(285," \u2014 what it actually resolves to ("),n(286,"code"),e(287,"--blue-900"),t(),e(288,")"),t(),e(289,`
2330    `),t(),e(290,`
2331`),t(),e(291,`
2332
2333`),n(292,"div",2),e(293,`
2334    `),n(294,"h3"),e(295,"5. PrimeNG's primary is our blue ramp"),t(),e(296,`
2335    `),n(297,"app-sg-caption",3),e(298,"ng-theme.scss \xA71 (Base)"),t(),e(299,`
2336    `),n(300,"p",0),e(301,`
2337        The stock Aura preset's `),n(302,"code"),e(303,"primary"),t(),e(304,` palette is emerald, so
2338        `),n(305,"code"),e(306,"ng-theme.scss"),t(),e(307," repoints "),n(308,"code"),e(309,"--p-primary-50"),t(),e(310,"\u2026"),n(311,"code"),e(312,"950"),t(),e(313,` at our
2339        blues. Everything Aura derives from `),n(314,"code"),e(315),t(),e(316,` follows \u2014
2340        the global focus ring, form-field focus borders, highlight backgrounds, badges, tabs.
2341        Per-component `),n(317,"code"),e(318,"--p-*"),t(),e(319,` overrides are only for where we deliberately differ from
2342        Aura, so `),n(320,"strong"),e(321,"change the ramp, not a component token."),t(),e(322,`
2343    `),t(),e(323,`
2344    `),n(324,"table",4),e(325,`
2345        `),n(326,"thead"),e(327,`
2346            `),n(328,"tr"),e(329,`
2347                `),c(330,"th",5),e(331,`
2348                `),n(332,"th",18),e(333,"Aura token"),t(),e(334,`
2349                `),n(335,"th",26),e(336,"Ours"),t(),e(337,`
2350                `),n(338,"th",7),e(339,"Hex"),t(),e(340,`
2351                `),n(341,"th"),e(342,"Drives"),t(),e(343,`
2352            `),t(),e(344,`
2353        `),t(),e(345,`
2354        `),n(346,"tbody"),e(347,`
2355            `),S(348,bm,22,6,null,null,Ui),t(),e(350,`
2356    `),t(),e(351,`
2357    `),n(352,"p",17),e(353,`
2358        `),n(354,"code"),e(355,"500"),t(),e(356," and "),n(357,"code"),e(358,"600"),t(),e(359," are pinned to "),n(360,"code"),e(361,"--primary-link"),t(),e(362,` and
2359        `),n(363,"code"),e(364,"--primary-link-hover"),t(),e(365," so Aura's "),n(366,"code"),e(367,"primary.color"),t(),e(368,` /
2360        `),n(369,"code"),e(370,"hoverColor"),t(),e(371,` land on the two blues the rest of the app uses.
2361    `),t(),e(372,`
2362`),t(),e(373,`
2363
2364`),n(374,"div",2),e(375,`
2365    `),n(376,"h3"),e(377),t(),e(378,`
2366    `),n(379,"p",0),e(380,`
2367        Blues in component stylesheets that come from `),n(381,"em"),e(382,"other design systems"),t(),e(383,` \u2014 Bootstrap,
2368        Tailwind, Material \u2014 none of which is our ramp. Two of them fail 4.5:1 on white.
2369    `),t(),e(384,`
2370    `),n(385,"table",4),e(386,`
2371        `),n(387,"thead"),e(388,`
2372            `),n(389,"tr"),e(390,`
2373                `),c(391,"th",5),e(392,`
2374                `),n(393,"th",9),e(394,"Hex"),t(),e(395,`
2375                `),n(396,"th",20),e(397,"Where it's from"),t(),e(398,`
2376                `),n(399,"th",7),e(400,"Decls"),t(),e(401,`
2377                `),n(402,"th",8),e(403,"Files"),t(),e(404,`
2378                `),n(405,"th",27),e(406,"On white"),t(),e(407,`
2379                `),c(408,"th",5),e(409,`
2380                `),n(410,"th"),e(411,"Nearest step on our ramp"),t(),e(412,`
2381            `),t(),e(413,`
2382        `),t(),e(414,`
2383        `),n(415,"tbody"),e(416,`
2384            `),S(417,Em,31,11,null,null,mm),t(),e(419,`
2385    `),t(),e(420,`
2386    `),n(421,"p",17),e(422,`
2387        The Tailwind indigos cluster in the messaging components; Bootstrap's `),n(423,"code"),e(424,"#007bff"),t(),e(425,` is
2388        the most widespread at 12 files. All of it predates the ramp or was pasted in from a
2389        generated snippet.
2390    `),t(),e(426,`
2391`),t(),e(427,`
2392
2393`),n(428,"div",2),e(429,`
2394    `),n(430,"h3"),e(431,"7. Findings"),t(),e(432,`
2395    `),n(433,"ol",28),e(434,`
2396        `),n(435,"li"),e(436,`
2397            `),n(437,"strong")(438,"code"),e(439,"--002d73"),t(),e(440," is named after a hex it does not hold"),t(),e(441,` \u2014 \xA74. Named
2398            `),n(442,"code"),e(443,"#002d73"),t(),e(444,", resolves to "),n(445,"code"),e(446,"#054584"),t(),e(447,`, read by 20 stylesheets.
2399        `),t(),e(448,`
2400        `),n(449,"li"),e(450,`
2401            `),n(451,"strong"),e(452,"The anchor base rule and hover rule disagree"),t(),e(453,` \u2014 \xA72. The
2402            `),n(454,"code"),e(455,":not(:has(img))"),t(),e(456,` guard is on one and not the other, so image links are
2403            not links until you hover them.
2404        `),t(),e(457,`
2405        `),n(458,"li"),e(459,`
2406            `),n(460,"strong"),e(461),t(),e(462,` \u2014 \xA76. Bootstrap,
2407            Tailwind indigo, and Material blue all ship in the app; `),n(463,"code"),e(464,"#007bff"),t(),e(465,` (3.98:1) and
2408            `),n(466,"code"),e(467,"#2196f3"),t(),e(468,` (3.12:1) fail AA as text.
2409        `),t(),e(469,`
2410        `),n(470,"li"),e(471,`
2411            `),n(472,"strong"),e(473,"One color, many names."),t(),e(474," "),n(475,"code"),e(476,"--blue-1000"),t(),e(477,` answers to
2412            `),n(478,"code"),e(479,"--base-text-alt"),t(),e(480,", "),n(481,"code"),e(482,"--base-header"),t(),e(483,", "),n(484,"code"),e(485,".text-navy"),t(),e(486,` and
2413            `),n(487,"code"),e(488,"header-emphasis"),t(),e(489,"; "),n(490,"code"),e(491,"--blue-900"),t(),e(492," to "),n(493,"code"),e(494,".text-blue"),t(),e(495,`,
2414            `),n(496,"code"),e(497,"--base-text-alt-lt"),t(),e(498," and "),n(499,"code"),e(500,"--002d73"),t(),e(501,`. Nothing marks which is
2415            canonical.
2416        `),t(),e(502,`
2417        `),n(503,"li"),e(504,`
2418            `),n(505,"strong")(506,"code"),e(507,"--border-blue"),t(),e(508," is a straight duplicate of "),n(509,"code"),e(510,"--primary-link"),t()(),e(511,`
2419            \u2014 same value, different name, 10 consumers.
2420        `),t(),e(512,`
2421        `),n(513,"li"),e(514,`
2422            `),n(515,"strong"),e(516,"Link color and info color are four ramp steps apart"),t(),e(517,` \u2014
2423            `),n(518,"code"),e(519,".text-primary-link"),t(),e(520," is "),n(521,"code"),e(522,"--blue-700"),t(),e(523,", "),n(524,"code"),e(525,".text-blue"),t(),e(526,` is
2424            `),n(527,"code"),e(528,"--blue-900"),t(),e(529,`. Defensible (they mean different things) but undocumented, which
2425            is how `),n(530,"code"),e(531,".text-blue"),t(),e(532,` ends up used as a link color by mistake.
2426        `),t(),e(533,`
2427        `),n(534,"li"),e(535,`
2428            `),n(536,"strong"),e(537,"Six ramp steps (25\u2013400) serve 65 uses"),t(),e(538,` and none is safe for text. Worth
2429            asking whether the light end needs six steps or two.
2430        `),t(),e(539,`
2431    `),t(),e(540,`
2432`),t(),e(541,`
2433`)),s&2&&(i(12),p(o.snapshotDate),i(2),m("routerLink","/admin/styleguide/components/system-alerts"),i(57),E(o.ramp),i(109),E(o.blueText),i(70),E(o.aliases),i(65),q("","{","primary.*","}"),i(33),E(o.primeRamp),i(29),f("6. Foreign blue palettes (",o.foreignDecls," declarations)"),i(40),E(o.foreign),i(44),f("",o.foreignDecls," declarations use a foreign blue"))},dependencies:[$,J,X],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();
2433var ol=[{file:"app/shared/modules/page-builder-content/_styles/carousels.scss",label:"Page-builder carousels",component:"carousel",consumers:"video feed \xB7 scoreboard \xB7 image carousel \xB7 testimonials",targets:["p-carousel-indicators","p-carousel-next","p-carousel-prev","p-carousel-prev-icon","p-reset"],live:["p-carousel","p-carousel-content","p-carousel-indicator","p-highlight"]},{file:"app/shared/modules/page-builder-content/faq-content/faq-content.component.scss",label:"Public FAQ accordion",component:"accordion",consumers:"faq-content",targets:["p-accordion-header-link","p-accordion-toggle-icon"],live:["p-accordion","p-accordion-content","p-accordion-header","p-disabled","p-highlight"]},{file:"assets/css/sass/3_modules/components/calendar.scss",label:"Club calendar accordion",component:"accordion",consumers:"club-calendar",targets:["p-accordion-header-link"],live:["p-accordion","p-accordion-content","p-accordion-header","p-disabled","p-highlight"]},{file:"app/account/manage/requests/requests.component.scss",label:"Account \u2192 requests tabs",component:"tabs",consumers:"account/manage/requests",targets:["p-accordion-header-link","p-tabview","p-tabview-panels"],live:["p-accordion","p-accordion-content","p-accordion-header"]},{file:"app/admin/dashboard/staff-credentialing/staff-credentialing-panel.component.scss",label:"Staff credentialing select",component:"select",consumers:"admin dashboard panel",targets:["p-dropdown-item","p-dropdown-panel"],live:["p-dropdown-label"]},{file:"app/admin/shared/user/roles/roles.component.scss",label:"User roles filter select",component:"select",consumers:"admin/shared/user/roles",targets:["p-dropdown-filter","p-dropdown-filter-container","p-dropdown-header"],live:[]}];var ym=["probeMount"],wm=()=>["0"],Cm=()=>({"min-width":"14rem"}),_m=(a,r)=>r.file,km=(a,r)=>r.className;function Tm(a,r){if(a&1&&(e(0,`
2434            `),n(1,"span",7),e(2),t(),e(3,`
2435        `)),a&2){let l=u();i(2),f("measured live at ",l.probedAt)}}function Im(a,r){if(a&1&&(e(0,`
2436                            `),n(1,"div",23),e(2),t(),e(3,`
2437                        `)),a&2){let l=r.$implicit;i(2),p(l.title)}}function Mm(a,r){if(a&1&&(e(0,`
2438                    `),c(1,"app-pill",28),e(2,`
2439                `)),a&2){let l=u().$implicit;i(),m("text",l.liveRendered+" still matching")}}function Dm(a,r){if(a&1&&(e(0,`
2440                        `),n(1,"tr"),e(2,`
2441                            `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
2442                            `),n(7,"td"),e(8,`
2443                                `),c(9,"app-pill",5),e(10,`
2444                            `),t(),e(11,`
2445                        `),t(),e(12,`
2446                    `)),a&2){let l=r.$implicit,d=u(2);i(5),f(".",l.className),i(4),m("status",d.statusFor(l))("text",l.rendered?"matches":"no such element")}}function Fm(a,r){if(a&1&&(e(0,`
2447                        `),n(1,"code",30),e(2),t(),e(3,`
2448                    `)),a&2){let l=r.$implicit;i(2),f(".",l)}}function Pm(a,r){if(a&1&&(e(0,`
2449                `),n(1,"div",26),e(2,`
2450                    `),n(3,"strong"),e(4,"Named in the PrimeNG package but not rendered by this mount:"),t(),e(5,`
2451                    `),S(6,Fm,4,1,null,null,K),n(8,"span",29),e(9,`
2452                        Not automatically a defect \u2014 a panel that only exists while open cannot
2453                        appear in a static mount. But a name that survives only as a
2454                        `),n(10,"code"),e(11,"data-"),t(),e(12,` attribute or a back-compat rule lands here too, and the
2455                        census counts those as live. Open the component and re-probe before judging.
2456                    `),t(),e(13,`
2457                `),t(),e(14,`
2458            `)),a&2){let l=u().$implicit;i(6),E(l.liveNotSeen)}}function Am(a,r){if(a&1&&(e(0,`
2459                        `),n(1,"code",30),e(2),t(),e(3,`
2460                    `)),a&2){let l=r.$implicit;i(2),f(".",l)}}function Om(a,r){if(a&1&&(e(0,`
2461                `),n(1,"div",7),e(2,`
2462                    `),n(3,"strong"),e(4,"What "),n(5,"code"),e(6),t(),e(7,` renders instead, and no
2463                        rule in this file claims:`),t(),e(8,`
2464                    `),S(9,Am,4,1,null,null,K),t(),e(11,`
2465            `)),a&2){let l=u().$implicit;
2465i(6),f("<p-",l.component,">"),i(3),E(l.unclaimed)}}function Nm(a,r){if(a&1&&(e(0,`
2466        `),n(1,"div",24),e(2,`
2467            `),n(3,"div",25),e(4,`
2468                `),n(5,"strong"),e(6),t(),e(7,`
2469                `),c(8,"app-pill",5),e(9,`
2470                `),v(10,Mm,3,1),t(),e(11,`
2471            `),n(12,"div",26),e(13,`
2472                `),n(14,"code"),e(15),t(),e(16),t(),e(17,`
2473
2474            `),n(18,"table",27),e(19,`
2475                `),n(20,"thead"),e(21,`
2476                    `),n(22,"tr"),e(23,`
2477                        `),n(24,"th"),e(25,"Class the stylesheet targets"),t(),e(26,`
2478                        `),n(27,"th"),e(28,"Present in the rendered DOM?"),t(),e(29,`
2479                    `),t(),e(30,`
2480                `),t(),e(31,`
2481                `),n(32,"tbody"),e(33,`
2482                    `),S(34,Dm,13,3,null,null,km),t(),e(36,`
2483            `),t(),e(37,`
2484
2485            `),v(38,Pm,15,0),v(39,Om,12,1),t(),e(40,`
2486    `)),a&2){let l=r.$implicit;i(6),p(l.label),i(2),m("status",l.inert?"error":"success")("text",l.inert+" inert"),i(2),y(l.liveRendered?10:-1),i(5),p(l.file),i(),f(" \u2014 renders on ",l.consumers,`
2487            `),i(18),E(l.targets_),i(4),y(l.liveNotSeen.length?38:-1),i(),y(l.unclaimed.length?39:-1)}}var dl=(()=>{let r=class r{constructor(d,s){this.changeDetector=d,this.siteDataService=s,this.upgradeCommit="27d40a2cc5",this.upgradeDate="2026-05-19",this.surfaces=[],this.carouselItems=[{title:"Slide one"},{title:"Slide two"},{title:"Slide three"},{title:"Slide four"},{title:"Slide five"}],this.selectOptions=[{label:"Head coach",value:1},{label:"Assistant coach",value:2},{label:"Team manager",value:3},{label:"Volunteer",value:4}]}ngOnInit(){this.siteDataService.hideSiteLoader()}ngAfterViewInit(){this.probe()}probe(){let d=this.renderedVocabulary();this.surfaces=ol.map(s=>{let o=d.get(s.component)||new Set,x=s.targets.map(_=>({className:_,rendered:o.has(_)})),h=new Set([...s.targets,...s.live]);return ta(bt({},s),{targets_:x,inert:x.filter(_=>!_.rendered).length,liveRendered:s.live.filter(_=>o.has(_)).length,liveNotSeen:s.live.filter(_=>!o.has(_)).sort(),unclaimed:[...o].filter(_=>!h.has(_)).sort()})}),this.probedAt=new Date().toLocaleTimeString(),this.changeDetector.detectChanges()}renderedVocabulary(){let d=new Map;for(let o of this.mounts?.toArray()||[]){let x=o.nativeElement.dataset.probe,h=d.get(x)||new Set;this.collect(o.nativeElement,h),d.set(x,h)}let s=new Set;for(let o of Array.from(document.querySelectorAll('body > .p-overlay, body > [class*="-overlay"]')))this.collect(o,s);if(s.size)for(let o of d.keys())s.forEach(x=>d.get(o).add(x));return d}collect(d,s){for(let o of[d,...Array.from(d.querySelectorAll("*"))])o.classList.forEach(x=>{x.startsWith("p-")&&s.add(x)})}statusFor(d){return d.rendered?"success":"error"}get totalInert(){return this.surfaces.reduce((d,s)=>d+s.inert,0)}get totalTargets(){return this.surfaces.reduce((d,s)=>d+s.targets_.length,0)}};r.\u0275fac=function(s){return new(s||r)(A(Ke),A(R))}
vendor: 6,535 bytes, lines 2487-2594
2487,r.\u0275cmp=b({type:r,selectors:[["app-primeng-upgrade-debt"]],viewQuery:function(s,o){if(s&1&&$e(ym,5,Ce),s&2){let x;xe(x=he())&&(o.mounts=x)}},standalone:!1,decls:208,vars:18,consts:[["probeMount",""],["item",""],[1,"form-note"],["href","https://dev.azure.com","target","_blank","rel","noopener"],[1,"d-flex","align-items-center","gap-3","mb-3"],["variant","tag",3,"status","text"],["type","button",1,"btn","btn-sm",3,"click"],[1,"text-smallest","text-grey"],[1,"mt-4"],[1,"row"],[1,"col-md-6","mb-3"],[1,"sg-specimen"],[1,"sg-specimen-head"],["data-probe","carousel",1,"sg-specimen-body"],[3,"value","numVisible","numScroll","circular"],["data-probe","accordion",1,"sg-specimen-body"],[3,"multiple","value"],["value","0"],[1,"mb-0"],["value","1"],["data-probe","tabs",1,"sg-specimen-body"],["data-probe","select",1,"sg-specimen-body"],["optionLabel","label","optionValue","value","placeholder","Select a role",3,"ngModelChange","options","ngModel","filter"],[1,"card","p-3","m-2","text-center"],[1,"card","p-3","mb-3"],[1,"d-flex","flex-wrap","align-items-center","gap-3","mb-1"],[1,"text-smallest","text-grey","mb-2"],[1,"table","sg-doc-table","mb-2"],["variant","tag","status","success",3,"text"],[1,"d-block"],[1,"mr-1"]],template:function(s,o){if(s&1){let x=B();n(0,"div"),e(1,`
2488    `),n(2,"h2"),e(3,"PrimeNG v21 upgrade debt"),t(),e(4,`
2489
2490    `),n(5,"p"),e(6,`
2491        Six stylesheets carry rules written against PrimeNG's `),n(7,"strong"),e(8,"pre-v21"),t(),e(9,` class names.
2492        PrimeNG 21 landed in `),n(10,"code"),e(11),t(),e(12," on "),n(13,"strong"),e(14),t(),e(15,` and
2493        renamed them, so those rules stopped matching anything. Nothing errored, nothing failed to
2494        build, and the styling they were written to apply has simply been absent from production ever
2495        since.
2496    `),t(),e(16,`
2497
2498    `),n(17,"p",2),e(18,`
2499        `),n(19,"strong"),e(20,"Why this page exists."),t(),e(21,` These surfaces are already rendering un-overridden
2500        PrimeNG. If the
2501        `),n(22,"a",3),e(23,"override-removal evaluation"),t(),e(24,`
2502        runs against the app without this being known, the breakage below reads as
2503        `),n(25,"em"),e(26,"\u201Cthis is what removing our overrides did\u201D"),t(),e(27,` \u2014 when in fact these six
2504        were never overridden at the time of the test.
2505    `),t(),e(28,`
2506
2507    `),n(29,"div",4),e(30,`
2508        `),c(31,"app-pill",5),e(32,`
2509        `),n(33,"button",6),g("click",function(){return o.probe()}),e(34,"re-probe"),t(),e(35,`
2510        `),v(36,Tm,4,1),t(),e(37,`
2511
2512    `),n(38,"p",7),e(39,`
2513        Every verdict is read off the rendered DOM at runtime and compared against
2514        `),n(40,"code"),e(41,"upgrade-debt.manifest.ts"),t(),e(42,`, which
2515        `),n(43,"code"),e(44,"scripts/primeng-override-census.mjs --manifest"),t(),e(45,` generates from the stylesheets
2516        themselves. Nothing on this page is typed in, so a future rename surfaces here on its own.
2517    `),t(),e(46,`
2518
2519    `),e(47,`
2520    `),n(48,"h3",8),e(49,"The mounted components"),t(),e(50,`
2521    `),n(51,"p",7),e(52,`
2522        These are stock. No override on this page touches them, which is exactly what the six
2523        surfaces below are getting in production today.
2524    `),t(),e(53,`
2525
2526    `),n(54,"div",9),e(55,`
2527        `),n(56,"div",10),e(57,`
2528            `),n(58,"div",11),e(59,`
2529                `),n(60,"div",12)(61,"code"),e(62,"<p-carousel>"),t()(),e(63,`
2530                `),n(64,"div",13,0),e(66,`
2531                    `),n(67,"p-carousel",14),e(68,`
2532                        `),k(69,Im,4,1,"ng-template",null,1,fe),e(71,`
2533                    `),t(),e(72,`
2534                `),t(),e(73,`
2535            `),t(),e(74,`
2536        `),t(),e(75,`
2537
2538        `),n(76,"div",10),e(77,`
2539            `),n(78,"div",11),e(79,`
2540                `),n(80,"div",12)(81,"code"),e(82,"<p-accordion>"),t()(),e(83,`
2541                `),n(84,"div",15,0),e(86,`
2542                    `),n(87,"p-accordion",16),e(88,`
2543                        `),n(89,"p-accordion-panel",17),e(90,`
2544                            `),n(91,"p-accordion-header"),e(92,"First panel"),t(),e(93,`
2545                            `),n(94,"p-accordion-content"),e(95,`
2546                                `),n(96,"p",18),e(97,"Expanded so the content anatomy renders and can be probed."),t(),e(98,`
2547                            `),t(),e(99,`
2548                        `),t(),e(100,`
2549                        `),n(101,"p-accordion-panel",19),e(102,`
2550                            `),n(103,"p-accordion-header"),e(104,"Second panel"),t(),e(105,`
2551                            `),n(106,"p-accordion-content")(107,"p",18),e(108,"Collapsed."),t()(),e(109,`
2552                        `),t(),e(110,`
2553                    `),t(),e(111,`
2554                `),t(),e(112,`
2555            `),t(),e(113,`
2556        `),t(),e(114,`
2557
2558        `),n(115,"div",10),e(116,`
2559            `),n(117,"div",11),e(118,`
2560                `),n(119,"div",12)(120,"code"),e(121,"<p-tabs>"),t()(),e(122,`
2561                `),n(123,"div",20,0),e(125,`
2562                    `),n(126,"p-tabs",17),e(127,`
2563                        `),n(128,"p-tablist"),e(129,`
2564                            `),n(130,"p-tab",17),e(131,"Requests"),t(),e(132,`
2565                            `),n(133,"p-tab",19),e(134,"History"),t(),e(135,`
2566                        `),t(),e(136,`
2567                        `),n(137,"p-tabpanels"),e(138,`
2568                            `),n(139,"p-tabpanel",17)(140,"p",18),e(141,"Panel body."),t()(),e(142,`
2569                            `),n(143,"p-tabpanel",19)(144,"p",18),e(145,"Second body."),t()(),e(146,`
2570                        `),t(),e(147,`
2571                    `),t(),e(148,`
2572                `),t(),e(149,`
2573            `),t(),e(150,`
2574        `),t(),e(151,`
2575
2576        `),n(152,"div",10),e(153,`
2577            `),n(154,"div",11),e(155,`
2578                `),n(156,"div",12),e(157,`
2579                    `),n(158,"code"),e(159,"<p-select>"),t(),e(160,`
2580                    `),n(161,"span",7),e(162,`
2581                        \u2014 open it, then re-probe: the panel renders into
2582                        `),n(163,"code"),e(164,"<body>"),t(),e(165,`, not into this box
2583                    `),t(),e(166,`
2584                `),t(),e(167,`
2585                `),n(168,"div",21,0),e(170,`
2586                    `),n(171,"p-select",22),M("ngModelChange",function(_){return w(x),I(o.selectValue,_)||(o.selectValue=_),C(_)}),t(),e(172,`
2587                `),t(),e(173,`
2588            `),t(),e(174,`
2589        `),t(),e(175,`
2590    `),t(),e(176,`
2591
2592    `),e(177,`
2593    `),n(178,"h3",8),e(179,"What each stylesheet targets"),t(),e(180,`
2594
2595    `),S(181,Nm,41,8,null,null,_m),n(183,"h3",8),e(184,"Reading this"),t(),e(185,`
2596    `),n(186,"ul"),e(187,`
2597        `),n(188,"li"),e(189,`
2598            `),n(190,"strong"),e(191,"\u201CNo such element\u201D is not the same as unused CSS."),t(),e(192,` The
2599            component is still on the page and still in use \u2014 only the rule missed it. Weight
2600            would be harmless; this is absent styling.
2601        `),t(),e(193,`
2602        `),n(194,"li"),e(195,`
2603            `),n(196,"strong"),e(197,"The carousel row is the one to look at first."),t(),e(198,` Every arrow rule in that
2604            file is inert, across four public page-builder blocks, and the rules are positioning
2605            rather than colour \u2014 so stock is not merely a different look there.
2606        `),t(),e(199,`
2607        `),n(200,"li"),e(201,`
2608            `),n(202,"strong"),e(203,"This page finds one kind of upgrade debt only."),t(),e(204,` A rule whose classes still
2609            match but whose target element moved or changed nesting looks healthy here. Finding that
2610            kind needs rendering and comparing, not name matching.
2611        `),t(),e(205,`
2612    `),t(),e(206,`
2613`),t(),e(207,`
2614`)}s&2&&(i(11),p(o.upgradeCommit),i(3),p(o.upgradeDate),i(17),m("status",o.totalInert?"error":"success")("text",o.totalInert+" of "+o.totalTargets+" targeted classes are inert"),i(5),y(o.probedAt?36:-1),i(31),m("value",o.carouselItems)("numVisible",2)("numScroll",1)("circular",!0),i(20),m("multiple",!0)("value",V(16,wm)),i(84),te(V(17,Cm)),m("options",o.selectOptions),T("ngModel",o.selectValue),m("filter",!0),i(10),E(o.surfaces))},dependencies:[U,H,J,ye,Pn,ct,Rn,Wn,pt,xt,mt,dt,kn,Tn],encapsulation:2});let a=r;return a})();var ml=(()=>{let r=class r{constructor(d){this.siteDataService=d}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-typography"]],standalone:!1,decls:128,vars:0,consts:[[1,""],[1,"no-bullets","style-example"],[1,"no-bullets"],[1,"inline-list"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
2615    
2616    `),n(2,"h2"),e(3,"Headlines, Paragraphs & Lists"),t(),e(4,`
2617
2618    `),n(5,"h3"),e(6,"Headlines"),t(),e(7,`
2619        `),n(8,"ul",1),e(9,`
2620          `),n(10,"li")(11,"h1"),e(12,"h1  The quick brown fox jumps."),t()(),e(13,`
2621          `),n(14,"li")(15,"h2"),e(16,"h2  The quick brown fox jumps."),t()(),e(17,`
2622          `),n(18,"li")(19,"h3"),e(20,"h3  The quick brown fox jumps over the lazy dog."),t()(),e(21,`
2623          `),n(22,"li")(23,"h4"),e(24,"h4  The quick brown fox jumps over the lazy dog."),t()(),e(25,`
2624          `),n(26,"li")(27,"h5"),e(28,"h5  The quick brown fox jumps over the lazy dog."),t()(),e(29,`
2625        `),t(),e(30,`
2626      
2627`),c(31,"br"),e(32,`
2628    `),n(33,"h3"),e(34,"Paragraph"),t(),e(35,`
2629    `),n(36,"p"),e(37,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Explicabo porro iure, tempora, quae repellendus aliquam fugiat sit dolore. Maiores, officiis. Omnis sed autem voluptatum! Delectus harum neque voluptatum, numquam laboriosam a. Consequuntur illum debitis dolore quod, reprehenderit fugiat neque! Quos quidem laborum, molestiae assumenda error dolores maxime aperiam pariatur, quasi praesentium neque illum ducimus, quae, laudantium aliquid alias. Iste facilis cupiditate, tempora nostrum fugiat esse eum unde obcaecati, est exercitationem velit, omnis assumenda! Cum nemo dolore nam magni necessitatibus rem tempora qui fugit excepturi placeat quibusdam itaque tenetur quia cupiditate, ea in delectus, aliquid error tempore quisquam provident id asperiores."),t(),e(38,`
2630`),c(39,"br"),e(40,`
2631    `),n(41,"h3"),e(42,"Lists"),t(),e(43,`
2632  
2633    `),n(44,"h5"),e(45,"Bulleted List"),t(),e(46,`
2634    `),n(47,"ul"),e(48,`
2635      `),n(49,"li"),e(50,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(51,`
2636      `),n(52,"li"),e(53,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(54,`
2637      `),n(55,"li"),e(56,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae"),t(),e(57,`
2638      `),n(58,"li"),e(59,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(60,`
2639      `),n(61,"li"),e(62,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(63,`
2640    `),t(),e(64,`
2641    
2642    `),n(65,"h5"),e(66,"Ordered List"),t(),e(67,`
2643    `),n(68,"ol"),e(69,`
2644      `),n(70,"li"),e(71,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(72,`
2645      `),n(73,"li"),e(74,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(75,`
2646      `),n(76,"li"),e(77,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae"),t(),e(78,`
2647      `),n(79,"li"),e(80,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(81,`
2648      `),n(82,"li"),e(83,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(84,`
2649    `),t(),e(85,`
2650    
2651    `),n(86,"h5"),e(87,'Remove Bullets, padding & margins (ul class "no-bullets")'),t(),e(88,`
2652    `),n(89,"ul",2),e(90,`
2653       `),n(91,"li"),e(92,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(93,`
2654       `),n(94,"li"),e(95,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(96,`
2655       `),n(97,"li"),e(98,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae"),t(),e(99,`
2656       `),n(100,"li"),e(101,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(102,`
2657       `),n(103,"li"),e(104,"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis, quae."),t(),e(105,`
2658    `),t(),e(106,`        
2659
2660    `),n(107,"h5"),e(108,'Inline List (ul class "inline-list")'),t(),e(109,`
2661    `),n(110,"ul",3),e(111,`
2662       `),n(112,"li"),e(113,"Lorem ipsum dolor sit amet."),t(),e(114,`
2663       `),n(115,"li"),e(116,"Lorem ipsum dolor sit amet."),t(),e(117,`
2664       `),n(118,"li"),e(119,"Lorem ipsum dolor sit amet."),t(),e(120,`
2665       `),n(121,"li"),e(122,"Lorem ipsum dolor sit amet."),t(),e(123,`
2666       `),n(124,"li"),e(125,"Lorem ipsum dolor sit amet."),t(),e(126,`
2667    `),t(),e(127,`        
2668  `),t())},encapsulation:2});let a=r;return a})();var cl=(()=>
2668{let r=class r{constructor(d){this.siteDataService=d}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-buttons"]],standalone:!1,decls:203,vars:0,consts:[[1,""],["href","#"],["href","#",1,"hoverlink"],[1,"row"],[1,"col-md-4"],[1,"sub-head"],["href","#",1,"btn"],[1,"btn"],["type","button","value","Click me, I'm an Input",1,"btn"],["href","#",1,"btn","btn-lg"],["href","#",1,"btn","btn-sm"],["href","#",1,"btn","btn-primary","btn-lg"],["href","#",1,"btn","btn-primary"],["href","#",1,"btn","btn-primary","btn-sm"],["href","#",1,"btn","btn-secondary","btn-lg"],["href","#",1,"btn","btn-secondary"],["href","#",1,"btn","btn-secondary","btn-sm"],["href","#",1,"btn","btn-disabled"],["href","#",1,"btn","btn-primary","btn-disabled"],["href","#",1,"btn","btn-primary","btn-lg","btn-disabled"],["href","#",1,"btn","btn-naked"],["type","button","value","Cancel",1,"btn","btn-primary","btn-naked"],[1,"btn","btn-primary","btn-lg","btn-naked"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
2669    `),n(2,"h2"),e(3,"Links & Buttons"),t(),e(4,`
2670    `),n(5,"div",0),e(6,`
2671      `),n(7,"h3"),e(8,"Links"),t(),e(9,`
2672      `),n(10,"p")(11,"a",1),e(12,"This is a normal anchor link."),t()(),e(13,`
2673      `),n(14,"p")(15,"a",2),e(16,"This is an anchor link with a hoverlink/doclink/infolink class."),t()(),e(17,`
2674      `),c(18,"br")(19,"br"),e(20,`
2675      `),n(21,"h3"),e(22,"Buttons"),t(),e(23,`
2676      `),n(24,"div",3),e(25,`
2677        `),n(26,"div",4),e(27,`
2678          `),n(28,"h5",5),e(29,"Anchors styles as buttons"),t(),e(30,`
2679          `),n(31,"a",6),e(32,"Click Me, I'm an Anchor"),t(),e(33,`
2680        `),t(),e(34,`
2681        `),n(35,"div",4),e(36,`
2682          `),n(37,"h5",5),e(38,"Button Elements"),t(),e(39,`
2683          `),n(40,"button",7),e(41,"Click Me, I'm a Button"),t(),e(42,`
2684        `),t(),e(43,`
2685        `),n(44,"div",4),e(45,`
2686          `),n(46,"h5",5),e(47,"Input Elements"),t(),e(48,`
2687          `),c(49,"input",8),e(50,`			
2688        `),t(),e(51,`
2689      `),t(),e(52,`
2690      `),n(53,"div",3),e(54,`
2691        `),n(55,"div",4),e(56,`
2692          `),n(57,"h5"),e(58,"btn btn-lg"),t(),e(59,`
2693          `),n(60,"a",9),e(61,"Large Button"),t(),e(62,`
2694        `),t(),e(63,`
2695        `),n(64,"div",4),e(65,`
2696          `),n(66,"h5"),e(67,"btn"),t(),e(68,`
2697          `),n(69,"a",6),e(70,"Default Button"),t(),e(71,`
2698        `),t(),e(72,`
2699        `),n(73,"div",4),e(74,`
2700          `),n(75,"h5"),e(76,"btn btn-sm"),t(),e(77,`
2701          `),n(78,"a",10),e(79,"Small Button"),t(),e(80,`
2702        `),t(),e(81,`
2703      `),t(),e(82,`		
2704      `),n(83,"div",3),e(84,`
2705        `),n(85,"div",4),e(86,`
2706          `),n(87,"h5"),e(88,"btn btn-primary btn-lg"),t(),e(89,`
2707          `),n(90,"a",11),e(91,"Submit"),t(),e(92,`
2708        `),t(),e(93,`
2709        `),n(94,"div",4),e(95,`
2710          `),n(96,"h5"),e(97,"btn btn-primary"),t(),e(98,`
2711          `),n(99,"a",12),e(100,"Submit"),t(),e(101,`
2712        `),t(),e(102,`
2713        `),n(103,"div",4),e(104,`
2714          `),n(105,"h5"),e(106,"btn btn-primary btn-sm"),t(),e(107,`
2715          `),n(108,"a",13),e(109,"Submit"),t(),e(110,`
2716        `),t(),e(111,`
2717      `),t(),e(112,`
2718      `),n(113,"div",3),e(114,`
2719        `),n(115,"div",4),e(116,`
2720          `),n(117,"h5"),e(118,"btn btn-secondary btn-lg"),t(),e(119,`
2721          `),n(120,"a",14),e(121,"Cancel"),t(),e(122,`
2722        `),t(),e(123,`
2723        `),n(124,"div",4),e(125,`
2724          `),n(126,"h5"),e(127,"btn btn-secondary"),t(),e(128,`
2725          `),n(129,"a",15),e(130,"Cancel"),t(),e(131,`
2726        `),t(),e(132,`
2727        `),n(133,"div",4),e(134,`
2728          `),n(135,"h5"),e(136,"btn btn-secondary btn-sm"),t(),e(137,`
2729          `),n(138,"a",16),e(139,"Cancel"),t(),e(140,`
2730        `),t(),e(141,`
2731      `),t(),e(142,`
2732      `),n(143,"div",3),e(144,`
2733          `),n(145,"div",4),e(146,`
2734            `),n(147,"h5"),e(148,"btn btn-disabled"),t(),e(149,`
2735            `),n(150,"a",17),e(151,"Cancel"),t(),e(152,`
2736          `),t(),e(153,`
2737          `),n(154,"div",4),e(155,`
2738            `),n(156,"h5"),e(157,"btn btn-primary btn-disabled"),t(),e(158,`
2739            `),n(159,"a",18),e(160,"Cancel"),t(),e(161,`
2740          `),t(),e(162,`
2741          `),n(163,"div",4),e(164,`
2742            `),n(165,"h5"),e(166,"btn btn-primary btn-lg btn-disabled"),t(),e(167,`
2743            `),n(168,"a",19),e(169,"Cancel"),t(),e(170,`
2744          `),t(),e(171,`
2745      `),t(),e(172,`
2746      `),n(173,"div",3),e(174,`
2747          `),n(175,"div",4),e(176,`
2748            `),n(177,"h5"),e(178,"btn btn-naked"),t(),e(179,`
2749            `),n(180,"a",20),e(181,"Cancel"),t(),e(182,`
2750          `),t(),e(183,`
2751          `),n(184,"div",4),e(185,`
2752            `),n(186,"h5"),e(187,"btn btn-primary btn-naked"),t(),e(188,`
2753            `),c(189,"input",21),e(190,`
2754          `),t(),e(191,`
2755          `),n(192,"div",4),e(193,`
2756            `),n(194,"h5"),e(195,"btn btn-primary btn-lg btn-naked"),t(),e(196,`
2757            `),n(197,"button",22),e(198,"Cancel"),t(),e(199,`
2758          `),t(),e(200,`
2759      `),t(),e(201,`
2760    `),t(),e(202,`
2761  `),t())},encapsulation:2});let a=r;return a})();var pl=(()=>{let r=class r{constructor(d){this.siteDataService=d}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-grid"]],standalone:!1,decls:80,vars:0,consts:[[1,""],["href","http://getbootstrap.com/css/#grid"],[1,"row","show-grid"],[1,"col-md-1"],[1,"col-md-8"],[1,"col-md-4"],[1,"col-md-6"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
2762    `),n(2,"h2"),e(3,"Layout Grid"),t(),e(4,`
2763    `),n(5,"p"),e(6,"This styleguide is using a simplified version of the "),n(7,"a",1),e(8,"Bootstrap 4 responsive grid"),t(),e(9,"."),t(),e(10,`
2764    `),n(11,"div",2),e(12," "),n(13,"div",3),e(14,".col-md-1"),t(),e(15," "),n(16,"div",3),e(1
27647,".col-md-1"),t(),e(18," "),n(19,"div",3),e(20,".col-md-1"),t(),e(21," "),n(22,"div",3),e(23,".col-md-1"),t(),e(24," "),n(25,"div",3),e(26,".col-md-1"),t(),e(27," "),n(28,"div",3),e(29,".col-md-1"),t(),e(30," "),n(31,"div",3),e(32,".col-md-1"),t(),e(33," "),n(34,"div",3),e(35,".col-md-1"),t(),e(36," "),n(37,"div",3),e(38,".col-md-1"),t(),e(39," "),n(40,"div",3),e(41,".col-md-1"),t(),e(42," "),n(43,"div",3),e(44,".col-md-1"),t(),e(45," "),n(46,"div",3),e(47,".col-md-1"),t(),e(48," "),t(),e(49,`
2765    `),n(50,"div",2),e(51," "),n(52,"div",4),e(53,".col-md-8"),t(),e(54," "),n(55,"div",5),e(56,".col-md-4"),t(),e(57," "),t(),e(58,`
2766    `),n(59,"div",2),e(60," "),n(61,"div",5),e(62,".col-md-4"),t(),e(63," "),n(64,"div",5),e(65,".col-md-4"),t(),e(66," "),n(67,"div",5),e(68,".col-md-4"),t(),e(69," "),t(),e(70,`
2767    `),n(71,"div",2),e(72," "),n(73,"div",6),e(74,".col-md-6"),t(),e(75," "),n(76,"div",6),e(77,".col-md-6"),t(),e(78," "),t(),e(79,`
2768`),t())},encapsulation:2});let a=r;return a})();var Gn="2026-08-31",xl=[{name:"Content-projection dynamic form",what:'<app-dynamic-form [contentFieldsMode]="true"> with hand-placed fields \u2014 the host owns layout',scale:"327 of 334 sanctioned templates",tab:"fields",verdict:"house"},{name:"Config-driven dynamic form",what:"the same component driven only by its [fields] array",scale:"7 of 334",tab:"fields",verdict:"house"},{name:"Controls with no <form>",what:"inputs floating free \u2014 no form element, no submit, no implicit submission",scale:"305 templates",tab:"defects",verdict:"defect"},{name:"Report filter grid",what:".row / .col-md-* / .form-group / bare <label> / p-multiSelect with [(ngModel)]",scale:"55 templates under admin/report",tab:"architectures",verdict:"drift"},{name:"Admin filter bar",what:"<app-admin-filter> with primary + advanced projection slots",scale:"74 templates",tab:"architectures",verdict:"live"},{name:"CMS settings rail",what:".pb-settings-column \u2014 a full-height right rail of autosaving dynamic forms",scale:"1 host, 34 content edit forms",tab:"architectures",verdict:"live"},{name:"Modal quick-add",what:"p-dialog \u2192 dynamic form (or raw .form-group) \u2192 app-dialog-footer",scale:"217 dialogs with a form, 116 with orphan controls",tab:"architectures",verdict:"live"},{name:"Dashboard panel mini-form",what:"a lone p-select or p-datepicker in a card header, used as a scope selector",scale:"18 templates under admin/dashboard",tab:"architectures",verdict:"drift"},{name:"Multi-step wizard",what:"p-steps chrome with one dynamic form per step, composed by @ViewChild",scale:"18 templates",tab:"architectures",verdict:"live"},{name:"Public checkout / registration",what:"the only place with a real <form> + [formGroup] outside the shared modules",scale:"~6 templates",tab:"architectures",verdict:"live"},{name:"Form-builder system",what:"a parallel drag-and-drop builder with its own model, steps and column metadata",scale:"1 consumer",tab:"architectures",verdict:"dead"}],hl=[{label:"Templates carrying a form control",value:"656",note:"inputs, textareas, selects, PrimeNG controls, or app-dynamic-form-field"},{label:"Templates containing a <form> element",value:"25",note:"written by hand \u2014 3.8% of the 656"},{label:"Templates whose <form> comes from app-dynamic-form",value:"326",note:"the component emits a real <form [formGroup]> itself \u2014 these are fine"},{label:"Templates with controls and no form element at all",value:"305",note:"the orphan population \u2014 free-floating controls"},{label:"\u2026of those, sitting inside a dialog",value:"116",note:"a modal that collects input but is not a form"},{label:"\u2026of those, with any Enter-key handler",value:"45",note:"so ~280 screens where Enter does nothing"},{label:'\u2026of those, with a type="submit" button',value:"1",note:"a single template in the whole orphan population"}],ul=[{idiom:"[horizontalForm]",home:"DynamicFormComponent input \u2192 .horizontal-form",uses:120,files:77,verdict:"house"},{idiom:"per-field [styleClass] Bootstrap columns",home:"the host template",uses:0,files:327,verdict:"house"},{idiom:"field.fieldContainerClass",home:"backend metadata",uses:7,files:4,verdict:"live"},{idiom:"field.fieldHeader",home:"backend metadata \u2192 .form-group--field-header",uses:1,files:1,verdict:"undefined"},{idiom:"[transposeLabel]",home:"DynamicFormFieldComponent input \u2192 .transpose-label, declared in dynamic-form-field.component.scss:5 \u2014 not in forms.scss",uses:15,files:4,verdict:"drift"},{idiom:"field.reverseLabel",home:"field metadata \u2192 the same .transpose-label class",uses:3,files:1,verdict:"drift"},{idiom:"field.floatLabel",home:"field metadata \u2192 .float-label",uses:2,files:2,verdict:"drift"},{idiom:'[buttonsPosition]="left|spread"',home:"DynamicFormComponent input",uses:0,files:0,verdict:"live"},{idiom:"[buttonsSticky]",home:"appStickyFormButtons directive",uses:33,files:33,verdict:"live"},{idiom:".compact-form",home:"2_layout/forms.scss:477",uses:22,files:5,verdict:"live"},{idiom:".inline-form",home:"2_layout/forms.scss:441 (nested in .horizontal-form)",uses:3,files:2,verdict:"drift"},{idiom:".wide-label",home:"2_layout/forms.scss:377 (nested in .horizontal-form)",uses:3,files:3,verdict:"drift"}],gl=[{slot:"beforeFormContent",host:"form",kind:"attribute",what:"above everything, outside the <form> element",files:"\u2014"},{slot:"beforeFormFieldsContent",host:"form",kind:"attribute",what:"inside the <form>, above the fields",files:"\u2014"},{slot:"(default)",host:"form",kind:"default",what:"the projected fields themselves \u2014 contentFieldsMode",files:"327"},{slot:"beforeSubmitButtonsContent",host:"form",kind:"attribute",what:"inside the action row, before the buttons",files:"\u2014"},{slot:"afterSubmitButtonsContent",host:"form",kind:"attribute",what:"inside the action row, after the buttons",files:"\u2014"},{slot:"afterFormContent",host:"form",kind:"attribute",what:"below everything, outside the <form> element",files:"\u2014"},{slot:"#beforeFieldContent",host:"field",kind:"template ref",what:"a TemplateRef rendered above the whole field group",files:"\u2014"},{slot:"beforeInputContent",host:"field",kind:"attribute",what:"between the label and the control",files:"\u2014"},{slot:"inputGroupStart",host:"field",kind:"attribute",what:'a leading p-in
2768putgroup-addon \u2014 the "yourclub.com/club/" prefix pattern',files:"12"},{slot:"inputGroupEnd",host:"field",kind:"attribute",what:"a trailing p-inputgroup-addon \u2014 units, reset links, clear buttons",files:"14"},{slot:"afterInputContent",host:"field",kind:"attribute",what:"directly under the control, above the note",files:"\u2014"},{slot:"extraMessage",host:"field",kind:"attribute",what:"below the note and the validation message",files:"\u2014"},{slot:"#fileUploadContent",host:"field",kind:"template ref",what:"replaces the file-upload body for FILE_UPLOAD fields",files:"\u2014"}],fl=[{kind:"asterisk-aria",markup:'<span aria-hidden="true" class="required-asterisk">*</span>',uses:30,defined:"2_layout/forms.scss:550 \u2014 orange-500, position:absolute",verdict:"house"},{kind:"text-danger",markup:'<span class="text-danger">*</span>',uses:18,defined:"no global declaration \u2014 two component stylesheets declare a local copy",verdict:"undefined"},{kind:"bare",markup:"* directly in the label text",uses:13,defined:"n/a \u2014 inherits body colour by design",verdict:"drift"},{kind:"required",markup:'<span class="required">*</span>',uses:9,defined:"nowhere \u2014 only .required-asterisk exists",verdict:"undefined"},{kind:"asterisk-no-aria",markup:'<span class="required-asterisk">*</span> (no aria-hidden)',uses:2,defined:'2_layout/forms.scss:550 \u2014 styled, but read aloud as "star"',verdict:"drift"},{kind:"text-red",markup:'<span class="text-red"> *</span>',uses:1,defined:"1_base/modifiers.scss:648",verdict:"drift"},{kind:"indicator",markup:'<span class="required-indicator">*</span>',uses:1,defined:"nowhere",verdict:"undefined"}],bl=[{idiom:"<app-inline-alert>",home:"shared component",uses:662,files:324,verdict:"house"},{idiom:".form-error-message",home:"2_layout/forms.scss:508 \u2014 the dynamic form's per-field message",uses:95,files:42,verdict:"house"},{idiom:"error-message (class or binding)",home:"ad hoc",uses:97,files:44,verdict:"drift"},{idiom:"text-danger",home:"no global declaration \u2014 local in 2 component stylesheets",uses:83,files:36,verdict:"undefined"},{idiom:".form-error",home:"2_layout/forms.scss:18 \u2014 the dynamic form's form-level message",uses:106,files:43,verdict:"house"},{idiom:"inline errors?.\u2026 expression",home:"the template",uses:50,files:7,verdict:"drift"},{idiom:"showError binding",home:"ad hoc",uses:35,files:12,verdict:"drift"},{idiom:"errorMessage property",home:"ad hoc",uses:24,files:17,verdict:"drift"},{idiom:"errorText property",home:"ad hoc",uses:13,files:7,verdict:"drift"},{idiom:"invalid-feedback",home:"Bootstrap",uses:9,files:2,verdict:"deprecated"},{idiom:"is-invalid",home:"Bootstrap",uses:7,files:1,verdict:"deprecated"}],Sl=[{idiom:"<app-dialog-footer>",home:'shared component, slot="primary" / slot="secondary"',uses:566,files:202,verdict:"house"},{idiom:".form-action",home:"2_layout/forms.scss:796 \u2014 the dynamic form's own row",uses:120,files:82,verdict:"house"},{idiom:"d-flex justify-content-between",home:"ad hoc",uses:428,files:181,verdict:"drift"},{idiom:"d-flex justify-content-end",home:"ad hoc",uses:252,files:119,verdict:"drift"},{idiom:"text-right",home:"ad hoc, Bootstrap 4 spelling",uses:250,files:79,verdict:"drift"},{idiom:"appStickyFormButtons",home:"shared directive",uses:33,files:33,verdict:"live"},{idiom:"button-row",home:"ad hoc",uses:8,files:6,verdict:"drift"},{idiom:"form-actions (plural)",home:"nowhere \u2014 undefined class",uses:1,files:1,verdict:"undefined"},{idiom:"modal-footer",home:"Bootstrap",uses:1,files:1,verdict:"deprecated"}],El=[{name:"CMS settings rail",home:".pb-settings-column \u2014 3_modules/cms/pb-settings-column.scss",scale:"1 host, 34 content edit forms",what:"a sticky full-height right rail: p-tabs over p-accordion over projection-mode forms that autosave through (valueChanges) and show no submit button",anchor:"cms-rail",verdict:"live"},{name:"Calendar filter rail",home:".calendar-filters \u2014 3_modules/templates.scss:842",scale:"2 templates",what:"a left column of filter controls beside the content column; its declaration is commented out",anchor:"calendar-rail",verdict:"undefined"},{name:"Admin filter bar",home:"app-admin-filter \u2014 the shared component",scale:"74 templates",what:"a search-filter card with primary and advanced projection slots, plus Search and Reset",anchor:"admin-filter",verdict:"house"},{name:"Admin filter bar, [horizontal]",home:"the same component, second layout",scale:"2 templates",what:"meant to be a left filter rail beside projected content \u2014 renders with no CSS at all",anchor:"admin-filter-horizontal",verdict:"defect"},{name:"Report filter grid",home:"admin/report/*/filters.component.html",scale:"55 templates",what:"a bare .row of .col-md-* columns of .form-groups, driven by an external Run button",anchor:"report-grid",verdict:"drift"},{name:"Dialog form",home:"p-dialog + app-dialog-footer",scale:"387 templates, 217 with a dynamic form",what:"the most common chrome in the app; width comes from a styleClass, never inline styles",anchor:"dialog",verdict:"house"},{name:"Hand-rolled dialog",home:".sprocket-dialog",scale:"27 templates",what:"the prescribed escape hatch for when content projection into p-dialog will not work",anchor:"sprocket-dialog",verdict:"live"},{name:"Drawer form",home:"p-drawer",scale:"9 templates",what:"an edge-anchored panel hosting a form; header treatment varies by surface",anchor:"drawer",verdict:"live"},{name:"Multi-step wizard",home:"p-steps + one form per step",scale:"17 templates",what:"step chrome over separate dynamic forms, composed by @ViewChild \u2014 no step primitive exists in the metadata",anchor:"wizard",verdict:"live"},{name:"Tabbed form",home:"p-tabs",scale:"280 templates",what:"fields grouped across tabs; each tab needs its own formID or submits cross-fire",anchor:"tabbed",verdict:"live"},{name:"Accordion form",home:"p-accordion",scale:"25 templates",what:"collapsible field groups \u2014 how the CMS rail hides Permissions and 
2768SEO",anchor:"accordion",verdict:"live"},{name:"Sticky action bar",home:"appStickyFormButtons + [buttonsSticky]",scale:"33 templates",what:"pins .form-action to the viewport bottom until the real row scrolls into view",anchor:"sticky",verdict:"live"},{name:"Narrow centered form",home:".form-container \u2014 2_layout/forms.scss:24",scale:"7 templates",what:"a max-width wrapper for a standalone form; the public checkout and auth shape",anchor:"narrow",verdict:"live"},{name:"Dashboard mini-form",home:"app-admin-dashboard-card header",scale:"18 templates",what:"a lone p-select used as a scope selector, with no form and no submit",anchor:"mini",verdict:"drift"}],vl=[{className:".form-group",home:"2_layout/forms.scss:30",does:"the field wrapper \u2014 position:relative, bottom margin, label and select rules",uses:1152,files:198,verdict:"house"},{className:".form-action",home:"2_layout/forms.scss:796",does:"the button row; .left-buttons / .right-buttons children, card and dialog overrides",uses:120,files:82,verdict:"house"},{className:".horizontal-form",home:"2_layout/forms.scss:345",does:"label beside control; ~180 lines of nested overrides for every control type",uses:120,files:77,verdict:"house"},{className:".form-row",home:"2_layout/forms.scss:76",does:"lays sibling .form-groups out side by side",uses:157,files:20,verdict:"live"},{className:".form-check",home:"2_layout/forms.scss:202",does:"checkbox and radio row wrapper",uses:127,files:14,verdict:"live"},{className:".form-error-message",home:"2_layout/forms.scss:508",does:"the per-field validation message",uses:95,files:42,verdict:"house"},{className:".edit-card",home:"2_layout/forms.scss:132",does:"file-upload chrome inside an editing card",uses:89,files:48,verdict:"live"},{className:".form-label",home:"2_layout/forms.scss:160, :176, :685",does:"declared three times at top level \u2014 see the defect register",uses:49,files:15,verdict:"defect"},{className:".required-asterisk",home:"2_layout/forms.scss:550",does:"orange, position:absolute, left:-0.4rem \u2014 needs a positioned .form-group",uses:34,files:19,verdict:"house"},{className:".custom-form",home:"2_layout/forms.scss:1385",does:"a one-off label/input grid used by two templates",uses:33,files:2,verdict:"drift"},{className:".form-dropdown",home:"2_layout/forms.scss:416 (nested in .horizontal-form)",does:"dropdown sizing \u2014 no effect outside a .horizontal-form",uses:26,files:8,verdict:"drift"},{className:".compact-form",home:"2_layout/forms.scss:477",does:"tighter label, row and button sizing",uses:22,files:5,verdict:"live"},{className:".form-check-inline",home:"2_layout/forms.scss:219",does:"lays checkboxes or radios in a row",uses:12,files:1,verdict:"live"},{className:".form-error-message-full",home:"2_layout/forms.scss:525",does:"full-width error under a horizontal-form field",uses:12,files:7,verdict:"live"},{className:".form-input-group",home:"2_layout/forms.scss:557",does:"groups the controls under a legend.form-label",uses:11,files:3,verdict:"live"},{className:".form-note",home:"2_layout/forms.scss:8",does:"the helper text under a control",uses:9,files:7,verdict:"live"},{className:".form-container",home:"2_layout/forms.scss:24",does:"max-width wrapper for a standalone form",uses:7,files:4,verdict:"live"},{className:".float-label",home:"2_layout/forms.scss:618",does:"the label-floats-into-the-box treatment, with .is-focused / .is-active states",uses:6,files:4,verdict:"drift"},{className:".file-upload-layout",home:"2_layout/forms.scss:1191",does:"preview image beside the file name",uses:5,files:2,verdict:"live"},{className:".dateAndTime",home:"2_layout/forms.scss:1356",does:"date picker plus time select, with its own reset button",uses:5,files:3,verdict:"live"},{className:".text-area",home:"2_layout/forms.scss:169",does:"label spacing for a textarea .form-group",uses:4,files:3,verdict:"live"},{className:".transpose-label",home:"dynamic-form-field.component.scss:5 \u2014 the field component's own stylesheet, not forms.scss",does:"flips the label below the control for [transposeLabel] and field.reverseLabel",uses:18,files:5,verdict:"drift"},{className:".wide-label",home:"2_layout/forms.scss:377",does:"widens the label column \u2014 only inside .horizontal-form",uses:3,files:3,verdict:"drift"},{className:".inline-form",home:"2_layout/forms.scss:441",does:"label and control on one line \u2014 only inside .horizontal-form",uses:3,files:2,verdict:"drift"},{className:".acknowledgement-checkbox",home:"2_layout/forms.scss:858",does:"the bordered consent checkbox block",uses:2,files:2,verdict:"live"},{className:".big-checkbox",home:"2_layout/forms.scss:233",does:"scales a checkbox up",uses:2,files:2,verdict:"live"},{className:".password-peek-toggle",home:"2_layout/forms.scss:1410",does:"the eye icon inside a password field",uses:2,files:2,verdict:"live"},{className:".form-group-inline",home:"2_layout/forms.scss:54",does:"label and control inline, outside .horizontal-form",uses:2,files:1,verdict:"drift"},{className:".form-group-list",home:"2_layout/forms.scss:1115",does:"a list-shaped group with its own label and input rules",uses:2,files:1,verdict:"drift"},{className:".donate-form",home:"2_layout/forms.scss:1045",does:"bespoke radio styling for the donations page",uses:2,files:1,verdict:"drift"},{className:".checkbox-group-pills",home:"2_layout/forms.scss:255",does:"the pill-shaped checkbox group emitted by CHECKBOX_GROUP_PILLS",uses:1,files:1,verdict:"live"},{className:".cc-input-group",home:"2_layout/forms.scss:990",does:"credit-card number field with its sc
2768heme icon row",uses:1,files:1,verdict:"live"},{className:".double-input",home:"2_layout/forms.scss:455",does:"two controls sharing one .form-group",uses:1,files:1,verdict:"drift"},{className:"select.auto-width",home:"2_layout/forms.scss:117",does:"lets a select size to its content",uses:1,files:1,verdict:"drift"},{className:".form-sticky-form-buttons-on",home:"2_layout/forms.scss:90",does:"the sticky state the directive toggles \u2014 applied from TS, never in markup",uses:0,files:0,verdict:"live"}],yl=[{className:".pb-settings-column",home:"3_modules/cms/pb-settings-column.scss:11",does:"the CMS right rail \u2014 ~130 lines re-specifying label, form-group, form-action and dropdown sizing for one host",uses:1,files:1,verdict:"live"},{className:".report-filters",home:"3_modules/admin-includes/report-filter.scss:1",does:"the advanced-filter container; the only scope where .resetBtn is styled",uses:0,files:0,verdict:"live"},{className:".resetBtn",home:"3_modules/admin-includes/report-filter.scss:23",does:"the \u21BA reset link \u2014 deliberately not in the btn-* namespace, and unstyled outside .report-filters",uses:0,files:0,verdict:"live"},{className:".search-filter",home:"3_modules/admin-includes/search-filter.scss:1",does:"the app-admin-filter card chrome",uses:0,files:0,verdict:"live"},{className:".masked-checkbox",home:"2_layout/buttons.scss:422",does:"hides the real checkbox behind a .btn-pill label",uses:0,files:0,verdict:"live"},{className:".btn-pill",home:"2_layout/buttons.scss:386",does:"the pill button that CHECKBOX_GROUP_PILLS renders",uses:0,files:0,verdict:"live"},{className:".sr-only",home:"1_base/modifiers.scss:2781",does:"visually hides a label \u2014 the single most common label class in the app",uses:161,files:0,verdict:"house"},{className:".half-width",home:"1_base/modifiers.scss:68",does:"the two-up column class the backend stamps into fieldContainerClass",uses:0,files:0,verdict:"live"},{className:"hr.form-section",home:"3_modules/templates.scss:676",does:"the divider between form sections \u2014 only styled on an <hr>",uses:66,files:26,verdict:"live"}],wl=[{className:".form-checkbox",home:"2_layout/forms.scss:278",does:"a hand-built checkmark checkbox \u2014 ~50 lines across 6 rule blocks",uses:0,files:0,verdict:"dead"},{className:".connected-dropdowns",home:"2_layout/forms.scss:1285",does:"joins adjacent dropdowns into one segmented control",uses:0,files:0,verdict:"dead"},{className:".input-adder",home:"2_layout/forms.scss:1331",does:"a repeatable add-a-row input",uses:0,files:0,verdict:"dead"},{className:".warning-checkbox",home:"2_layout/forms.scss:893",does:"a checkbox in a warning treatment",uses:0,files:0,verdict:"dead"},{className:".block-label",home:"2_layout/forms.scss:690",does:"display:block on a label",uses:0,files:0,verdict:"dead"},{className:".form-emphasis",home:"2_layout/forms.scss:113",does:"emphasised form text",uses:0,files:0,verdict:"dead"},{className:"select.reverse-select",home:"2_layout/forms.scss:769",does:"a select with its chevron on the left",uses:0,files:0,verdict:"dead"},{className:".dynamic-form-field-label",home:"2_layout/forms.scss:333",does:"a label class the dynamic form no longer emits",uses:0,files:0,verdict:"dead"}],Cl=[{className:".f-value",home:"emitted by dynamic-form-field view-only rendering",does:"nothing \u2014 no stylesheet anywhere declares it",uses:9,files:0,verdict:"undefined"},{className:".form-wrapper",home:"emitted by dynamic-form.component.html:2, plus 30 hand-written uses",does:"nothing globally \u2014 three component stylesheets define their own, the rest render bare",uses:30,files:24,verdict:"undefined"},{className:".form-group--field-header",home:"emitted by dynamic-form-field for field.fieldHeader",does:"nothing globally \u2014 one component stylesheet defines it",uses:1,files:1,verdict:"undefined"},{className:".timeDropDown",home:"emitted by the DATE + showTime branch",does:"nothing globally \u2014 one component stylesheet defines it",uses:2,files:1,verdict:"undefined"},{className:".text-danger",home:"no global declaration; local rules in create-scheduled-report and message-edit-bubble",does:"nothing outside those two components \u2014 everywhere else it is inert",uses:83,files:36,verdict:"undefined"},{className:".required",home:"used as a required marker in 9 places",does:"nothing \u2014 only .required-asterisk is declared",uses:9,files:0,verdict:"undefined"},{className:".required-indicator",home:"used once",does:"nothing",uses:1,files:0,verdict:"undefined"},{className:".form-actions",home:"used once, plural",does:"nothing \u2014 the real class is .form-action",uses:1,files:1,verdict:"undefined"},{className:".admin-filter-container / .filters-section / .content-section",home:"emitted by app-admin-filter's [horizontal] layout",does:"nothing \u2014 admin-filter.component.scss is a 0-byte file and no other stylesheet declares them",uses:3,files:1,verdict:"undefined"},{className:".calendar-filters",home:"used in 2 calendar templates",does:"nothing \u2014 its declaration at 3_modules/templates.scss:842 is commented out",uses:2,files:2,verdict:"undefined"}],_l=[{title:"Enter does nothing on ~280 screens",where:"the 305 orphan-control templates",measured:"305 templates carry controls with no <form>; 45 have an Enter handler; 1 has a submit button",tab:"defects",anchor:"noform",demonstrable:!0},{title:"28 of 74 required markers render unstyled",where:"across 36 templates",measured:".text-danger (18), .required (9), .required-indicator (1) have no global declaration",tab:"defects",anchor:"asterisk",demonstrable:!0},{title:".text-danger has no global declaration but is used 83 times",where:"36 templates",measured:"nothing in assets/css/sass declares it; two component stylesheets declare a local copy, so it works in exactly two components",tab:"defects",anchor:"text-danger",demonstrable:!0},{title:"app-admin-filter's [horizontal] layout has no CSS at all",where:"admin-filter.component.scss, bulk-cancel + advanced-bulk-edit",measured:"the stylesheet is 0 bytes; .admin-filter-container, .filters-section and .content-section are declared in no stylesheet in the app",tab:"defects",anchor:"admin-filter-horizontal",demonstrable:!0},{title:".calendar-filters is commented out",where:"3_modules/templates.scss:842-847",measured:"live in 2 templates; the declaration block is commented out, so its three --p-toggleswitch-* overrides never apply",tab:"defects",anchor:"calendar-filters",demonstrable:!0},{title:".form-dropdown only works inside .horizontal-form",where:"8 templates, 26 uses",measured:"declared only as a descendant of .horizontal-form",tab:"defects",anchor:"scoping",demonstrable:!0}
2768,{title:".resetBtn only works inside .report-filters",where:"report filter panels",measured:"declared only as a descendant of .report-filters \u2014 an unstyled anchor anywhere else",tab:"defects",anchor:"scoping",demonstrable:!0},{title:"56% of labels have no for attribute",where:"app-wide",measured:"1,657 labels, 723 with for= \u2014 PrimeNG controls need inputId, not the component's id",tab:"defects",anchor:"labels",demonstrable:!0},{title:"Four classes the code emits have no stylesheet",where:".f-value, .form-wrapper, .form-group--field-header, .timeDropDown",measured:"emitted by the dynamic form or used in 30 templates; declared globally nowhere",tab:"defects",anchor:"emitted-undefined",demonstrable:!0},{title:"8 form classes are dead",where:"2_layout/forms.scss",measured:"zero references in any .html and any .ts \u2014 roughly 80 lines",tab:"defects",anchor:"dead-checkbox",demonstrable:!0},{title:"DynamicFormFieldComponent.viewOnly is a dead @Input",where:"dynamic-form-field.component.ts:35",measured:"the template reads field.viewOnly 56 times and the input zero times; nothing copies one onto the other, so [viewOnly] on a projected field is inert \u2014 only the form-level [viewOnly], which sets field.viewOnly on every field, does anything",tab:"fields",anchor:"panel",demonstrable:!0},{title:"The disabled @Input reaches 5 of 29 controls",where:"dynamic-form-field.component.html",measured:"the bare input is read on 5 lines (autocomplete x2, slider, text input, p-select); the other 22 reads are field.disabled, which no input writes \u2014 so [disabled] silently skips checkbox, radio, multiselect, textarea, rating, switch, file upload, tree and pills",tab:"fields",anchor:"panel",demonstrable:!0},{title:"showCharacterCount is inert for any admin",where:"dynamic-form-field.component.ts:237",measured:"the getter is showCharacterCount || siteDataService.isAdmin, so the input cannot turn the count off; it also only ever shows on 5 of 29 types, and only while focused",tab:"fields",anchor:"panel",demonstrable:!1},{title:".form-label is declared three times",where:"2_layout/forms.scss:160, :176, :685",measured:"three top-level blocks, plus two more as legend.form-label inside .horizontal-form",tab:"contracts",anchor:"",demonstrable:!1},{title:"DynamicFormField.controlName is typed optional and is mandatory",where:"dynamic-form-field.model.ts:237",measured:"an unguarded fieldOptions.controlName.replace() \u2014 new DynamicFormField({key, label}) throws at construction; strictNullChecks is off so nothing flags it",tab:"fields",anchor:"",demonstrable:!1},{title:"Production console.log in the dynamic form",where:"validators.model.ts:232, dynamic-form.component.ts:444",measured:"fires on every min-validation and every submit",tab:"fields",anchor:"",demonstrable:!1},{title:"The form-builder system has one consumer",where:"shared/modules/form-builder/",measured:"the only steps / columnSpan / multiStep metadata in the codebase; reachable only from /form-builder-demo",tab:"architectures",anchor:"",demonstrable:!1},{title:"The styleguide is unreachable from the nav",where:"left-nav.component.html:529-537",measured:"the super-admin entry is commented out, so the harness is URL-only",tab:"",anchor:"",demonstrable:!1}],ft=[{label:"All",value:null},{label:"Spring 2026",value:1},{label:"Fall 2026",value:2}],kl=[{name:"U10 Blue",value:1},{name:"U12 Red",value:2},{name:"U14 Green",value:3}];var Bm=(a,r)=>r.value;function Wm(a,r){if(a&1&&(e(0,`
2769            `),n(1,"p-tab",4),e(2),t(),e(3,`
2770        `)),a&2){let l=r.$implicit;i(),m("value",l.value)("routerLink",l.value),i(),p(l.label)}}var Tl=(()=>{let r=class r{constructor(d,s){this.router=d,this.siteDataService=s,this.snapshotDate=Gn,this.tabs=[{value:"overview",label:"Overview"},{value:"fields",label:"Fields"},{value:"layout",label:"Layout & labels"},{value:"architectures",label:"Architectures"},{value:"contracts",label:"CSS contracts"},{value:"defects",label:"Defects"}],this.activeTab="overview",this.unsubscribe$=new He}ngOnInit(){this.siteDataService.hideSiteLoader(),this.setActiveTab(this.router.url),this.router.events.pipe(na(d=>d instanceof wa),Ct(this.unsubscribe$)).subscribe({next:d=>
2770{this.siteDataService.hideSiteLoader(),this.setActiveTab(d.urlAfterRedirects)},error:()=>{this.siteDataService.hideSiteLoader(),this.activeTab="overview"}})}ngOnDestroy(){this.unsubscribe$.next(),this.unsubscribe$.complete()}setActiveTab(d){let s=d.split("?")[0].split("#")[0].split("/").pop();this.activeTab=this.tabs.some(o=>o.value===s)?s:"overview"}};r.\u0275fac=function(s){return new(s||r)(A(Dt),A(R))},r.\u0275cmp=b({type:r,selectors:[["app-forms"]],standalone:!1,decls:43,vars:5,consts:[[1,"text-small","text-grey"],[3,"routerLink"],[3,"value"],[1,"mt-3"],[3,"value","routerLink"]],template:function(s,o){s&1&&(n(0,"h2"),e(1,"Forms"),t(),e(2,`
2771`),n(3,"p",0),e(4,`
2772    Every form flavor the app ships, rendered. There is one sanctioned system and a long tail of
2773    shapes that grew around it, so this page leads with the map, carries measured counts through
2774    every table, and marks each treatment with a verdict. Nothing here is a re-implementation
2775    \u2014 the samples are the real `),n(5,"code"),e(6,"app-dynamic-form"),t(),e(7,`, the real shared components and
2776    the real classes from `),n(8,"code"),e(9,"2_layout/forms.scss"),t(),e(10,`. If a sample looks wrong, the component
2777    or the partial is wrong.
2778`),t(),e(11,`
2779`),n(12,"p",0),e(13,`
2780    Counts are a grep snapshot of `),n(14,"code"),e(15,"ClientApp/src/app"),t(),e(16,` taken
2781    `),n(17,"strong"),e(18),t(),e(19,` over the 1,292 templates outside the styleguide \u2014 this
2782    page and the other harness pages are excluded, so a count is its real product consumers.
2783    Verdicts cover measurable defects only \u2014 a flavor being rare is described, not judged;
2784    the `),n(20,"a",1),e(21,"Overview"),t(),e(22,` tab defines all seven. Companion pages:
2785    `),n(23,"a",1),e(24,"system alerts"),t(),e(25,` owns the
2786    inline-alert matrix this page links to for validation, and
2787    `),n(26,"a",1),e(27,"color"),t(),e(28,` owns the undefined text
2788    modifiers that turn up again under required markers.
2789`),t(),e(29,`
2790
2791`),n(30,"p-tabs",2),e(31,`
2792    `),n(32,"p-tablist"),e(33,`
2793        `),S(34,Wm,4,3,null,null,Bm),t(),e(36,`
2794`),t(),e(37,`
2795
2796`),n(38,"div",3),e(39,`
2797    `),c(40,"router-outlet"),e(41,`
2798`),t(),e(42,`
2799`)),s&2&&(i(18),p(o.snapshotDate),i(2),m("routerLink","overview"),i(3),m("routerLink","/admin/styleguide/components/system-alerts"),i(3),m("routerLink","/admin/styleguide/global/color"),i(4),m("value",o.activeTab),i(4),E(o.tabs))},dependencies:[Mt,$,ct,pt,xt],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var Rm=a=>["../",a],Lm=(a,r)=>r.name,qm=(a,r)=>r.label;function Vm(a,r){if(a&1&&(e(0,`
2800                    `),n(1,"tr"),e(2,`
2801                        `),n(3,"td")(4,"a",13),e(5),t()(),e(6,`
2802                        `),n(7,"td",14),e(8),t(),e(9,`
2803                        `),n(10,"td",14),e(11),t(),e(12,`
2804                        `),n(13,"td"),c(14,"app-sg-verdict",15),t(),e(15,`
2805                    `),t(),e(16,`
2806                `)),a&2){let l=r.$implicit;i(4),m("routerLink",ie(5,Rm,l.tab)),i(),p(l.name),i(3),p(l.what),i(3),p(l.scale),i(3),m("verdict",l.verdict)}}function zm(a,r){if(a&1&&(e(0,`
2807                    `),n(1,"tr"),e(2,`
2808                        `),n(3,"td",14),e(4),t(),e(5,`
2809                        `),n(6,"td")(7,"strong"),e(8),t()(),e(9,`
2810                        `),n(10,"td",2),e(11),t(),e(12,`
2811                    `),t(),e(13,`
2812                `)),a&2){let l=r.$implicit;i(4),p(l.label),i(4),p(l.value),i(3),p(l.note)}}var Il=(()=>
2812{let r=class r{constructor(){this.flavors=xl,this.orphanStats=hl}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-forms-overview"]],standalone:!1,decls:140,vars:1,consts:[[1,"card"],["side","shared"],[1,"text-small","text-grey"],[1,"overflow-x-auto"],[1,"table","table-bordered","table-hover","sg-doc-table"],[2,"width","16rem"],[2,"width","14rem"],[2,"width","8rem"],["id","legend",1,"card"],["id","numbers",1,"card"],[1,"table","table-bordered","sg-doc-table"],[2,"width","6rem"],[2,"width","26rem"],[3,"routerLink"],[1,"text-small"],[3,"verdict"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
2813    `),n(2,"h3"),e(3,"The map"),t(),e(4,`
2814    `),n(5,"app-sg-caption",1),e(6,"every row is a tab on this page"),t(),e(7,`
2815    `),n(8,"p",2),e(9,`
2816        The headline is the ratio. `),n(10,"strong"),e(11,`656 templates carry a form control and 25 contain a
2817        `),n(12,"code"),e(13,"<form>"),t(),e(14," element."),t(),e(15,` Most of the gap is legitimate \u2014
2818        `),n(16,"code"),e(17,"app-dynamic-form"),t(),e(18," emits its own "),n(19,"code"),e(20,"<form>"),t(),e(21,`, covering 326 of them
2819        \u2014 but 305 templates are left with controls and no form at all.
2820    `),t(),e(22,`
2821    `),n(23,"div",3),e(24,`
2822        `),n(25,"table",4),e(26,`
2823            `),n(27,"thead"),e(28,`
2824                `),n(29,"tr"),e(30,`
2825                    `),n(31,"th",5),e(32,"Flavor"),t(),e(33,`
2826                    `),n(34,"th"),e(35,"What it is"),t(),e(36,`
2827                    `),n(37,"th",6),e(38,"Scale"),t(),e(39,`
2828                    `),n(40,"th",7),e(41,"Verdict"),t(),e(42,`
2829                `),t(),e(43,`
2830            `),t(),e(44,`
2831            `),n(45,"tbody"),e(46,`
2832                `),S(47,Vm,17,7,null,null,Lm),t(),e(49,`
2833        `),t(),e(50,`
2834    `),t(),e(51,`
2835`),t(),e(52,`
2836
2837`),n(53,"div",8),e(54,`
2838    `),n(55,"h3"),e(56,"The legend"),t(),e(57,`
2839    `),n(58,"app-sg-caption",1),e(59,"what the verdict pills mean, here and on every tab"),t(),e(60,`
2840    `),n(61,"p",2),e(62,`
2841        Six tables on this page mark each treatment with one of these. They are ordered from
2842        \u201Cuse this\u201D to \u201Cthis is broken\u201D. The distinction that matters most is
2843        `),n(63,"strong"),e(64,"dead"),t(),e(65," against "),n(66,"strong"),e(67,"undefined"),t(),e(68,`: dead CSS is harmless weight, while
2844        undefined markup names a treatment that does not exist, so the template reads as styled and
2845        renders bare. A verdict describes a measurement, never a preference \u2014 a treatment
2846        being rare or old is not by itself drift.
2847    `),t(),e(69,`
2848    `),c(70,"app-sg-verdict-legend"),e(71,`
2849`),t(),e(72,`
2850
2851`),n(73,"div",9),e(74,`
2852    `),n(75,"h3"),e(76,"The headline numbers"),t(),e(77,`
2853    `),n(78,"app-sg-caption",1),e(79,"measured over 1,292 templates, excluding the styleguide"),t(),e(80,`
2854    `),n(81,"div",3),e(82,`
2855        `),n(83,"table",10),e(84,`
2856            `),n(85,"thead"),e(86,`
2857                `),n(87,"tr"),e(88,`
2858                    `),n(89,"th"),e(90,"Measure"),t(),e(91,`
2859                    `),n(92,"th",11),e(93,"Count"),t(),e(94,`
2860                    `),n(95,"th",12),e(96,"Note"),t(),e(97,`
2861                `),t(),e(98,`
2862            `),t(),e(99,`
2863            `),n(100,"tbody"),e(101,`
2864                `),S(102,zm,14,3,null,null,qm),t(),e(104,`
2865        `),t(),e(105,`
2866    `),t(),e(106,`
2867    `),n(107,"p",2),e(108,`
2868        Read the two middle rows together before quoting the number. The 326 templates that host
2869        `),n(109,"code"),e(110,"app-dynamic-form"),t(),e(111," are "),n(112,"strong"),e(113,"not"),t(),e(114,` part of the orphan population \u2014
2870        the component emits a real `),n(115,"code"),e(116,"<form [formGroup]>"),t(),e(117,` of its own
2871        (`),n(118,"code"),e(119,"dynamic-form.component.html:8"),t(),e(120,`), so they get submission, the form landmark and
2872        autofill grouping for free. That is the strongest practical argument the sanctioned system
2873        has, and the bare \u201C25 templates have a `),n(121,"code"),e(122,"<form>"),t(),e(123,`\u201D number reads as
2874        an emergency when it is not.
2875    `),t(),e(124,`
2876    `),n(125,"p",2),e(126,`
2877        The other number worth holding on to: `),n(127,"strong"),e(128,`327 of the 334 templates using the sanctioned
2878        system pass `),n(129,"code"),e(130,'[contentFieldsMode]="true"'),t()(),e(131,` and place every field by hand.
2879        So the controls are standardised and the layout is owned by 327 separate templates. That is
2880        not a defect \u2014 there is no column, section, fieldset, tab or step primitive in
2881        `),n(132,"code"),e(133,"FormMetadata"),t(),e(134,` for them to use \u2014 but it is why \u201Call our forms use the
2882        dynamic form system\u201D and \u201Cour forms look inconsistent\u201D are both true. The
2883        `),n(135,"a",13),e(136,"Architectures"),t(),e(137,` tab is the catalog of what those 327
2884        templates built instead.
2885    `),t(),e(138,`
2886`),t(),e(139,`
2887`)),s&2&&(i(47),E(o.flavors),i(55),E(o.orphanStats),i(33),m("routerLink","../architectures"))},dependencies:[$,X,ve,we],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var $n=(a,r)=>r.value,Ml=(a,r)=>r.id;function Um(a,r){if(a&1){let l=B();e(0,`
2888                    `),n(1,"div",7),e(2,`
2889                        `),n(3,"p-radioButton",52),g("ngModelChange",function(s){w(l);let o=u();return o.state.label=s,C(o.applyState())}),t(),e(4,`
2890                        `),n(5,"label"),e(6),t(),e(7,`
2891                    `),t(),e(8,`
2892                `)}if(a&2){let l=r.$implicit,d=u();i(3),m("value",l.value)("ngModel",d.state.label)("inputId","sgLabel"+l.value),i(2),pe("for","sgLabel"+l.value),i(),p(l.label)}}function Hm(a,r){if(a&1){let l=B();e(0,`
2893                    `),n(1,"div",7),e(2,`
2894                        `),n(3,"p-radioButton",53),M("ngModelChange",function(s){w(l);let o=u();return I(o.state.layout,s)||(o.state.layout=s),C(s)}),t(),e(4,`
2895                        `),n(5,"label"),e(6),t(),e(7,`
2896                    `),t(),e(8,`
2897                `)}if(a&2){let l=r.$implicit,d=u();i(3),m("value",l.value),T("ngModel",d.state.layout),m("inputId","sgLayout"+l.value),i(2),pe("for","sgLayout"+l.value),i(),p(l.label)}}function jm(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(" ",l.note," ")}}function Gm(a,r){if(a&1&&(e(0,`
2898            `),v(1,jm,1,1)),a&2){let l=r.$implicit,d=u();i(),y(l.value===d.state.label?1:-1)}}function $m(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(" ",l.note," ")}}function Km(a,r){if(a&1&&(e(0,`
2899            `),v(1,$m,1,1)),a&2){let l=r.$implicit,d=u();i(),y(l.value===d.state.layout?1:-1)}}function Xm(a,r){a&1&&(e(0,`
2900                                `),n(1,"span",55),e(2,`
2901                                    TinyMCE \u2014 rendered once, at the bottom of this tab, so the
2902                                    page does not boot fifteen editors.
2903                                `),t(),e(3,`
2904                            `))}function Ym(a,r){if(a&1&&(e(0,`
2905                                `),n(1,"app-dynamic-form-field",56),e(2,`
2906                                `),t(),e(3,`
2907                            `)),a&2){let l=u().$implicit,d=u();i(),m("fieldName",l.field.key)("hideLabel",d.state.label==="hidden")("transposeLabel",d.state.label==="transposed")("required",d.state.required)("disabled",d.state.disabled)("viewOnly",d.state.viewOnly)("errorMessage",d.forcedErrorMessage)("showCharacterCount",d.state.characterCount)("styleClass",d.fieldStyleClass)}}function Qm(a,r){if(a&1&&(e(0,`
2908                    `),n(1,"tr"),e(2,`
2909                        `),n(3,"td",54),e(4),t(),e(5,`
2910                        `),n(6,"td")(7,"code",54),e(8),t()(),e(9,`
2911                        `),n(10,"td",54),e(11),t(),e(12,`
2912                        `),n(13,"td"),e(14,`
2913                            `),v(15,Xm,4,0)(16,Ym,4,9),t(),e(17,`
2914                    `),t(),e(18,`
2915                `)),a&2){let l=r.$implicit,d=u();i(4),p(l.id),i(4),p(l.name),i(3),p(l.control),i(4),y(l.id===d.DynamicFormFieldType.HTML_TEXT?15:16)}}function Jm(a,r){if(a&1&&(e(0,`
2916                    `),n(1,"tr"),e(2,`
2917                        `),n(3,"td",54),e(4),t(),e(5,`
2918                        `),n(6,"td")(7,"code",54),e(8),t()(),e(9,`
2919                        `),n(10,"td",54),e(11),t(),e(12,`
2920                        `),n(13,"td"),e(14,`
2921                            `),n(15,"app-dynamic-form-field",56),e(16,`
2922                            `),t(),e(17,`
2923                        `),t(),e(18,`
2924                    `),t(),e(19,`
2925                `)),a&2){let l=r.$implicit,d=u();i(4),p(l.id),i(4),p(l.name),i(3),p(l.control),i(4),m("fieldName",l.field.key)("hideLabel",d.state.label==="hidden")("transposeLabel",d.state.label==="transposed")("required",d.state.required)("disabled",d.state.disabled)("viewOnly",d.state.viewOnly)("errorMessage",d.forcedErrorMessage)("showCharacterCount",d.state.characterCount)("styleClass",d.fieldStyleClass)}}var Fl=(()=>
2925{let r=class r{constructor(){this.DynamicFormFieldType=Y,this.state={required:!1,disabled:!1,viewOnly:!1,showError:!1,note:!1,noteTooltip:!1,labelTooltip:!1,placeholder:!1,characterCount:!1,fieldHeader:!1,label:"visible",layout:"vertical"},this.labelModes=[{value:"visible",label:"Visible",note:"the default \u2014 a <label> above the control"},{value:"hidden",label:"Hidden",note:'[hideLabel]="true" \u2014 no label element at all'},{value:"transposed",label:"Transposed",note:`[transposeLabel]="true" \u2192 .transpose-label, declared in the field component's own stylesheet`},{value:"float",label:"Float",note:"field.floatLabel \u2192 .float-label, 6 uses across 4 templates"}],this.layoutModes=[{value:"vertical",label:"Vertical",note:"the default \u2014 label above control"},{value:"horizontal",label:"Horizontal",note:'[horizontalForm]="true" \u2192 .horizontal-form, 77 templates'},{value:"compact",label:"Compact",note:".compact-form on the host \u2014 tighter label, row and button sizing"},{value:"twoUp",label:"Two-up",note:".form-row + Bootstrap columns per field \u2014 how the 327 projection hosts do it"}],this.fieldTypeRows=[this.typeRow(Y.TEXT,"TEXT","native <input>, sub-typed by DynamicFormFieldTextBoxType",{key:"ft_text",label:"Text"}),this.typeRow(Y.DROPDOWN,"DROPDOWN","<p-select>",{key:"ft_dropdown",label:"Dropdown",options:[{label:"One",value:1},{label:"Two",value:2}]}),this.typeRow(Y.CHECKBOX,"CHECKBOX",'<p-checkbox [binary]="true">',{key:"ft_checkbox",label:"Checkbox"}),this.typeRow(Y.FILE_UPLOAD,"FILE_UPLOAD","<app-file-upload>",{key:"ft_file",label:"File Upload"}),this.typeRow(Y.RADIO_GROUP,"RADIO_GROUP",'<p-radioButton> per option, in role="radiogroup"',{key:"ft_radio",label:"Radio Group",options:[{label:"Blue",value:1},{label:"Red",value:2}]}),this.typeRow(Y.TEXT_AREA,"TEXT_AREA",'native <textarea class="form-text-area">',{key:"ft_textarea",label:"Text Area"}),this.typeRow(Y.MULTISELECT,"MULTISELECT","<p-multiSelect>, virtual-scrolled over 50 options",{key:"ft_multi",label:"Multiselect",options:[{label:"Spring",value:1},{label:"Fall",value:2}]}),this.typeRow(Y.HTML_TEXT,"HTML_TEXT","TinyMCE <editor> \u2014 rendered once on this tab, see the note",{key:"ft_html",label:"Rich Text"}),this.typeRow(Y.CHECKBOX_GROUP,"CHECKBOX_GROUP",'<p-checkbox [binary]="false"> per option, in role="checkboxgroup"',{key:"ft_chkgroup",label:"Checkbox Group",options:[{label:"Email",value:1},{label:"SMS",value:2}]}),this.treeRow(),this.typeRow(Y.SELECT_BUTTON,"SELECT_BUTTON","<p-selectButton>",{key:"ft_selectbtn",label:"Select Button",options:[{label:"Yes",value:1},{label:"No",value:2}]}),this.typeRow(Y.STAR_RATING,"STAR_RATING","<p-rating>",{key:"ft_rating",label:"Star Rating"}),this.typeRow(Y.INPUT_SWITCH,"INPUT_SWITCH","<p-toggleswitch>",{key:"ft_switch",label:"Input Switch"}),this.typeRow(Y.MULTIPLE_FILE_UPLOAD,"MULTIPLE_FILE_UPLOAD","<app-multiple-file-upload>",{key:"ft_files",label:"Multiple File Upload"}),this.typeRow(Y.CHECKBOX_GROUP_PILLS,"CHECKBOX_GROUP_PILLS","hidden checkboxes behind .btn-pill.masked-checkbox labels",{key:"ft_pills",label:"Checkbox Group Pills",options:[{label:"U10",value:1},{label:"U12",value:2}]})],this.textBoxRows=[this.textRow(ae.TEXT,"TEXT","input[type=text]","tb_text","Text"),this.textRow(ae.DATE,"DATE",'<p-datepicker appendTo="body">',"tb_date","Date"),this.textRow(ae.EMAIL,"EMAIL","input[type=email] + email validator","tb_email","Email"),this.textRow(ae.NUMBER,"NUMBER","input[type=number], wheel-blurred","tb_number","Number"),this.textRow(ae.PASSWORD,"PASSWORD","input[type=password] + peek toggle + criteria checklist + strength meter","tb_password","Password"),this.textRow(ae.PHONE,"PHONE","input[type=tel] with appPhoneInputMask","tb_phone","Phone"),this.textRow(ae.URL,"URL","input[type=url] + url validator","tb_url","URL"),this.textRow(ae.CREDIT_CARD,"CREDIT_CARD","input[ccNumber] + live scheme icon row","tb_cc","Credit Card"),this.textRow(ae.BIRTHDATE,"BIRTHDATE",'input[pInputMask="99/99/9999"]',"tb_dob","Birthdate"),this.textRow(ae.COLOR_PICKER,"COLOR_PICKER","<p-colorPicker> + hex input + club-theme menu","tb_color","Color Picker"),this.textRow(ae.YEAR_PICKER,"YEAR_PICKER",'<p-datepicker view="year">',"tb_year","Year Picker"),this.textRow(ae.TIME,"TIME","input[type=time], or a text input + a time <select>","tb_time","Time"),this.textRow(ae.AUTO_COMPLETE,"AUTO_COMPLETE","<p-autoComplete>, driven by a handler on the field object","tb_auto","Autocomplete"),this.textRow(ae.RANGE_SLIDER,"RANGE_SLIDER","<p-slider> + a value readout","tb_range","Range Slider"),this.textRow(ae.CONFIRM_PASSWORD,"CONFIRM_PASSWORD","input[type=password] + a match indicator, no criteria UI","tb_confirm","Confirm Password")],this.allTypeFields=[...this.fieldTypeRows,...this.textBoxRows].map(d=>d.field),this.emptyEntity={},this.verticalFields=r.basicFields(),this.horizontalFields=r.basicFields(),this.viewOnlyFields=r.basicFields(),this.projectedFields=[new z({key:"city",controlName:"city",label:"City",required:!0}),new z({key:"state",controlName:"state",label:"State"}),new z({key:"postalCode",controlName:"postalCode",label:"Zip",validators:[{validatorType:Ga.ZIP_CODE}]})],this.viewOnlyEntity={firstName:"Dana",lastName:"Okafor",emailAddress:"[email protected]",genderID:1,notes:"Read-only rendering differs per field type \u2014 this is the TEXT_AREA one."}}get fieldStyleClass(){return this.state.layout==="twoUp"?"d-inline-block col-md-6":""}get formStyleClass(){return this.state.layout==="compact"?"compact-form":""}get forcedErrorMessage(){return this.state.showError?"This field is showing a forced error message.":void 0}applyState(){for(let d of this.allTypeFields)d.required=this.state.required,d.disabled=this.state.disabled,d.viewOnly=this.state.viewOnly,d.note=this.state.note?"A field note renders here, under the control.":void 0,d.noteTooltipText=this.state.noteTooltip?"The note carries its own tooltip, separate from the label one.":void 0,d.tooltipText=this.state.labelTooltip?"A label tooltip \u2014 an info icon beside the label text.":void 0,d.placeholder=this.state.placeholder?"Placeholder text":void 0,d.showCharacterCount=this.state.characterCount,d.maxLength=this.state.characterCount?40:void 0,d.fieldHeader=this.state.fieldHeader?"A field header":void 0,d.floatLabel=this.state.label==="float"}treeRow(){let d=new z({key:"ft_tree",controlName:"ft_tree",label:"Multi-select Tree",dynamicFormFieldTypeID:Y.MULTI_SELECT_TREE});return d.treeOptions={label:"All Programs",data:0,children:[{label:"Spring 2026",data:1},{label:"Fall 2026",data:2}]},{id:Y.MULTI_SELECT_TREE,name:"MULTI_SELECT_TREE",control:'<p-tree selectionMode="checkbox"> \u2014 bound by [selection], not a form control',field:d}}typeRow(d,s,o,x){return{id:d,name:s,control:o,field:new z({key:x.key,controlName:x.key,label:x.label,dynamicFormFieldTypeID:d,options:x.options})}}textRow(d,s,o,x,h){return{id:d,name:s,control:o,field:new z({key:x,label:h,controlName:x,dynamicFormFieldTypeID:Y.TEXT,dynamicFormFieldTextBoxTypeID:d})}}static basicFields(){return[new z({key:"firstName",controlName:"firstName",label:"First Name",required:!0}),new z({key:"lastName",controlName:"lastName",label:"Last Name",required:!0}),new z({key:"emailAddress",controlName:"emailAddress",label:"Email",required:!0,dynamicFormFieldTextBoxTypeID:ae.EMAIL}),new z({key:"genderID",controlName:"genderID",label:"Gender",dynamicFormFieldTypeID:Y.DROPDOWN,options:[{label:"Female",value:1},{label:"Male",value:2},{label:"Prefer not to say",value:3}]}),new z({key:"notes",controlName:"notes",label:"Notes",dynamicFormFieldTypeID:Y.TEXT_AREA,note:"A field note renders here, under the control."})]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-forms-fields"]],standalone:!1,decls:562,vars:44,consts:[["id","panel",1,"card"],["side","shared"],[1,"text-small","text-grey"],[1,"row"],[1,"col-md-4"],[1,"form-label"],[1,"form-input-group"],[1,"form-check"],["
2925inputId","sgReq",3,"ngModelChange","onChange","ngModel","binary"],["for","sgReq"],["inputId","sgDis",3,"ngModelChange","onChange","ngModel","binary"],["for","sgDis"],["inputId","sgVO",3,"ngModelChange","onChange","ngModel","binary"],["for","sgVO"],["inputId","sgErr",3,"ngModelChange","ngModel","binary"],["for","sgErr"],["inputId","sgNote",3,"ngModelChange","onChange","ngModel","binary"],["for","sgNote"],["inputId","sgNoteTip",3,"ngModelChange","onChange","ngModel","binary"],["for","sgNoteTip"],["inputId","sgLblTip",3,"ngModelChange","onChange","ngModel","binary"],["for","sgLblTip"],["inputId","sgPh",3,"ngModelChange","onChange","ngModel","binary"],["for","sgPh"],["inputId","sgCc",3,"ngModelChange","onChange","ngModel","binary"],["for","sgCc"],["inputId","sgFh",3,"ngModelChange","onChange","ngModel","binary"],["for","sgFh"],[1,"form-input-group","mb-3"],[1,"text-small","text-grey","mt-3"],["id","types",1,"card"],["formID","sgTypeGallery",3,"fields","entity","contentFieldsMode","showSubmitButton","horizontalForm","formClass"],[1,"text-medium-large","mt-4"],[1,"overflow-x-auto"],[1,"table","table-bordered","sg-doc-table"],[2,"width","3rem"],[2,"width","15rem"],[2,"width","22rem"],["fieldName","ft_html"],["id","sanctioned",1,"card"],["side","admin"],["formID","sgVertical","submitButtonText","Save",3,"fields","entity","showCancelButton"],["formID","sgHorizontal","submitButtonText","Save",3,"fields","entity","horizontalForm","showCancelButton"],["formID","sgProjected","submitButtonText","Save",3,"fields","entity","contentFieldsMode"],[1,"form-row"],["fieldName","city","styleClass","d-inline-block col-6 pl-0"],["fieldName","state","styleClass","d-inline-block col-3"],["fieldName","postalCode","styleClass","d-inline-block col-3 pr-0"],[1,"bg-grey-lt","border-all","border-radius","p-3","text-medium","overflow-x-auto"],["formID","sgViewOnly",3,"fields","entity","viewOnly","horizontalForm"],[3,"routerLink"],["id","gotchas",1,"card"],["name","sgLabelMode",3,"ngModelChange","value","ngModel","inputId"],["name","sgLayoutMode",3,"ngModelChange","value","ngModel","inputId"],[1,"text-small"],[1,"text-small","text-grey-lt"],[3,"fieldName","hideLabel","transposeLabel","required","disabled","viewOnly","errorMessage","showCharacterCount","styleClass"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
2926    `),n(2,"h3"),e(3,"The permutation panel"),t(),e(4,`
2927    `),n(5,"app-sg-caption",1),e(6,"every toggle below drives all 29 controls at once"),t(),e(7,`
2928    `),n(8,"p",2),e(9,`
2929        `),n(10,"code"),e(11,"DynamicFormComponent"),t(),e(12," takes 48 inputs, "),n(13,"code"),e(14,"DynamicFormFieldComponent"),t(),e(15,`
2930        takes over seventy, and `),n(16,"code"),e(17,"DynamicFormField"),t(),e(18,` carries roughly sixty options. Reading
2931        that list tells you nothing about what any of it looks like, and no static page can render
2932        the combinations. So the controls below are the real fields, and these switches are the real
2933        state \u2014 flip one and watch which of the 29 controls actually respond. Several do not,
2934        and that is the point.
2935    `),t(),e(19,`
2936    `),n(20,"div",3),e(21,`
2937        `),n(22,"div",4),e(23,`
2938            `),n(24,"legend",5),e(25,"Field state"),t(),e(26,`
2939            `),n(27,"div",6),e(28,`
2940                `),n(29,"div",7),e(30,`
2941                    `),n(31,"p-checkbox",8),M("ngModelChange",function(h){return I(o.state.required,h)||(o.state.required=h),h}),g("onChange",function(){return o.applyState()}),t(),e(32,`
2942                    `),n(33,"label",9),e(34,"required \u2014 asterisk + validator"),t(),e(35,`
2943                `),t(),e(36,`
2944                `),n(37,"div",7),e(38,`
2945                    `),n(39,"p-checkbox",10),M("ngModelChange",function(h){return I(o.state.disabled,h)||(o.state.disabled=h),h}),g("onChange",function(){return o.applyState()}),t(),e(40,`
2946                    `),n(41,"label",11),e(42,"disabled \u2014 "),n(43,"code"),e(44,"field.disabled"),t(),e(45,`, not the
2947                        `),n(46,"code"),e(47,"[disabled]"),t(),e(48," input"),t(),e(49,`
2948                `),t(),e(50,`
2949                `),n(51,"div",7),e(52,`
2950                    `),n(53,"p-checkbox",12),M("ngModelChange",function(h){return I(o.state.viewOnly,h)||(o.state.viewOnly=h),h}),g("onChange",function(){return o.applyState()}),t(),e(54,`
2951                    `),n(55,"label",13),e(56,"view-only \u2014 "),n(57,"code"),e(58,"field.viewOnly"),t(),e(59,`, renders
2952                        `),n(60,"code"),e(61,".f-value"),t()(),e(62,`
2953                `),t(),e(63,`
2954                `),n(64,"div",7),e(65,`
2955                    `),n(66,"p-checkbox",14),M("ngModelChange",function(h){return I(o.state.showError,h)||(o.state.showError=h),h}),t(),e(67,`
2956                    `),n(68,"label",15),e(69,"show error \u2014 forced via "),n(70,"code"),e(71,"[errorMessage]"),t()(),e(72,`
2957                `),t(),e(73,`
2958            `),t(),e(74,`
2959        `),t(),e(75,`
2960        `),n(76,"div",4),e(77,`
2961            `),n(78,"legend",5),e(79,"Field decoration"),t(),e(80,`
2962            `),n(81,"div",6),e(82,`
2963                `),n(83,"div",7),e(84,`
2964                    `),n(85,"p-checkbox",16),M("ngModelChange",function(h){return I(o.state.note,h)||(o.state.note=h),h}),g("onChange",function(){return o.applyState()}),t(),e(86,`
2965                    `),n(87,"label",17),e(88,"note \u2014 "),n(89,"code"),e(90,"field.note"),t()(),e(91,`
2966                `),t(),e(92,`
2967                `),n(93,"div",7),e(94,`
2968                    `),n(95,"p-checkbox",18),M("ngModelChange",function(h){return I(o.state.noteTooltip,h)||(o.state.noteTooltip=h),h}),g("onChange",function(){return o.applyState()}),t(),e(96,`
2969                    `),n(97,"label",19),e(98,"note tooltip \u2014 "),n(99,"code"),e(100,"field.noteTooltipText"),t()(),e(101,`
2970                `),t(),e(102,`
2971                `),n(103,"div",7),e(104,`
2972                    `),n(105,"p-checkbox",20),M("ngModelChange",function(h){return I(o.state.labelTooltip,h)||(o.state.labelTooltip=h),h}),g("onChange",function(){return o.applyState()}),t(),e(106,`
2973                    `),n(107,"label",21),e(108,"label tooltip \u2014 "),n(109,"code"),e(110,"field.tooltipText"),t()(),e(111,`
2974                `),t(),e(112,`
2975                `),n(113,"div",7),e(114,`
2976                    `),n(115,"p-checkbox",22),M("ngModelChange",function(h){return I(o.state.placeholder,h)||(o.state.placeholder=h),h}),g("onChange",function(){return o.applyState()}),t(),e(116,`
2977                    `),n(117,"label",23),e(118,"placeholder \u2014 "),n(119,"code"),e(120,"field.placeholder"),t()(),e(121,`
2978                `),t(),e(122,`
2979                `),n(123,"div",7),e(124,`
2980                    `),n(125,"p-checkbox",24),M("ngModelChange",function(h){return I(o.state.characterCount,h)||(o.state.characterCount=h),h}),g("onChange",function(){return o.applyState()}),t(),e(126,`
2981                    `),n(127,"label",25),e(128,"character count \u2014 needs a "),n(129,"code"),e(130,"maxLength"),t(),e(131,`; already
2982                        forced on here, see below`),t(),e(132,`
2983                `),t(),e(133,`
2984                `),n(134,"div",7),e(135,`
2985                    `),n(136,"p-checkbox",26),M("ngModelChange",function(h){return I(o.state.fieldHeader,h)||(o.state.fieldHeader=h),h}),g("onChange",function(){return o.applyState()}),t(),e(137,`
2986                    `),n(138,"label",27),e(139,"field header \u2014 "),n(140,"code"),e(141,"f
2986ield.fieldHeader"),t(),e(142,", undefined class"),t(),e(143,`
2987                `),t(),e(144,`
2988            `),t(),e(145,`
2989        `),t(),e(146,`
2990        `),n(147,"div",4),e(148,`
2991            `),n(149,"legend",5),e(150,"Label"),t(),e(151,`
2992            `),n(152,"div",28),e(153,`
2993                `),S(154,Um,9,5,null,null,$n),t(),e(156,`
2994            `),n(157,"legend",5),e(158,"Layout"),t(),e(159,`
2995            `),n(160,"div",6),e(161,`
2996                `),S(162,Hm,9,5,null,null,$n),t(),e(164,`
2997        `),t(),e(165,`
2998    `),t(),e(166,`
2999    `),n(167,"p",29),e(168,`
3000        `),n(169,"strong"),e(170,"Label:"),t(),e(171,`
3001        `),S(172,Gm,2,1,null,null,$n),e(174,`
3002        \xA0\xB7\xA0
3003        `),n(175,"strong"),e(176,"Layout:"),t(),e(177,`
3004        `),S(178,Km,2,1,null,null,$n),t(),e(180,`
3005    `),n(181,"p",2),e(182,`
3006        `),n(183,"strong"),e(184,"There are two ways to set most of these, and only one of them works."),t(),e(185,`
3007        `),n(186,"code"),e(187,"DynamicFormFieldComponent"),t(),e(188," declares "),n(189,"code"),e(190,"@Input() viewOnly"),t(),e(191,`,
3008        `),n(192,"code"),e(193,"@Input() disabled"),t(),e(194," and "),n(195,"code"),e(196,"@Input() required"),t(),e(197,`, and it also reads
3009        `),n(198,"code"),e(199,"field.viewOnly"),t(),e(200,", "),n(201,"code"),e(202,"field.disabled"),t(),e(203," and "),n(204,"code"),e(205,"field.required"),t(),e(206,` off
3010        the field object \u2014 but nothing copies one onto the other. The template reads
3011        `),n(207,"code"),e(208,"field.viewOnly"),t(),e(209," 56 times and the input "),n(210,"em"),e(211,"zero"),t(),e(212,` times, so
3012        `),n(213,"code"),e(214,"[viewOnly]"),t(),e(215,` on a projected field does nothing at all; the only thing that turns
3013        a field read-only is the form-level `),n(216,"code"),e(217,"[viewOnly]"),t(),e(218,`, which works because
3014        `),n(219,"code"),e(220,"setAllFieldsViewOnly()"),t(),e(221," writes "),n(222,"code"),e(223,"field.viewOnly = true"),t(),e(224,` on every field.
3015        `),n(225,"code"),e(226,"[disabled]"),t(),e(227," is read on 5 lines against 22 for "),n(228,"code"),e(229,"field.disabled"),t(),e(230,`, so it
3016        reaches the autocomplete, the slider, the text input and the select and silently skips the
3017        other two dozen. Only `),n(231,"code"),e(232,"required"),t(),e(233,` is read both ways. So this panel writes the
3018        field object, not the inputs.
3019    `),t(),e(234,`
3020    `),n(235,"p",2),e(236,`
3021        Three more things the panel makes visible that a table cannot. `),n(237,"strong"),e(238,`Not every control
3022        honours every flag even through the field object`),t(),e(239," \u2014 "),n(240,"code"),e(241,"viewOnly"),t(),e(242,` has
3023        a bespoke read-only rendering per type and some types have none, and the checkbox group
3024        reads `),n(243,"code"),e(244,"field.viewOnly"),t(),e(245," without "),n(246,"code"),e(247,"field.disabled"),t(),e(248,`.
3025        `),n(249,"strong"),e(250,"Character count is not actually yours to control"),t(),e(251,`: the
3026        `),n(252,"code"),e(253,"_showCharacterCount"),t(),e(254,` getter is
3027        `),n(255,"code"),e(256,"showCharacterCount || siteDataService.isAdmin"),t(),e(257,`, so on an admin-only page like
3028        this one the switch cannot turn it off \u2014 and it only ever appears on 5 of the 29
3029        types, only while focused. And `),n(258,"strong"),e(259,`a forced error is the only way to see the error
3030        state`),t(),e(260,`, because a pristine control never shows one \u2014 which is why validation
3031        display is so inconsistent across the app: most screens are built without anyone ever
3032        seeing it.
3033    `),t(),e(261,`
3034`),t(),e(262,`
3035
3036`),n(263,"div",30),e(264,`
3037    `),n(265,"h3"),e(266,"Every field type"),t(),e(267,`
3038    `),n(268,"app-sg-caption",1),e(269,"DynamicFormFieldType \xD7 DynamicFormFieldTextBoxType"),t(),e(270,`
3039    `),n(271,"p",2),e(272,`
3040        Fifteen field types, and the `),n(273,"code"),e(274,"TEXT"),t(),e(275,` type splits again into fifteen textbox
3041        sub-types \u2014 29 distinct controls in total. The rows below are built by iterating the
3042        real exported enums, so this table cannot drift from the model. The integer is the wire
3043        contract: the C# `),n(276,"code"),e(277,"DynamicFormFieldType"),t(),e(278,` is byte-for-byte identical.
3044    `),t(),e(279,`
3045    `),n(280,"p",2),e(281,`
3046        Both tables are projected into a single `),n(282,"code"),e(283,"[contentFieldsMode]"),t(),e(284,` form, so each
3047        control is backed by a real `),n(285,"code"),e(286,"FormControl"),t(),e(287,`. That is not a presentation choice
3048        \u2014 `),n(288,"code"),e(289,"app-dynamic-form-field"),t(),e(290," binds "),n(291,"code"),e(292,"[formGroup]"),t(),e(293,`, so one rendered
3049        outside a form throws.
3050    `),t(),e(294,`
3051
3052    `),n(295,"app-dynamic-form",31),e(296,`
3053
3054    `),n(297,"h4",32),e(298,"DynamicFormFieldType"),t(),e(299,`
3055    `),n(300,"div",33),e(301,`
3056        `),n(302,"table",34),e(303,`
3057            `),n(304,"thead"),e(305,`
3058                `),n(306,"tr"),e(307,`
3059                    `),n(308,"th",35),e(309,"ID"),t(),e(310,`
3060                    `),n(311,"th",36),e(312,"Name"),t(),e(313,`
3061                    `),n(314,"th",37),e(315,"Renders"),t(),e(316,`
3062                    `),n(317,"th"),e(318,"Live"),t(),e(319,`
3063                `),t(),e(320,`
3064            `),t(),e(321,`
3065            `),n(322,"tbody"),e(323,`
3066                `),S(324,Qm,19,4,null,null,Ml),t(),e(326,`
3067        `),t(),e(327,`
3068    `),t(),e(328,`
3069
3070    `),n(329,"h4",32),e(330,"DynamicFormFieldTextBoxType"),t(),e(331,`
3071    `),n(332,"p",2),e(333,`
3072        All of these are `),n(334,"code"),e(335,"dynamicFormFieldTypeID = TEXT"),t(),e(336,`. The sub-type decides whether
3073        you get a native input, a PrimeNG overlay control, or a bespoke composite.
3074        `),n(337,"code"),e(338,"CONFIRM_PASSWORD"),t(),e(339," maps to "),n(340,"code"),e(341,'type="password"'),t(),e(342,` deliberately \u2014
3075        omitting it would fall back to `),n(343,"code"),e(344,'type="text"'),t(),e(345,` and expose the value.
3076    `),t(),e(346,`
3077    `),n(347,"div",33),e(348,`
3078        `),n(349,"table",34),e(350,`
3079            `),n(351,"thead"),e(352,`
3080                `),n(353,"tr"),e(354,`
3081                    `),n(355,"th",35),e(356,"ID"),t(),e(357,`
3082                    `),n(358,"th",36),e(359,"Name"),t(),e(360,`
3083                    `),n(361,"th",37),e(362,"Renders"),t(),e(363,`
3084                    `),n(364,"th"),e(365,"Live"),t(),e(366,`
3085                `),t(),e(367,`
3086            `),t(),e(368,`
3087            `),n(369,"tbody"),e(370,`
3088                `),S(371,Jm,20,12,null,null,Ml),t(),e(373,`
3089        `),t(),e(374,`
3090    `),t(),e(375,`
3091
3092    `),n(376,"h4",32),e(377,"HTML_TEXT"),t(),e(378,`
3093    `),n(379,"app-sg-caption",1),e(380,"TinyMCE, configured by DynamicFormService.tinySettings"),t(),e(381,`
3094    `),c(382,"app-dynamic-form-field",38),e(383,`
3095
3096    `),t(),e(384,`
3097`),t(),e(385,`
3098
3099`),n(386,"div",39),e(387,`
3100    `),n(388,"h3"),e(389,"The four form modes"),t(),e(390,`
3101    `),n(391,"app-sg-caption",1),e(392,"app/shared/modules/form/dynamic-form \u2014 334 templates"),t(),e(393,`
3102    `),n(394,"p",2),e(395,`
3103        These four are form-level rather than field-level, so they are fixed samples rather than
3104        panel-driven. Each carries its own `),n(396,"code"),e(397,"formID"),t(),e(398,`, because
3105        `),n(399,"code"),e(400,"DynamicFormService"),t(),e(401,` is provided by the module rather than per component: one
3106        instance serves the whole tab and filters submits by that id. Submit one and the others stay
3107        quiet \u2014 without unique ids they would all light up together.
3108    `),t(),e(402,`
3109
3110    `),n(403,"h4",32),e(404,"Auto-render, vertical"),t(),e(405,`
3111    `),n(406,"app-sg-caption",40),e(407,"[fields] only \u2014 the component loops. 7 of 334 templates."),t(),e(408,`
3112    `),n(409,"app-dynamic-form",41),e(410,`
3113    `),t(),e(411,`
3114
3115    `),n(412,"h4",32),e(413,"Auto-render, horizontal"),t(),e(414,`
3116    `),n(415,"app-sg-caption",40),e(416,'[horizontalForm]="true" \u2014 77 templates carry .horizontal-form'),t(),e(417,`
3117    `),n(418,"p",2),e(419,`
3118        The same field array. `),n(420,"code"),e(421,".horizontal-form"),t(),e(422,` moves the label beside the control and
3119        carries roughly 180 lines of nested per-control overrides in
3120        `),n(423,"code"),e(424,"2_layout/forms.scss"),t(),e(425,". Three other classes \u2014 "),n(426,"code"),e(427,".form-dropdown"),t(),e(428,`,
3121        `),n(429,"code"),e(430,".wide-label"),t(),e(431,", "),n(432,"code"),e(433,".inline-form"),t(),e(434,` \u2014 only do anything inside it.
3122    `),t(),e(435,`
3123    `),n(436,"app-dynamic-form",42),e(437,`
3124    `),t(),e(438,`
3125
3126    `),n(439,"h4",32),e(440,"Content-projection mode \u2014 the house style"),t(),e(441,`
3127    `),n(442,"app-sg-caption",40),e(443,'[contentFieldsMode]="true" \u2014 327 of 334 templates'),t(),e(444,`
3128    `),n(445,"p",2),e(446,`
3129        The host places each field by `),n(447,"code"),e(448,"fieldName"),t(),e(449,` and supplies its own column classes.
3130        This is how every multi-column form in the app is built; there is no column or section
3131        primitive in the metadata.
3132    `),t(),e(450,`
3133    `),n(451,"app-dynamic-form",43),e(452,`
3134        `),n(453,"div",44),e(454,`
3135            `),c(455,"app-dynamic-form-field",45),e(456,`
3136            `),c(457,"app-dynamic-form-field",46),e(458,`
3137            `),c(459,"app-dynamic-form-field",47),e(460,`
3138        `),t(),e(461,`
3139    `),t(),e(462,`
3140    `),n(463,"pre",48),e(464,`<app-dynamic-form [contentFieldsMode]="true" [fields]="fields" [entity]="entity">
3141  <div class="form-row">
3142    <app-dynamic-form-field fieldName="city"  styleClass="d-inline-block col-6 pl-0"></app-dynamic-form-field>
3143    <app-dynamic-form-field fieldName="state" styleClass="d-inline-block col-3"></app-dynamic-form-field>
3144  </div>
3145</app-dynamic-form>`),t(),e(465,`
3146
3147    `),n(466,"h4",32),e(467,"View-only mode"),t(),e(468,`
3148    `),n(469,"app-sg-caption",40),e(470,'[viewOnly]="true" \u2014 every field type has its own read-only rendering'),t(),e(471,`
3149    `),n(472,"app-dynamic-form",49),e(473,`
3150    `),t(),e(474,`
3151    `),n(475,"p",2),e(476,`
3152        The read-only values render into `),n(477,"code"),e(478,'<span class="f-value">'),t(),e(479,`. No stylesheet in
3153        the app declares `),n(480,"code"),e(481,".f-value"),t(),e(482,` \u2014 see the
3154        `),n(483,"a",50),e(484,"Defects"),t(),e(485,` tab.
3155    `),t(),e(486,`
3156`),t(),e(487,`
3157
3158`),n(488,"div",51),e(489,`
3159    `),n(490,"h3"),e(491,"Two things that bite when you build a field by hand"),t(),e(492,`
3160    `),n(493,"app-sg-caption",1),e(494,"found by building this tab"),t(),e(495,`
3161    `),n(496,"p",2),e(497,`
3162        `),n(498,"strong")(499,"code"),e(500,"DynamicFormField.controlName"),t(),e(501," is typed optional and is mandatory."),t(),e(502,`
3163        `),n(503,"code"),e(504,"dynamic-form-field.model.ts:237"),t(),e(505,` is
3164        `),n(506,"code"),e(507,"this.controlName = fieldOptions.controlName.replace(regex, '')"),t(),e(508,` \u2014 an
3165        unguarded dereference. Both `),n(509,"code"),e(510,"DynamicFormField"),t(),e(511,` and
3166        `),n(512,"code"),e(513,"DynamicFormFieldOptions"),t(),e(514," declare it "),n(515,"code"),e(516,"controlName?: string"),t(),e(517,`, and every
3167        sibling property in that constructor has a `),n(518,"code"),e(519,"||"),t(),e(520,` or ternary default
3168        (`),n(521,"code"),e(522,"name"),t(),e(523," even defaults to "),n(524,"code"),e(525,"key"),t(),e(526,`). So
3169        `),n(527,"code"),e(528),t(),e(529,` throws at
3170        construction. It never shows up in production because every real field arrives from backend
3171        metadata with `),n(530,"code"),e(531,"ControlName"),t(),e(532," populated, and "),n(533,"code"),e(534,"strictNullChecks"),t(),e(535,` is off so
3172        the compiler cannot flag it. The one-line fix is
3173        `),n(536,"code"),e(537,"fieldOptions.controlName || fieldOptions.key"),t(),e(538,`. Not applied \u2014 this page
3174        documents, it does not repair.
3175    `),t(),e(539,`
3176    `),n(540,"p",2),e(541,`
3177        `),n(542,"strong"),e(543,"Never bind "),n(544,"code"),e(545,'[fields]="aGetter()"'),t(),e(546," or "),n(547,"code"),e(548),t(),e(549,`
3178        inline.`),t(),e(550," Both hand "),n(551,"code"),e(552,"DynamicFormComponent"),t(),e(553,` a fresh reference on every
3179        change-detection pass, and its `),n(554,"code"),e(555,"ngOnChanges"),t(),e(556,` rebuilds the entire form each time
3180        \u2014 every keystroke resets the control you are typing into. Every field array and entity
3181        on this tab is a stable `),n(557,"code"),e(558,"readonly"),t(),e(559,` property for exactly that reason, which is also
3182        why the permutation panel mutates the existing field objects instead of building new ones.
3183    `),t(),e(560,`
3184`),t(),e(561,`
3185`)),s&2&&(i(31),T("ngModel",o.state.required),m("binary",!0),i(8),T("ngModel",o.state.disabled),m("binary",!0),i(14),T("ngModel",o.state.viewOnly),m("binary",!0),i(13),T("ngModel",o.state.showError),m("binary",!0),i(19),T("ngModel",o.state.note),m("binary",!0),i(10),T("ngModel",o.state.noteTooltip),m("binary",!0),i(10),T("ngModel",o.state.labelTooltip),m("binary",!0),i(10),T("ngModel",o.state.placeholder),m("binary",!0),i(10),T("ngModel",o.state.characterCount),m("binary",!0),i(11),T("ngModel",o.state.fieldHeader),m("binary",!0),i(18),E(o.labelModes),i(8),E(o.layoutModes),i(10),E(o.labelModes),i(6),E(o.layoutModes),i(117),m("fields",o.allTypeFields)("entity",o.emptyEntity)("contentFieldsMode",!0)("showSubmitButton",!1)("horizontalForm",o.state.layout==="horizontal")("formClass",o.formStyleClass),i(29),E(o.fieldTypeRows),i(47),E(o.textBoxRows),i(38),m("fields",o.verticalFields)("entity",o.emptyEntity)("showCancelButton",!0),i(27),m("fields",o.horizontalFields)("entity",o.emptyEntity)("horizontalForm",!0)("showCancelButton",!0),i(15),m("fields",o.projectedFields)("entity",o.emptyEntity)("contentFieldsMode",!0),i(21),m("fields",o.viewOnlyFields)("entity",o.viewOnlyEntity)("viewOnly",!0)("horizontalForm",!0),i(11),m("routerLink","../defects"),i(45),q("new DynamicFormField(","{"," key: 'x', label: 'X' ","}",")"),i(20),f('[entity]="',"{}",'"'))},dependencies:[U,H,Be,Ne,$,Oe,tt,X],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var $i=(a,r)=>r.idiom,Zm=(a,r)=>r.slot,ec=(a,r)=>r.label,tc=(a,r)=>r.markup;function nc(a,r){if(a&1&&(e(0,`
3186                    `),n(1,"tr"),e(2,`
3187                        `),n(3,"td")(4,"code",85),e(5),t()(),e(6,`
3188                        `),n(7,"td",5),e(8),t(),e(9,`
3189                        `),n(10,"td",85),e(11),t(),e(12,`
3190                        `),n(13,"td"),c(14,"app-sg-verdict",86),t(),e(15,`
3191                    `),t(),e(16,`
3192                `)),a&2){let l=r.$implicit;i(5),p(l.idiom),i(3),p(l.home),i(3),p(l.files||"\u2014"),i(3),m("verdict",l.verdict)}}function ic(a,r){if(a&1&&(e(0,`
3193                    `),n(1,"tr"),e(2,`
3194                        `),n(3,"td")(4,"code",85),e(5),t()(),e(6,`
3195                        `),n(7,"td",85),e(8),t(),e(9,`
3196                        `),n(10,"td",5),e(11),t(),e(12,`
3197                        `),n(13,"td",85),e(14),t(),e(15,`
3198                        `),n(16,"td",85),e(17),t(),e(18,`
3199                    `),t(),e(19,`
3200                `)),a&2){let l=r.$implicit;i(5),p(l.slot),i(3),p(l.host),i(3),p(l.kind),i(3),p(l.what),i(3),p(l.files)}}function ac(a,r){if(a&1&&(e(0,`
3201                        `),n(1,"option",87),e(2),t(),e(3,`
3202                    `)),a&2){let l=r.$implicit;i(),m("ngValue",l.value),i(),p(l.label)}}function rc(a,r){a&1&&(e(0," "),n(1,"span",71),e(2,"*"),t(),e(3," "))}function oc(a,r){a&1&&(e(0," "),n(1,"span",89),e(2,"*"),t(),e(3," "))}function lc(a,r){a&1&&(e(0," "),n(1,"span",90),e(2,"*"),t(),e(3," "))}function sc(a,r){a&1&&(e(0," "),n(1,"span",91),e(2,"*"),t(),e(3," "))}function dc(a,r){a&1&&(e(0," "),n(1,"span",92),e(2," *"),t(),e(3," "))}function mc(a,r){a&1&&(e(0," "),n(1,"span",93),e(2,"*"),t(),e(3," "))}function cc(a,r){a&1&&(e(0," "),n(1,"span"),e(2,"*"),t(),e(3," "))}function pc(a,r){if(a&1&&(e(0,`
3203                    `),n(1,"tr"),e(2,`
3204                        `),n(3,"td"),e(4,`
3205                            `),n(5,"span",88),e(6,`
3206                                `),v(7,rc,4,0)(8,oc,4,0)(9,lc,4,0)(10,sc,4,0)(11,dc,4,0)(12,mc,4,0)(13,cc,4,0),e(14,`
3207                            `),t(),e(15,`
3208                        `),t(),e(16,`
3209                        `),n(17,"td")(18,"code",85),e(19),t()(),e(20,`
3210                        `),n(21,"td",85),e(22),t(),e(23,`
3211                        `),n(24,"td",5),e(25),t(),e(26,`
3212                        `),n(27,"td"),c(28,"app-sg-verdict",86),t(),e(29,`
3213                    `),t(),e(30,`
3214                `)),a&2){let l,d=r.$implicit;i(7),y((l=d.kind)==="asterisk-aria"?7:l==="asterisk-no-aria"?8:l==="text-danger"?9:l==="required"?10:l==="text-red"?11:l==="indicator"?12:13),i(12),p(d.markup),i(3),p(d.uses),i(3),p(d.defined),i(3),m("verdict",d.verdict)}}function xc(a,r){if(a&1&&(e(0,`
3215                    `),n(1,"tr"),e(2,`
3216                        `),n(3,"td")(4,"code",85),e(5),t()(),e(6,`
3217                        `),n(7,"td",5),e(8),t(),e(9,`
3218                        `),n(10,"td",85),e(11),t(),e(12,`
3219                        `),n(13,"td",85),e(14),t(),e(15,`
3220                        `),n(16,"td"),c(17,"app-sg-verdict",86),t(),e(18,`
3221                    `),t(),e(19,`
3222                `)),a&2){let l=r.$implicit;i(5),p(l.idiom),i(3),p(l.home),i(3),p(l.uses),i(3),p(l.files),i(3),m("verdict",l.verdict)}}function hc(a,r){if(a&1&&(e(0,`
3223                    `),n(1,"tr"),e(2,`
3224                        `),n(3,"td")(4,"code",85),e(5),t()(),e(6,`
3225                        `),n(7,"td",5),e(8),t(),e(9,`
3226                        `),n(10,"td",85),e(11),t(),e(12,`
3227                        `),n(13,"td",85),e(14),t(),e(15,`
3228                        `),n(16,"td"),c(17,"app-sg-verdict",86),t(),e(18,`
3229                    `),t(),e(19,`
3230                `)),a&2){let l=r.$implicit;i(5),p(l.idiom),i(3),p(l.home),i(3),p(l.uses),i(3),p(l.files),i(3),m("verdict",l.verdict)}}var Al=(()=>{let r=class r{constructor(){this.layoutAxes=ul,this.slots=gl,this.asterisks=fl,this.errorIdioms=bl,this.footerIdioms=Sl,this.demoOptions=ft,this.linkOrigin="yourclub.sprocketsports.com",this.slotFields=[new z({key:"customURL",controlName:"customURL",label:"Custom URL"})],this.emptyEntity={},this.demo={}}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-forms-layout"]],standalone:!1,decls:664,vars:13,consts:[["inputGroupStart",""],["inputGroupEnd",""],[3,"compact"],["id","axes",1,"card"],["side","shared"],[1,"text-small","text-grey"],[3,"routerLink"],[1,"overflow-x-auto"],[1,"table","table-bordered","sg-doc-table"],[2,"width","20rem"],[2,"width","6rem"],[2,"width","8rem"],["id","slots",1,"card"],[2,"width","15rem"],[2,"width","5rem"],[1,"text-medium-large","mt-4"],["side","admin"],["formID","sgSlots","submitButtonText","Save",3,"fields","entity","contentFieldsMode","showCancelButton"],["beforeFormContent","",1,"sg-slot-outline","p-2","mb-2","text-smallest"],["beforeFormFieldsContent","",1,"sg-slot-outline","p-2","mb-2","text-smallest"],["fieldName","customURL"],[1,"text-smallest"],["afterInputContent","",1,"sg-slot-outline","p-2","mt-1","text-smallest"],["extraMessage","",1,"sg-slot-outline","p-2","mt-1","text-smallest"],["beforeSubmitButtonsContent","",1,"sg-slot-outline","p-2","mb-2","text-smallest"],["afterSubmitButtonsContent","",1,"sg-slot-outline","p-2","mt-2","text-smallest"],["afterFormContent","",1,"sg-slot-outline","p-2","mt-2","text-smallest"],["id","labels",1,"card"],[1,"row"],[1,"col-md-6"],[1,"form-group"],["for","sgNativeSelect"],["id","sgNativeSelect","name","sgNativeSelect",3,"ngModelChange","ngModel"],["for","sgPrimeSelect"],["inputId","sgPrimeSelect","optionLabel","label","optionValue","value","appendTo","body","styleClass","full-width",3,"ngModelChange","options","ngModel"],[1,"bg-grey-lt","border-all","border-radius","p-3","text-medium","overflow-x-auto"],["
3230id","asterisk",1,"card"],[2,"width","26rem"],[2,"width","4rem"],["id","errors",1,"card"],[2,"width","18rem"],[1,"col-md-4"],[1,"form-group","form-error"],["for","sgErrField"],["id","sgErrField","type","text","value","not-an-email","readonly",""],[1,"form-error-message"],[1,"form-error"],["alertType","error",3,"isInline"],["id","footers",1,"card"],[1,"row","form-action","no-gutters"],[1,"col","left-buttons"],["type","button",1,"btn","btn-lg"],[1,"col","right-buttons","text-right"],["type","button",1,"btn","btn-primary","btn-lg"],["slot","secondary"],["type","button",1,"btn"],["slot","primary"],["type","button",1,"btn","btn-primary"],["id","dividers",1,"card"],["for","sgSecA"],["id","sgSecA","type","text","placeholder","Enter text"],[1,"form-section"],["for","sgSecB"],["id","sgSecB","type","text","placeholder","Enter text"],["id","contracts-live",1,"card"],[1,"form-row"],["for","sgRowA"],["id","sgRowA","type","text","placeholder","Enter text"],["for","sgRowB"],["id","sgRowB","type","text","placeholder","Enter text"],["for","sgNote"],["aria-hidden","true",1,"required-asterisk"],["id","sgNote","type","text","placeholder","00"],[1,"form-note"],[1,"form-note-text"],[1,"form-label"],[1,"form-input-group"],[1,"form-check","form-check-inline"],["name","sgPref","value","email","inputId","sgPrefEmail"],["for","sgPrefEmail"],["name","sgPref","value","sms","inputId","sgPrefSms"],["for","sgPrefSms"],[1,"form-container"],["for","sgContained"],["
3230id","sgContained","type","text","placeholder","[email protected]"],[1,"text-small"],[3,"verdict"],[3,"ngValue"],[1,"form-group","d-inline-block","pl-3","mb-0"],[1,"required-asterisk"],[1,"text-danger"],[1,"required"],[1,"text-red"],[1,"required-indicator"]],template:function(s,o){if(s&1){let x=B();c(0,"app-sg-verdict-legend",2),e(1,`
3231
3232`),n(2,"div",3),e(3,`
3233    `),n(4,"h3"),e(5,"The layout axes"),t(),e(6,`
3234    `),n(7,"app-sg-caption",4),e(8,"what makes two dynamic forms look different"),t(),e(9,`
3235    `),n(10,"p",5),e(11,`
3236        The system has no grid, section, fieldset, tab or step primitive. Layout is a handful of
3237        booleans plus whatever Bootstrap classes the host injects per field, which is why the counts
3238        below are so lopsided \u2014 one axis is used by nearly everything and the rest by a handful
3239        of screens each. Flip between them live on the
3240        `),n(12,"a",6),e(13,"Fields"),t(),e(14,` tab.
3241    `),t(),e(15,`
3242    `),n(16,"div",7),e(17,`
3243        `),n(18,"table",8),e(19,`
3244            `),n(20,"thead"),e(21,`
3245                `),n(22,"tr"),e(23,`
3246                    `),n(24,"th",9),e(25,"Axis"),t(),e(26,`
3247                    `),n(27,"th"),e(28,"Home"),t(),e(29,`
3248                    `),n(30,"th",10),e(31,"Files"),t(),e(32,`
3249                    `),n(33,"th",11),e(34,"Verdict"),t(),e(35,`
3250                `),t(),e(36,`
3251            `),t(),e(37,`
3252            `),n(38,"tbody"),e(39,`
3253                `),S(40,nc,17,4,null,null,$i),t(),e(42,`
3254        `),t(),e(43,`
3255    `),t(),e(44,`
3256    `),n(45,"p",5),e(46,`
3257        `),n(47,"code"),e(48,"fieldContainerClass"),t(),e(49,` is set from the backend \u2014 the registration-agent view
3258        models declare `),n(50,"code"),e(51,"TwoUpLeft"),t(),e(52," / "),n(53,"code"),e(54,"TwoUpRight"),t(),e(55,` as
3259        `),n(56,"code"),e(57,"d-inline-block half-width align-top"),t(),e(58,` pairs, and two controllers stamp
3260        `),n(59,"code"),e(60,"form-group-md"),t(),e(61,` onto every field. So a form's column layout can be decided in C#,
3261        in the Angular host, or in neither, and nothing on the field says which.
3262    `),t(),e(62,`
3263`),t(),e(63,`
3264
3265`),n(64,"div",12),e(65,`
3266    `),n(66,"h3"),e(67,"The projection slots"),t(),e(68,`
3267    `),n(69,"app-sg-caption",4),e(70,"thirteen named slots \u2014 the extension API"),t(),e(71,`
3268    `),n(72,"p",5),e(73,`
3269        This is how the 327 projection-mode hosts add anything the metadata cannot describe: a URL
3270        prefix, a unit suffix, a reset link, an extra message under a control.
3271        `),n(74,"code"),e(75,"app-dynamic-form"),t(),e(76,` exposes six slots and
3272        `),n(77,"code"),e(78,"app-dynamic-form-field"),t(),e(79," exposes seven. Two are "),n(80,"code"),e(81,"TemplateRef"),t(),e(82,`s reached
3273        by a template reference variable; the rest are attribute selectors on a projected element.
3274    `),t(),e(83,`
3275    `),n(84,"div",7),e(85,`
3276        `),n(86,"table",8),e(87,`
3277            `),n(88,"thead"),e(89,`
3278                `),n(90,"tr"),e(91,`
3279                    `),n(92,"th",13),e(93,"Slot"),t(),e(94,`
3280                    `),n(95,"th",10),e(96,"Host"),t(),e(97,`
3281                    `),n(98,"th",11),e(99,"Kind"),t(),e(100,`
3282                    `),n(101,"th"),e(102,"Where it lands"),t(),e(103,`
3283                    `),n(104,"th",14),e(105,"Files"),t(),e(106,`
3284                `),t(),e(107,`
3285            `),t(),e(108,`
3286            `),n(109,"tbody"),e(110,`
3287                `),S(111,ic,20,5,null,null,Zm),t(),e(113,`
3288        `),t(),e(114,`
3289    `),t(),e(115,`
3290
3291    `),n(116,"h4",15),e(117,"All six form slots, filled and outlined"),t(),e(118,`
3292    `),n(119,"app-sg-caption",16),e(120,"each dashed box is one slot"),t(),e(121,`
3293    `),n(122,"app-dynamic-form",17),e(123,`
3294        `),n(124,"div",18),e(125,"beforeFormContent \u2014 outside the <form>"),t(),e(126,`
3295        `),n(127,"div",19),e(128,"beforeFormFieldsContent \u2014 inside the <form>, above the fields"),t(),e(129,`
3296        `),n(130,"app-dynamic-form-field",20),e(131,`
3297            `),O(132,0,0),e(134,`
3298                `),n(135,"span",21),e(136),t(),e(137,`
3299            `),N(),e(138,`
3300            `),O(139,1,1),e(141,`
3301                `),n(142,"span",21),e(143,".html"),t(),e(144,`
3302            `),N(),e(145,`
3303            `),n(146,"div",22),e(147,"afterInputContent"),t(),e(148,`
3304            `),n(149,"div",23),e(150,"extraMessage"),t(),e(151,`
3305        `),t(),e(152,`
3306        `),n(153,"div",24),e(154,"beforeSubmitButtonsContent"),t(),e(155,`
3307        `),n(156,"div",25),e(157,"afterSubmitButtonsContent"),t(),e(158,`
3308        `),n(159,"div",26),e(160,"afterFormContent \u2014 outside the <form>"),t(),e(161,`
3309    `),t(),e(162,`
3310    `),n(163,"p",5),e(164,`
3311        The `),n(165,"code"),e(166,"inputGroupStart"),t(),e(167," / "),n(168,"code"),e(169,"inputGroupEnd"),t(),e(170,` pair is the only one in wide
3312        use \u2014 12 and 14 templates. It renders a real `),n(171,"code"),e(172,"p-inputgroup-addon"),t(),e(173,` around
3313        the control, which is why the prefix sits flush against the input rather than beside it.
3314        Note the `),n(174,"code"),e(175,"#inputGroupStart"),t(),e(176," template reference variable "),n(177,"em"),e(178,"and"),t(),e(179,` the bare
3315        `),n(180,"code"),e(181,"inputGroupStart"),t(),e(182,` attribute: the component declares both a
3316        `),n(183,"code"),e(184,"@ContentChild"),t(),e(185," and an "),n(186,"code"),e(187,"ng-content select"),t(),e(188,`, and the CMS settings rail
3317        supplies both. The attribute is what actually projects.
3318    `),t(),e(189,`
3319`),t(),e(190,`
3320
3321`),n(191,"div",27),e(192,`
3322    `),n(193,"h3"),e(194,"Labels"),t(),e(195,`
3323    `),n(196,"app-sg-caption",4),e(197,"1,657 labels across ~315 templates"),t(),e(198,`
3324    `),n(199,"p",5),e(200,`
3325        `),n(201,"strong"),e(202,"723 of 1,657 labels carry a "),n(203,"code"),e(204,"for"),t(),e(205," attribute"),t(),e(206,` \u2014 44%. The
3326        most common label class in the app is `),n(207,"code"),e(208,"sr-only"),t(),e(209,` (161 uses): a visually hidden
3327        label on a search box or filter. That is a legitimate pattern, and it is also why the raw
3328        label count overstates how many labels a user can see.
3329    `),t(),e(210,`
3330    `),n(211,"p",5),e(212,`
3331        The pairing rule differs by control, which is most of why the gap exists. A native input
3332        takes `),n(213,"code"),e(214,"for"),t(),e(215," \u2192 "),n(216,"code"),e(217,"id"),t(),e(218,`. A PrimeNG control renders its own inner
3333        element, so the label must point at `),n(219,"code"),e(220,"inputId"),t(),e(221,`, not at the component's
3334        `),n(222,"code"),e(223,"id"),t(),e(224,`. Both correct forms are below; the third, which looks identical and does
3335        nothing, is on the `),n(225,"a",6),e(226,"Defects"),t(),e(227,` tab.
3336    `),t(),e(228,`
3337    `),n(229,"div",28),e(230,`
3338        `),n(231,"div",29),e(232,`
3339            `),n(233,"app-sg-caption",16),e(234,"native \u2014 for \u2192 id"),t(),e(235,`
3340            `),n(236,"div",30),e(237,`
3341                `),n(238,"label",31),e(239,"Season"),t(),e(240,`
3342                `),n(241,"select",32),M("ngModelChange",function(_){return w(x),I(o.demo.nativeSelect,_)||(o.demo.nativeSelect=_),C(_)}),e(242,`
3343                    `),S(243,ac,4,2,null,null,ec),t(),e(245,`
3344            `),t(),e(246,`
3345        `),t(),e(247,`
3346        `),n(248,"div",29),e(249,`
3347            `),n(250,"app-sg-caption",16),e(251,"PrimeNG \u2014 for \u2192 inputId"),t(),e(252,`
3348            `),n(253,"div",30),e(254,`
3349                `),n(255,"label",33),e(256,"Season"),t(),e(257,`
3350                `),n(258,"p-select",34),M("ngModelChange",function(_){return w(x),I(o.demo.primeSelect,_)||(o.demo.primeSelect=_),C(_)}),t(),e(259,`
3351            `),t(),e(260,`
3352        `),t(),e(261,`
3353    `),t(),e(262,`
3354    `),n(263,"pre",35),e(264,`<label for="season">Season</label>
3355<select id="season">\u2026</select>                <!-- native: for -> id      -->
3356<p-select inputId="season"></p-select>         <!-- PrimeNG: for -> inputId -->`),t(),e(265,`
3357`),t(),e(266,`
3358
3359`),n(267,"div",36),e(268,`
3360    `),n(269,"h3"),e(270,"Required markers"),t(),e(271,`
3361    `),n(272,"app-sg-caption",4),e(273,"seven markups for one idea"),t(),e(274,`
3362    `),n(275,"p",5),e(276,`
3363        Seven different spans mark a field required, rendered below in order of how often they are
3364        used. Three of the seven reference classes that `),n(277,"strong"),e(278,`no global stylesheet
3365        declares`),t(),e(279,`, so those asterisks inherit body colour instead of the orange the design
3366        intends. `),n(280,"strong"),e(281,"28 of the 74 required markers in the app render unstyled"),t(),e(282,` \u2014
3367        and because the markup reads as deliberate at every call site, nothing about the template
3368        suggests it.
3369    `),t(),e(283,`
3370    `),n(284,"div",7),e(285,`
3371        `),n(286,"table",8),e(287,`
3372            `),n(288,"thead"),e(289,`
3373                `),n(290,"tr"),e(291,`
3374                    `),n(292,"th",14),e(293,"Rendered"),t(),e(294,`
3375                    `),n(295,"th",37),e(296,"Markup"),t(),e(297,`
3376                    `),n(298,"th",38),e(299,"Uses"),t(),e(300,`
3377                    `),n(301,"th"),e(302,"Declared"),t(),e(303,`
3378                    `),n(304,"th",11),e(305,"Verdict"),t(),e(306,`
3379                `),t(),e(307,`
3380            `),t(),e(308,`
3381            `),n(309,"tbody"),e(310,`
3382                `),S(311,pc,31,5,null,null,tc),t(),e(313,`
3383        `),t(),e(314,`
3384    `),t(),e(315,`
3385    `),n(316,"p",5),e(317,`
3386        One more thing the rendering shows: `),n(318,"code"),e(319,".required-asterisk"),t(),e(320,` is
3387        `),n(321,"code"),e(322,"position: absolute; left: -0.4rem"),t(),e(323,`, so it only lands correctly inside a
3388        positioned `),n(324,"code"),e(325,".form-group"),t(),e(326,`. The cells above are wrapped in one for exactly that
3389        reason \u2014 drop the same span into an unpositioned container and it flies to the nearest
3390        positioned ancestor.
3391    `),t(),e(327,`
3392`),t(),e(328,`
3393
3394`),n(329,"div",39),e(330,`
3395    `),n(331,"h3"),e(332,"Validation display"),t(),e(333,`
3396    `),n(334,"app-sg-caption",4),e(335,"eleven idioms, three of them systematic"),t(),e(336,`
3397    `),n(337,"p",5),e(338,`
3398        There is no shared validation-message component. The dynamic form has two of its own
3399        \u2014 a per-field `),n(339,"code"),e(340,".form-error-message"),t(),e(341,` and a form-level
3400        `),n(342,"code"),e(343,".form-error"),t(),e(344," \u2014 and "),n(345,"code"),e(346,"app-inline-alert"),t(),e(347,` covers everything that is
3401        a notice rather than a field error. The remaining eight are ad hoc. Bootstrap's
3402        `),n(348,"code"),e(349,"is-invalid"),t(),e(350," / "),n(351,"code"),e(352,"invali
3402d-feedback"),t(),e(353,` survives in two files and is the
3403        only genuinely deprecated pair here.
3404    `),t(),e(354,`
3405    `),n(355,"div",7),e(356,`
3406        `),n(357,"table",8),e(358,`
3407            `),n(359,"thead"),e(360,`
3408                `),n(361,"tr"),e(362,`
3409                    `),n(363,"th",40),e(364,"Idiom"),t(),e(365,`
3410                    `),n(366,"th"),e(367,"Home"),t(),e(368,`
3411                    `),n(369,"th",14),e(370,"Uses"),t(),e(371,`
3412                    `),n(372,"th",14),e(373,"Files"),t(),e(374,`
3413                    `),n(375,"th",11),e(376,"Verdict"),t(),e(377,`
3414                `),t(),e(378,`
3415            `),t(),e(379,`
3416            `),n(380,"tbody"),e(381,`
3417                `),S(382,xc,20,5,null,null,$i),t(),e(384,`
3418        `),t(),e(385,`
3419    `),t(),e(386,`
3420
3421    `),n(387,"h4",15),e(388,"The three systematic ones, rendered"),t(),e(389,`
3422    `),n(390,"div",28),e(391,`
3423        `),n(392,"div",41),e(393,`
3424            `),n(394,"app-sg-caption",4),e(395,".form-error-message \u2014 per field"),t(),e(396,`
3425            `),n(397,"div",42),e(398,`
3426                `),n(399,"label",43),e(400,"Email"),t(),e(401,`
3427                `),c(402,"input",44),e(403,`
3428                `),n(404,"div",45),e(405,"Email must be a valid email address"),t(),e(406,`
3429            `),t(),e(407,`
3430        `),t(),e(408,`
3431        `),n(409,"div",41),e(410,`
3432            `),n(411,"app-sg-caption",4),e(412,".form-error \u2014 form level"),t(),e(413,`
3433            `),n(414,"div",46),e(415,"That season is already published."),t(),e(416,`
3434        `),t(),e(417,`
3435        `),n(418,"div",41),e(419,`
3436            `),n(420,"app-sg-caption",4),e(421,"app-inline-alert \u2014 324 templates"),t(),e(422,`
3437            `),n(423,"app-inline-alert",47),e(424,`
3438                Fix the highlighted fields before saving.
3439            `),t(),e(425,`
3440        `),t(),e(426,`
3441    `),t(),e(427,`
3442    `),n(428,"p",5),e(429,`
3443        To see the dynamic form produce these itself rather than by hand, use the
3444        `),n(430,"strong"),e(431,"show error"),t(),e(432," switch on the "),n(433,"a",6),e(434,"Fields"),t(),e(435,` tab.
3445        `),n(436,"code"),e(437,".text-danger"),t(),e(438,` appears 83 times as an error treatment and has no global
3446        declaration \u2014 the same finding as the required markers, at four times the scale.
3447    `),t(),e(439,`
3448`),t(),e(440,`
3449
3450`),n(441,"div",48),e(442,`
3451    `),n(443,"h3"),e(444,"Action rows"),t(),e(445,`
3452    `),n(446,"app-sg-caption",4),e(447,"two systems and a long ad-hoc tail"),t(),e(448,`
3453    `),n(449,"p",5),e(450,`
3454        Where the buttons go has two real answers \u2014 `),n(451,"code"),e(452,".form-action"),t(),e(453,` when the dynamic
3455        form owns the row, `),n(454,"code"),e(455,"app-dialog-footer"),t(),e(456,` when a dialog does \u2014 and several
3456        hundred hand-rolled flex rows that arrive at approximately the same place.
3457    `),t(),e(457,`
3458    `),n(458,"div",7),e(459,`
3459        `),n(460,"table",8),e(461,`
3460            `),n(462,"thead"),e(463,`
3461                `),n(464,"tr"),e(465,`
3462                    `),n(466,"th",9),e(467,"Idiom"),t(),e(468,`
3463                    `),n(469,"th"),e(470,"Home"),t(),e(471,`
3464                    `),n(472,"th",14),e(473,"Uses"),t(),e(474,`
3465                    `),n(475,"th",14),e(476,"Files"),t(),e(477,`
3466                    `),n(478,"th",11),e(479,"Verdict"),t(),e(480,`
3467                `),t(),e(481,`
3468            `),t(),e(482,`
3469            `),n(483,"tbody"),e(484,`
3470                `),S(485,hc,20,5,null,null,$i),t(),e(487,`
3471        `),t(),e(488,`
3472    `),t(),e(489,`
3473
3474    `),n(490,"h4",15),e(491,"The two systems rendered"),t(),e(492,`
3475    `),n(493,"app-sg-caption",16),e(494,'.form-action \u2014 buttonsPosition="spread"'),t(),e(495,`
3476    `),n(496,"div",49),e(497,`
3477        `),n(498,"div",50),e(499,`
3478            `),n(500,"button",51),e(501,"Cancel"),t(),e(502,`
3479        `),t(),e(503,`
3480        `),n(504,"div",52),e(505,`
3481            `),n(506,"button",51),e(507,"Delete"),t(),e(508,`
3482            `),n(509,"button",53),e(510,"Save"),t(),e(511,`
3483        `),t(),e(512,`
3484    `),t(),e(513,`
3485    `),n(514,"app-sg-caption",16),e(515,"app-dialog-footer \u2014 primary / secondary slots"),t(),e(516,`
3486    `),n(517,"app-dialog-footer"),e(518,`
3487        `),O(519,54),e(520,`
3488            `),n(521,"button",55),e(522,"Cancel"),t(),e(523,`
3489        `),N(),e(524,`
3490        `),O(525,56),e(526,`
3491            `),n(527,"button",57),e(528,"Save"),t(),e(529,`
3492        `),N(),e(530,`
3493    `),t(),e(531,`
3494`),t(),e(532,`
3495
3496`),n(533,"div",58),e(534,`
3497    `),n(535,"h3"),e(536,"Section dividers"),t(),e(537,`
3498    `),n(538,"app-sg-caption",4),e(539,"hr.form-section \u2014 66 uses across 26 templates"),t(),e(540,`
3499    `),n(541,"p",5),e(542,`
3500        The one way a long form gets broken into sections, and it is a horizontal rule rather than a
3501        primitive: `),n(543,"code"),e(544,"3_modules/templates.scss:676"),t(),e(545,` styles it only on an
3502        `),n(546,"code"),e(547,"<hr>"),t(),e(548,", so the same class on a "),n(549,"code"),e(550,"<div>"),t(),e(551,` does nothing.
3503    `),t(),e(552,`
3504    `),n(553,"div",30),e(554,`
3505        `),n(555,"label",59),e(556,"Contact name"),t(),e(557,`
3506        `),c(558,"input",60),e(559,`
3507    `),t(),e(560,`
3508    `),c(561,"hr",61),e(562,`
3509    `),n(563,"div",30),e(564,`
3510        `),n(565,"label",62),e(566,"Emergency contact"),t(),e(567,`
3511        `),c(568,"input",63),e(569,`
3512    `),t(),e(570,`
3513`),t(),e(571,`
3514
3515`),n(572,"div",64),e(573,`
3516    `),n(574,"h3"),e(575,"The live layout contracts, rendered"),t(),e(576,`
3517    `),n(577,"app-sg-caption",16),e(578,"the classes a projection-mode host reaches for"),t(),e(579,`
3518    `),n(580,"app-sg-caption",16),e(581,".form-row \u2014 siblings side by side"),t(),e(582,`
3519    `),n(583,"div",65),e(584,`
3520        `),n(585,"div",30),e(586,`
3521            `),n(587,"label",66),e(588,"First Name"),t(),e(589,`
3522            `),c(590,"input",67),e(591,`
3523        `),t(),e(592,`
3524        `),n(593,"div",30),e(594,`
3525            `),n(595,"label",68),e(596,"Last Name"),t(),e(597,`
3526            `),c(598,"input",69),e(599,`
3527        `),t(),e(600,`
3528    `),t(),e(601,`
3529    `),n(602,"app-sg-caption",16),e(603,".form-group with .form-note and a required asterisk"),t(),e(604,`
3530    `),n(605,"div",30),e(606,`
3531        `),n(607,"label",70),e(608,"Jersey Number "),n(609,"span",71),e(610,"*"),t()(),e(611,`
3532        `),c(612,"input",72),e(613,`
3533        `),n(614,"div",73),e(615,`
3534            `),n(616,"div",74),e(617,"Two digits. Must be unique on the roster."),t(),e(618,`
3535        `),t(),e(619,`
3536    `),t(),e(620,`
3537    `),n(621,"app-sg-caption",16),e(622,"legend.form-label + .form-input-group + .form-check-inline"),t(),e(623,`
3538    `),n(624,"div",30),e(625,`
3539        `),n(626,"legend",75),e(627,"Contact preference"),t(),e(628,`
3540        `),n(629,"div",76),e(630,`
3541            `),n(631,"div",77),e(632,`
3542                `),c(633,"p-radioButton",78),e(634,`
3543                `),n(635,"label",79),e(636,"Email"),t(),e(637,`
3544            `),t(),e(638,`
3545            `),n(639,"div",77),e(640,`
3546                `),c(641,"p-radioButton",80),e(642,`
3547                `),n(643,"label",81),e(644,"Text message"),t(),e(645,`
3548            `),t(),e(646,`
3549        `),t(),e(647,`
3550    `),t(),e(648,`
3551    `),n(649,"app-sg-caption",16),e(650,".form-container \u2014 the narrow standalone form wrapper"),t(),e(651,`
3552    `),n(652,"div",82),e(653,`
3553        `),n(654,"div",30),e(655,`
3554            `),n(656,"label",83),e(657,"Email"),t(),e(658,`
3555            `),c(659,"input",84),e(660,`
3556        `),t(),e(661,`
3557    `),t(),e(662,`
3558`),t(),e(663,`
3559`)}s&2&&(m("compact",!0),i(12),m("routerLink","../fields"),i(28),E(o.layoutAxes),i(71),E(o.slots),i(11),m("fields",o.slotFields)("entity",o.emptyEntity)("contentFieldsMode",!0)("showCancelButton",!0),i(14),f("",o.linkOrigin,"/club/"),i(89),m("routerLink","../defects"),i(16),T("ngModel",o.demo.nativeSelect),i(2),E(o.demoOptions),i(15),m("options",o.demoOptions),T("ngModel",o.demo.primeSelect),i(53),E(o.asterisks),i(71),E(o.errorIdioms),i(41),m("isInline",!0),i(10),m("routerLink","../fields"),i(52),E(o.footerIdioms))},dependencies:[Fe,Pe,ya,U,H,Be,Ne,$,le,it,ye,tt,X,ve,we],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var yc=()=>[],wc=(a,r)=>r.name;function Cc(a,r){if(a&1&&(e(0,`
3560                    `),n(1,"tr"),e(2,`
3561                        `),n(3,"td")(4,"a",132),e(5),t()(),e(6,`
3562                        `),n(7,"td")(8,"code",133),e(9),t()(),e(10,`
3563                        `),n(11,"td",133),e(12),t(),e(13,`
3564                        `),n(14,"td",133),e(15),t(),e(16,`
3565                        `),n(17,"td"),c(18,"app-sg-verdict",134),t(),e(19,`
3566                    `),t(),e(20,`
3567                `)),a&2){let l=r.$implicit;i(4),m("routerLink",V(7,yc))("fragment",l.anchor),i(),p(l.name),i(4),p(l.home),i(3),p(l.what),i(3),p(l.scale),i(3),m("verdict",l.verdict)}}function _c(a,r){if(a&1){let l=B();e(0,`
3568            `),n(1,"app-dialog-footer"),e(2,`
3569                `),O(3,135),e(4,`
3570                    `),n(5,"button",89),g("click",function(){w(l);let s=u();return C(s.dialogOpen=!1)}),e(6,"Cancel"),t(),e(7,`
3571                `),N(),e(8,`
3572                `),O(9,136),e(10,`
3573                    `),n(11,"button",81),g("click",function(){w(l);let s=u();return C(s.dialogOpen=!1)}),e(12,"Save"),t(),e(13,`
3574                `),N(),e(14,`
3575            `),t(),e(15,`
3576        `)}}function kc(a,r){if(a&1){let l=B();e(0,`
3577        `),n(1,"div",137),e(2,`
3578            `),n(3,"div",138),e(4,`
3579                `),n(5,"div",139),e(6,`
3580                    `),n(7,"span"),e(8,"Add Time Slot(s)"),t(),e(9,`
3581                    `),n(10,"app-close-icon",140),g("close",function(){w(l);let s=u();return C(s.sprocketDialogOpen=!1)}),t(),e(11,`
3582                `),t(),e(12,`
3583                `),n(13,"div",141),e(14,`
3584                    `),n(15,"div",35),e(16,`
3585                        `),n(17,"label",142),e(18,"Start time"),t(),e(19,`
3586                        `),c(20,"input",143),e(21,`
3587                    `),t(),e(22,`
3588                    `),n(23,"app-dialog-footer"),e(24,`
3589                        `),O(25,136),e(26,`
3590                            `),n(27,"button",81),g("click",function(){w(l);let s=u();return C(s.sprocketDialogOpen=!1)}),e(28,"Add"),t(),e(29,`
3591                        `),N(),e(30,`
3592                    `),t(),e(31,`
3593                `),t(),e(32,`
3594            `),t(),e(33,`
3595        `),t(),e(34,`
3596    `)}}function Tc(a,r){if(a&1&&(e(0,`
3597                `),n(1,"app-dynamic-form",144),e(2,`
3598                    `),n(3,"div",84),e(4,`
3599                        `),c(5,"app-dynamic-form-field",145),e(6,`
3600                        `),c(7,"app-dynamic-form-field",146),e(8,`
3601                    `),t(),e(9,`
3602                `),t(),e(10,`
3603            `)),a&2){let l=u();i(),m("fields",l.wizardStepOneFields)("entity",l.emptyEntity)("contentFieldsMode",!0)("showSubmitButton",!1)("showCancelButton",!1)}}function Ic(a,r){if(a&1&&(e(0,`
3604                `),n(1,"app-dynamic-form",147),e(2,`
3605                    `),n(3,"div",84),e(4,`
3606                        `),c(5,"app-dynamic-form-field",148),e(6,`
3607                        `),c(7,"app-dynamic-form-field",149),e(8,`
3608                    `),t(),e(9,`
3609                `),t(),e(10,`
3610            `)),a&2){let l=u();i(),m("fields",l.wizardStepTwoFields)("entity",l.emptyEntity)("contentFieldsMode",!0)("showSubmitButton",!1)("showCancelButton",!1)}}function Mc(a,r){a&1&&(e(0,`
3611                `),n(1,"p",5),e(2,`
3612                    The review step reads values off the previous steps' form components \u2014
3613                    which is why the host holds a `),n(3,"code"),e(4,"@Vie
3613wChild"),t(),e(5,` per step rather than
3614                    one form.
3615                `),t(),e(6,`
3616            `))}var Wl=(()=>{let r=class r{constructor(){this.architectures=El,this.demoOptions=ft,this.demoTeams=kl,this.emptyEntity={},this.cmsFields=[new z({key:"title",controlName:"title",label:"Title",required:!0}),new z({key:"isFeatured",controlName:"isFeatured",label:"Feature this page",dynamicFormFieldTypeID:Y.CHECKBOX}),new z({key:"customURL",controlName:"customURL",label:"Custom URL"}),new z({key:"metaTitle",controlName:"metaTitle",label:"Meta title"}),new z({key:"metaDescription",controlName:"metaDescription",label:"Meta description",dynamicFormFieldTypeID:Y.TEXT_AREA})],this.dialogFields=[new z({key:"dlgFirstName",controlName:"dlgFirstName",label:"First Name",required:!0}),new z({key:"dlgLastName",controlName:"dlgLastName",label:"Last Name",required:!0})],this.drawerFields=[new z({key:"drwSubject",controlName:"drwSubject",label:"Subject"}),new z({key:"drwBody",controlName:"drwBody",label:"Message",dynamicFormFieldTypeID:Y.TEXT_AREA})],this.wizardStepOneFields=[new z({key:"wzName",controlName:"wzName",label:"Program Name",required:!0}),new z({key:"wzSeason",controlName:"wzSeason",label:"Season",dynamicFormFieldTypeID:Y.DROPDOWN,options:[{label:"Spring 2026",value:1},{label:"Fall 2026",value:2}]})],this.wizardStepTwoFields=[new z({key:"wzFee",controlName:"wzFee",label:"Registration Fee"}),new z({key:"wzCap",controlName:"wzCap",label:"Roster Cap"})],this.tabbedOneFields=[new z({key:"tabName",controlName:"tabName",label:"Team Name"})],this.tabbedTwoFields=[new z({key:"tabColor",controlName:"tabColor",label:"Team Color"})],this.accordionFields=[new z({key:"accVisible",controlName:"accVisible",label:"Visible to parents",dynamicFormFieldTypeID:Y.CHECKBOX}),new z({key:"accNotes",controlName:"accNotes",label:"Internal notes",dynamicFormFieldTypeID:Y.TEXT_AREA})],this.stickyFields=[new z({key:"stA",controlName:"stA",label:"Address Line 1"}),new z({key:"stB",controlName:"stB",label:"Address Line 2"}),new z({key:"stC",controlName:"stC",label:"City"}),new z({key:"stD",controlName:"stD",label:"State"}),new z({key:"stE",controlName:"stE",label:"Zip"}),new z({key:"stF",controlName:"stF",label:"Country"})],this.wizardSteps=[{label:"Basics"},{label:"Pricing"},{label:"Review"}],this.linkOrigin="yourclub.sprocketsports.com",this.cmsTab=0,this.tabbedTab=0,this.wizardStep=0,this.dialogOpen=!1,this.sprocketDialogOpen=!1,this.drawerOpen=!1,this.advancedFlyout={open:!1},this.horizontalFlyout={open:!1},this.demo={},this.calendarFilters={practices:!0,games:!0,other:!1}}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-forms-architectures"]],standalone:!1,decls:997,vars:92,consts:[["inputGroupStart",""],["footer",""],[3,"compact"],["id","index",1,"card"],["side","shared"],[1,"text-small","text-grey"],[3,"routerLink"],[1,"overflow-x-auto"],[1,"table","table-bordered","table-hover","sg-doc-table"],[2,"width","14rem"],[2,"width","18rem"],[2,"width","10rem"],[2,"width","8rem"],["id","cms-rail",1,"card"],["side","admin"],[1,"row"],[1,"col-lg-8"],[1,"border-all","border-radius","p-4","text-center","text-grey","text-small",2,"min-height","22rem"],[1,"col-lg-4"],[1,"pb-settings-column","admin-wrapper","border-left"],[1,"pb-editor-tabs",3,"valueChange","value"],[3,"value"],["formID","sgCms","buttonsPosition","left","submitButtonText","Save",3,"fields","entity","contentFieldsMode","showCancelButton"],["fieldName","title"],[1,"pb-checkbox"],["fieldName","isFeatured"],[1,"input-group-input"],["fieldName","customURL"],[1,"text-smallest"],["value","0"],["fieldName","metaTitle"],["fieldName","metaDescription"],["id","calendar-rail",1,"card"],[1,"col","col-md-auto","calendar-filters"],[1,"card",2,"min-width","16rem"],[1,"form-group"],["for","sgCalProgram"],["inputId","sgCalProgram","optionLabel","label","optionValue","value","appendTo","body","styleClass","full-width",3,"options"],["for","sgCalTeam"],["inputId","sgCalTeam","optionLabel","name","optionValue","value","placeholder","All","appendTo","body",3,"autofocusFilter","options","filter","showToggleAll","maxSelectedLabels"],[1,"form-label"],[1,"form-input-group"],[1,"form-check"],["
3616inputId","sgCalPr",3,"ngModelChange","ngModel"],["for","sgCalPr"],["inputId","sgCalGm",3,"ngModelChange","ngModel"],["for","sgCalGm"],["inputId","sgCalOt",3,"ngModelChange","ngModel"],["for","sgCalOt"],[1,"col"],[1,"border-all","border-radius","p-4","text-center","text-grey","text-small",2,"min-height","18rem"],["id","admin-filter",1,"card"],[3,"showAdvanced","hideReset","showAdvancedFlyout"],["primary",""],[1,"col-md-4"],["for","sgAdminSearch",1,"sr-only"],["id","sgAdminSearch","pInputText","","type","text","placeholder","Search",3,"ngModelChange","ngModel"],["advanced",""],["for","sgAdvSeason"],["inputId","sgAdvSeason","optionLabel","label","optionValue","value","appendTo","body","styleClass","full-width",3,"options"],["for","sgAdvAsOf"],["inputId","sgAdvAsOf","dateFormat","mm/dd/yy","placeholder","MM/DD/YYYY","appendTo","body",3,"ngModelChange","ngModel"],[1,"resetBtn",3,"click"],[1,"far","fa-redo-alt"],["id","admin-filter-horizontal",1,"card"],[3,"horizontal","showAdvanced","showAdvancedFlyout"],["horizontalFilters",""],["for","sgHzSeason"],["inputId","sgHzSeason","optionLabel","label","optionValue","value","appendTo","body","styleClass","full-width",3,"options"],["horizontalFiltersAdvancedFilters",""],["for","sgHzTeams"],["inputId","sgHzTeams","optionLabel","name","optionValue","value","placeholder","All","appendTo","body",3,"autofocusFilter","options","filter","maxSelectedLabels"],[1,"border-all","border-radius","p-4","text-center","text-grey","text-small"],["id","report-grid",1,"card"],["for","sgFilterSeason"],["inputId","sgFilterSeason","optionLabel","label","optionValue","value","appendTo","body","styleClass","full-width",3,"ngModelChange","ngModel","options"],["for","sgFilterTeams"],["inputId","sgFilterTeams","optionLabel","name","optionValue","value","placeholder","All","appendTo","body",3,"ngModelChange","autofocusFilter","ngModel","options","filter","showToggleAll","maxSelectedLabels"],["for","sgFilterAsOf"],["inputId","sgFilterAsOf","dateFormat","mm/dd/yy","placeholder","MM/DD/YYYY","appendTo","body",3,"ngModelChange","ngModel"],["id","dialog",1,"card"],["type","button",1,"btn","btn-primary",3,"click"],["header","Add Player","styleClass","mediumWidthDialog",3,"visibleChange","visible","modal"],["formID","sgDialog",3,"fields","entity","contentFieldsMode","showSubmitButton","showCancelButton","modalContent"],[1,"form-row"],["fieldName","dlgFirstName"],["fieldName","dlgLastName"],[1,"text-small","text-grey","mt-2"],["id","sprocket-dialog",1,"card"],["type","button",1,"btn",3,"click"],["id","drawer",1,"card"],["header","Message Attendees","position","right",3,"visibleChange","visible"],["formID","sgDrawer","submitButtonText","Send",3,"fields","entity","contentFieldsMode","showCancelButton"],["fieldName","drwSubject"],["fieldName","drwBody"],["id","wizard",1,"card"],[3,"model","readonly","activeIndex"],[1,"mt-3"],[1,"row","form-action","no-gutters"],[1,"col","left-buttons"],["type","button",1,"btn","btn-lg",3,"click","disabled"],[1,"col","right-buttons","text-right"],["type","button",1,"btn","btn-primary","btn-lg",3,"click","disabled"],["id","tabbed",1,"card"],[3,"valueChange","value"],["formID","sgTabbed1","submitButtonText","Save",3,"fields","entity","contentFieldsMode","showCancelButton"],["fieldName","tabName"],["formID","sgTabbed2","submitButtonText","Save",3,"fields","entity","contentFieldsMode","showCancelButton"],["fieldName","tabColor"],["id","accordion",1,"card"],["formID","sgAccordion","submitButtonText","Save",3,"fields","entity","contentFieldsMode","showCancelButton"],["fieldName","accVisible"],["value","1"],["fieldName","accNotes"],["id","sticky",1,"card"],["formID","sgSticky","submitButtonText","Save",3,"fields","entity","buttonsSticky","showCancelButton"],["id","narrow",1,"card"],[1,"form-container"],["for","sgNarrowEmail"],["id","sgNarrowEmail","type","text","placeholder","[email protected]"],["for","sgNarrowPass"],["id","sgNarrowPass","type","password"],["type","button",1,"btn","btn-primary","btn-lg"],["id","mini",1,"card"],[1,"col-md-6"],["panelTitle","Registrations"],["slot","filters",1,"row","card-filters"],[1,"col-12"],[1,"form-group","mb-0"],["for","sgMiniScope",1,"sr-only"],["inputId","sgMiniScope","optionLabel","label","optionValue","value","appendTo","body","styleClass","full-width",3,"ngModelChange","ngModel","options"],["id","missing",1,"card"],[3,"routerLink","fragment"],[1,"text-small"],[3,"verdict"],["slot","secondary"],["slot","primary"],[1,"sprocket-dialog"],[1,"sprocket-dialog-inner","mediumWidthDialog"],[1,"sprocket-dialog-header"],[3,"close"],[1,"sprocket-dialog-content","m-3"],["for","sgSprocketSlot"],["id","sgSprocketSlot","type","text","placeholder","6:00 PM"],["formID","sgWizard1",3,"fields","entity","contentFieldsMode","showSubmitButton","showCancelButton"],["fieldName","wzName"],["fieldName","wzSeason"],["formID","sgWizard2",3,"fields","entity","contentFieldsMode","showSubmitButton","showCancelButton"],["fieldName","wzFee"],["fieldName","wzCap"]],template:function(s,o){if(s&1){let x=B();c(0,"app-sg-verdict-legend",2),e(1,`
3617
3618`),n(2,"div",3),e(3,`
3619    `),n(4,"h3"),e(5,"The architectures"),t(),e(6,`
3620    `),n(7,"app-sg-caption",4),e(8,"fourteen shapes a form gets put inside"),t(),e(9,`
3621    `),n(10,"p",5),e(11,`
3622        The `),n(12,"a",6),e(13,"Fields"),t(),e(14,` tab covers what a control looks like. This one
3623        covers the container it sits in \u2014 the rails, panels, dialogs and step chrome the app
3624        actually ships. Every one of these exists because
3625        `),n(15,"strong")(16,"code"),e(17,"FormMetadata"),t(),e(18,` has no column, section, fieldset, tab or step
3626        primitive`),t(),e(19,`, so 327 templates each solved layout on their own. Where a real shared
3627        component exists, the sample below is that component; where none does, the markup is a
3628        faithful reproduction and is labelled as one.
3629    `),t(),e(20,`
3630    `),n(21,"div",7),e(22,`
3631        `),n(23,"table",8),e(24,`
3632            `),n(25,"thead"),e(26,`
3633                `),n(27,"tr"),e(28,`
3634                    `),n(29,"th",9),e(30,"Architecture"),t(),e(31,`
3635                    `),n(32,"th",10),e(33,"Home"),t(),e(34,`
3636                    `),n(35,"th"),e(36,"What it is"),t(),e(37,`
3637                    `),n(38,"th",11),e(39,"Scale"),t(),e(40,`
3638                    `),n(41,"th",12),e(42,"Verdict"),t(),e(43,`
3639                `),t(),e(44,`
3640            `),t(),e(45,`
3641            `),n(46,"tbody"),e(47,`
3642                `),S(48,Cc,21,8,null,null,wc),t(),e(50,`
3643        `),t(),e(51,`
3644    `),t(),e(52,`
3645`),t(),e(53,`
3646
3647`),n(54,"div",13),e(55,`
3648    `),n(56,"h3"),e(57,"CMS settings rail"),t(),e(58,`
3649    `),n(59,"app-sg-caption",14),e(60,".pb-settings-column \u2014 page-builder-edit.component.html:145"),t(),e(61,`
3650    `),n(62,"p",5),e(63,`
3651        The most elaborate form architecture in the app, and it has exactly one host. A sticky
3652        full-height right column carrying `),n(64,"code"),e(65,"p-tabs"),t(),e(66," over "),n(67,"code"),e(68,"p-accordion"),t(),e(69,` over
3653        projection-mode forms, with `),n(70,"strong"),e(71,"34 separate content edit forms"),t(),e(72,` swapping into
3654        the Content tab as you select things on the canvas. It has its own stylesheet \u2014
3655        `),n(73,"code"),e(74,"3_modules/cms/pb-settings-column.scss"),t(),e(75,`, roughly 130 lines re-specifying label
3656        spacing, `),n(76,"code"),e(77,".form-group"),t(),e(78," margins, "),n(79,"code"),e(80,".form-action"),t(),e(81,` layout and dropdown
3657        widths for this one container.
3658    `),t(),e(82,`
3659    `),n(83,"p",5),e(84,`
3660        One behaviour here appears nowhere else. The content forms
3661        `),n(85,"strong"),e(86,"autosave"),t(),e(87," \u2014 "),n(88,"code"),e(89,'[showSubmitButton]="false"'),t(),e(90,` plus
3662        `),n(91,"code"),e(92,"(valueChanges)"),t(),e(93,", so there is no Save button at all. The "),n(94,"code"),e(95,".pb-checkbox"),t(),e(96,` wrapper
3663        flips a checkbox row to label-left / control-right, which is a layout the dynamic form
3664        cannot express on its own.
3665    `),t(),e(97,`
3666    `),n(98,"div",15),e(99,`
3667        `),n(100,"div",16),e(101,`
3668            `),n(102,"div",17),e(103,`
3669                the page canvas \u2014 not part of this demo
3670            `),t(),e(104,`
3671        `),t(),e(105,`
3672        `),n(106,"div",18),e(107,`
3673            `),n(108,"div",19),e(109,`
3674                `),n(110,"p-tabs",20),M("valueChange",function(_){return w(x),I(o.cmsTab,_)||(o.cmsTab=_),C(_)}),e(111,`
3675                    `),n(112,"p-tablist"),e(113,`
3676                        `),n(114,"p-tab",21),e(115,"Setup"),t(),e(116,`
3677                        `),n(117,"p-tab",21),e(118,"Content"),t(),e(119,`
3678                    `),t(),e(120,`
3679                    `),n(121,"p-tabpanels"),e(122,`
3680                        `),n(123,"p-tabpanel",21),e(124,`
3681                            `),n(125,"app-dynamic-form",22),e(126,`
3682                                `),c(127,"app-dynamic-form-field",23),e(128,`
3683                                `),n(129,"div",24),e(130,`
3684                                    `),c(131,"app-dynamic-form-field",25),e(132,`
3685                                `),t(),e(133,`
3686                                `),n(134,"div",26),e(135,`
3687                                    `),n(136,"app-dynamic-form-field",27),e(137,`
3688                                        `),O(138,0,0),e(140,`
3689                                            `),n(141,"span",28),e(142),t(),e(143,`
3690                                        `),N(),e(144,`
3691                                    `),t(),e(145,`
3692                                `),t(),e(146,`
3693                                `),n(147,"p-accordion"),e(148,`
3694                                    `),n(149,"p-accordion-panel",29),e(150,`
3695                                        `),n(151,"p-accordion-header"),e(152,"SEO"),t(),e(153,`
3696                                        `),n(154,"p-accordion-content"),e(155,`
3697                                            `),c(156,"app-dynamic-form-field",30),e(157,`
3698                                            `),c(158,"app-dynamic-form-field",31),e(159,`
3699                                        `),t(),e(160,`
3700                                    `),t(),e(161,`
3701                                `),t(),e(162,`
3702                            `),t(),e(163,`
3703                        `),t(),e(164,`
3704                        `),n(165,"p-tabpanel",21),e(166,`
3705                            `),n(167,"p",5),e(168,`
3706                                In the real editor this panel swaps between 34 content-type edit
3707                                forms \u2014 text, gallery, calendar, scoreboard and the rest
3708                                \u2014 each its own projection-mode dynamic form with no submit
3709                                button, saving through `),n(169,"code"),e(170,"(valueChanges)"),t(),e(171,`.
3710                            `),t(),e(172,`
3711                        `),t(),e(173,`
3712                    `),t(),e(174,`
3713                `),t(),e(175,`
3714            `),t(),e(176,`
3715        `),t(),e(177,`
3716    `),t(),e(178,`
3717`),t(),e(179,`
3718
3719`),n(180,"div",32),e(181,`
3720    `),n(182,"h3"),e(183,"Calendar filter rail"),t(),e(184,`
3721    `),n(185,"app-sg-caption",4),e(186,".calendar-filters \u2014 reproduction, 2 templates"),t(),e(187,`
3722    `),n(188,"p",5),e(189,`
3723        A left column of filter controls beside the content column, in
3724        `),n(190,"code"),e(191,"club-calendar/calendar"),t(),e(192," and "),n(193,"code"),e(194,"schedule-sign-up/time-slots"),t(),e(195,`. There is
3725        no component \u2014 it is a `),n(196,"code"),e(197,"col col-md-auto"),t(),e(198," holding a "),n(199,"code"),e(200,".card"),t(),e(201,` of
3726        `),n(202,"code"),e(203,".form-group"),t(),e(204,`s, and the calendar reads 
3726its height to size the results column
3727        beside it.
3728    `),t(),e(205,`
3729    `),n(206,"p",5),e(207,`
3730        `),n(208,"strong"),e(209,"Its class does nothing."),t(),e(210," "),n(211,"code"),e(212,".calendar-filters"),t(),e(213,` is declared at
3731        `),n(214,"code"),e(215,"3_modules/templates.scss:842"),t(),e(216,` and the whole block is commented out, so the three
3732        `),n(217,"code"),e(218,"--p-toggleswitch-*"),t(),e(219,` overrides that were meant to shrink the switches below never
3733        apply. They render at stock PrimeNG size. Nothing else in the rail depends on the class,
3734        which is why this went unnoticed.
3735    `),t(),e(220,`
3736    `),n(221,"div",15),e(222,`
3737        `),n(223,"div",33),e(224,`
3738            `),n(225,"div",34),e(226,`
3739                `),n(227,"div",35),e(228,`
3740                    `),n(229,"label",36),e(230,"Program"),t(),e(231,`
3741                    `),c(232,"p-select",37),e(233,`
3742                `),t(),e(234,`
3743                `),n(235,"div",35),e(236,`
3744                    `),n(237,"label",38),e(238,"Team"),t(),e(239,`
3745                    `),c(240,"p-multiSelect",39),e(241,`
3746                `),t(),e(242,`
3747                `),n(243,"div",35),e(244,`
3748                    `),n(245,"legend",40),e(246,"Event types"),t(),e(247,`
3749                    `),n(248,"div",41),e(249,`
3750                        `),n(250,"div",42),e(251,`
3751                            `),n(252,"p-toggleswitch",43),M("ngModelChange",function(_){return w(x),I(o.calendarFilters.practices,_)||(o.calendarFilters.practices=_),C(_)}),t(),e(253,`
3752                            `),n(254,"label",44),e(255,"Practices"),t(),e(256,`
3753                        `),t(),e(257,`
3754                        `),n(258,"div",42),e(259,`
3755                            `),n(260,"p-toggleswitch",45),M("ngModelChange",function(_){return w(x),I(o.calendarFilters.games,_)||(o.calendarFilters.games=_),C(_)}),t(),e(261,`
3756                            `),n(262,"label",46),e(263,"Games"),t(),e(264,`
3757                        `),t(),e(265,`
3758                        `),n(266,"div",42),e(267,`
3759                            `),n(268,"p-toggleswitch",47),M("ngModelChange",function(_){return w(x),I(o.calendarFilters.other,_)||(o.calendarFilters.other=_),C(_)}),t(),e(269,`
3760                            `),n(270,"label",48),e(271,"Other"),t(),e(272,`
3761                        `),t(),e(273,`
3762                    `),t(),e(274,`
3763                `),t(),e(275,`
3764            `),t(),e(276,`
3765        `),t(),e(277,`
3766        `),n(278,"div",49),e(279,`
3767            `),n(280,"div",50),e(281,`
3768                the events column \u2014 sized from the filter card's height
3769            `),t(),e(282,`
3770        `),t(),e(283,`
3771    `),t(),e(284,`
3772`),t(),e(285,`
3773
3774`),n(286,"div",51),e(287,`
3775    `),n(288,"h3"),e(289,"Admin filter bar"),t(),e(290,`
3776    `),n(291,"app-sg-caption",4),e(292,"app-admin-filter \u2014 the real shared component, 74 templates"),t(),e(293,`
3777    `),n(294,"p",5),e(295,`
3778        The sanctioned filter chrome: a `),n(296,"code"),e(297,".card.search-filter"),t(),e(298,` with a
3779        `),n(299,"code"),e(300,"[primary]"),t(),e(301," slot always visible, an "),n(302,"code"),e(303,"[advanced]"),t(),e(304,` slot behind a Filters
3780        toggle, and Search and Reset buttons that emit `),n(305,"code"),e(306,"adminFilterSearch"),t(),e(307,` /
3781        `),n(308,"code"),e(309,"adminFilterReset"),t(),e(310,". The advanced panel carries "),n(311,"code"),e(312,".report-filters"),t(),e(313,`,
3782        which is what makes `),n(314,"code"),e(315,".resetBtn"),t(),e(316,` work inside a filter bar and nowhere else.
3783    `),t(),e(317,`
3784    `),n(318,"app-admin-filter",52),e(319,`
3785        `),O(320,53),e(321,`
3786            `),n(322,"div",54),e(323,`
3787                `),n(324,"div",35),e(325,`
3788                    `),n(326,"label",55),e(327,"Search"),t(),e(328,`
3789                    `),n(329,"input",56),M("ngModelChange",function(_){return w(x),I(o.demo.search,_)||(o.demo.search=_),C(_)}),t(),e(330,`
3790                `),t(),e(331,`
3791            `),t(),e(332,`
3792        `),N(),e(333,`
3793        `),O(334,57),e(335,`
3794            `),n(336,"div",15),e(337,`
3795                `),n(338,"div",54),e(339,`
3796                    `),n(340,"div",35),e(341,`
3797                        `),n(342,"label",58),e(343,"Season"),t(),e(344,`
3798                        `),c(345,"p-select",59),e(346,`
3799                    `),t(),e(347,`
3800                `),t(),e(348,`
3801                `),n(349,"div",54),e(350,`
3802                    `),n(351,"div",35),e(352,`
3803                        `),n(353,"label",60),e(354,"As of"),t(),e(355,`
3804                        `),n(356,"p-inputgroup"),e(357,`
3805                            `),n(358,"p-datepicker",61),M("ngModelChange",function(_){return w(x),I(o.demo.asOf,_)||(o.demo.asOf=_),C(_)}),t(),e(359,`
3806                            `),n(360,"p-inputgroup-addon"),e(361,`
3807                                `),n(362,"a",62),g("click",function(){return o.demo.asOf=void 0}),c(363,"i",63),t(),e(364,`
3808                            `),t(),e(365,`
3809                        `),t(),e(366,`
3810                    `),t(),e(367,`
3811                `),t(),e(368,`
3812            `),t(),e(369,`
3813        `),N(),e(370,`
3814    `),t(),e(371,`
3815    `),n(372,"p",5),e(373,`
3816        Open Filters and compare that reset link with the one in the report grid below \u2014 same
3817        markup, and only this one is styled.
3818    `),t(),e(374,`
3819`),t(),e(375,`
3820
3821`),n(376,"div",64),e(377,`
3822    `),n(378,"h3"),e(379,"Admin filter bar \u2014 "),n(380,"code"),e(381,"[horizontal]"),t()(),e(382,`
3823    `),n(383,"app-sg-caption",4),e(384,"the same component, second layout \u2014 2 templates"),t(),e(385,`
3824    `),n(386,"p",5),e(387,`
3825        `),n(388,"code"),e(389,"app-admin-filter"),t(),e(390,` has a second layout, reached with
3826        `),n(391,"code"),e(392,'[horizontal]="true"'),t(),e(393,`. It projects into three different slots
3827        (`),n(394,"code"),e(395,"[horizontalFilters]"),t(),e(396,", "),n(397,"code"),e(398,"[horizontalFiltersAdvancedFilters]"),t(),e(399,`, and
3828        default content) and emits `),n(400,"code"),e(401,".admin-filter-container.horizontal-layout"),t(),e(402,` wrapping a
3829        `),n(403,"code"),e(404,".filters-section"),t(),e(405," beside a "),n(406,"code"),e(407,".content-section"),t(),e(408,` \u2014 the markup of a
3830        left filter rail with the page content to its right.
3831    `),t(),e(409,`
3832    `),n(410,"p",5),e(411,`
3833        `),n(412,"strong"),e(413,"None of those four classes is declared anywhere."),t(),e(414,`
3834        `),n(415,"code"),e(416,"admin-filter.component.scss"),t(),e(417,` is a 0-byte file, and no other stylesheet in the
3835        app mentions them. So the rail renders as stacked full-width blocks, which is what you see
3836        below \u2014 the filters above the content instead of beside it. Its two consumers,
3837        `),n(418,"code"),e(419,"bulk-cancel"),t(),e(420," and "),n(421,"code"),e(422,"advanced-bulk-edit"),t(),e(423,`, ship that way today.
3838    `),t(),e(424,`
3839    `),n(425,"app-admin-filter",65),e(426,`
3840        `),O(427,66),e(428,`
3841            `),n(429,"div",35),e(430,`
3842                `),n(431,"label",67),e(432,"Season"),t(),e(433,`
3843                `),c(434,"p-select",68),e(435,`
3844            `),t(),e(436,`
3845        `),N(),e(437,`
3846        `),O(438,69),e(439,`
3847            `),n(440,"div",35),e(441,`
3848                `),n(442,"label",70),e(443,"Teams"),t(),e(444,`
3849                `),c(445,"p-multiSelect",71),e(446,`
3850            `),t(),e(447,`
3851        `),N(),e(448,`
3852        `),n(449,"div",72),e(450,`
3853            the content section \u2014 meant to sit to the right of the filters
3854        `),t(),e(451,`
3855    `),t(),e(452,`
3856`),t(),e(453,`
3857
3858`),n(454,"div",73),e(455,`
3859    `),n(456,"h3"),e(457,"Report filter grid"),t(),e(458,`
3860    `),n(459,"app-sg-caption",14),e(460,"reproduction \u2014 admin/report/*/filters.component.html, 55 templates"),t(),e(461,`
3861    `),n(462,"p",5),e(463,`
3862        The most duplicated form shape in the codebase and the one with no owner: a bare
3863        `),n(464,"code"),e(465,".row"),t(),e(466," of "),n(467,"code"),e(468,".col-md-*"),t(),e(469,` columns, each holding a
3864        `),n(470,"code"),e(471,".form-group"),t(),e(472," with an unassociated "),n(473,"code"),e(474,"<label>"),t(),e(475,` and a
3865        `),n(476,"code"),e(477,"p-multiSelect"),t(),e(478," or "),n(479,"code"),e(480,"p-select"),t(),e(481," bound with "),n(482,"code"),e(483,"[(ngModel)]"),t(),e(484,`. No
3866        `),n(485,"code"),e(486,"<form>"),t(),e(487,`, no validation, no submit \u2014 an external Run button drives it.
3867    `),t(),e(488,`
3868    `),n(489,"div",15),e(490,`
3869        `),n(491,"div",54),e(492,`
3870            `),n(493,"div",35),e(494,`
3871                `),n(495,"label",74),e(496,"Season"),t(),e(497,`
3872                `),n(498,"p-select",75),M("ngModelChange",function(_){return w(x),I(o.demo.season,_)||(o.demo.season=_),C(_)}),e(499,`
3873                `),t(),e(500,`
3874            `),t(),e(501,`
3875        `),t(),e(502,`
3876        `),n(503,"div",54),e(504,`
3877            `),n(505,"div",35),e(506,`
3878                `),n(507,"label",76),e(508,"Teams"),t(),e(509,`
3879                `),n(510,"p-multiSelect",77),M("ngModelChange",function(_){return w(x),I(o.demo.teams,_)||(o.demo.teams=_),C(_)}),e(511,`
3880                `),t(),e(512,`
3881            `),t(),e(513,`
3882        `),t(),e(514,`
3883        `),n(515,"div",54),e(516,`
3884            `),n(517,"div",35),e(518,`
3885                `),n(519,"label",78),e(520,"As of"),t(),e(521,`
3886                `),n(522,"p-inputgroup"),e(523,`
3887                    `),n(524,"p-datepicker",79),M("ngModelChange",function(_){return w(x),I(o.demo.asOf,_)||(o.demo.asOf=_),C(_)}),t(),e(525,`
3888                    `),n(526,"p-inputgroup-addon"),e(527,`
3889                        `),n(528,"a",62),g("click",function(){return o.demo.asOf=void 0}),c(529,"i",63),t(),e(530,`
3890                    `),t(),e(531,`
3891                `),t(),e(532,`
3892            `),t(),e(533,`
3893        `),t(),e(534,`
3894    `),t(),e(535,`
3895    `),n(536,"p",5),e(537,`
3896        The reset link above is unstyled, deliberately \u2014 `),n(538,"code"),e(539,".resetBtn"),t(),e(540,` is declared
3897        only under `),n(541,"code"),e(542,".report-filters"),t(),e(543,`, and this grid is not inside one. The labels also
3898        have no `),n(544,"code"),e(545,"for"),t(),e(546,` in the real templates; they are paired here because the
3899        `),n(547,"a",6),e(548,"Layout & labels"),t(),e(549,` tab says to.
3900    `),t(),e(550,`
3901`),t(),e(551,`
3902
3903`),n(552,"div",80),e(553,`
3904    `),n(554,"h3"),e(555,"Dialog form"),t(),e(556,`
3905    `),n(557,"app-sg-caption",4),e(558,"p-dialog \u2014 387 templates, 217 hosting a dynamic form"),t(),e(559,`
3906    `),n(560,"p",5),e(561,`
3907        The most common chrome in the app. A `),n(562,"code"),e(563,"p-dialog"),t(),e(564,` whose width comes from one of the
3908        four sanctioned `),n(565,"code"),e(566,"styleClass"),t(),e(567,` values \u2014 never an inline style \u2014 hosting
3909        a projection-mode form, with `),n(568,"code"),e(569,"app-dialog-footer"),t(),e(570,` in the
3910        `),n(571,"code"),e(572,"#footer"),t(),e(573," slot. "),n(574,"code"),e(575,'[modalContent]="true"'),t(),e(576,` on the form drops the action
3911        row's bottom padding so it sits flush with the dialog footer.
3912    `),t(),e(577,`
3913    `),n(578,"button",81),g("click",function(){return o.dialogOpen=!0}),e(579,"Open dialog form"),t(),e(580,`
3914    `),n(581,"p-dialog",82),M("visibleChange",function(_){return w(x),I(o.dialogOpen,_)||(o.dialogOpen=_),C(_)}),e(582,`
3915        `),n(583,"app-dynamic-form",83),e(584,`
3916            `),n(585,"div",84),e(586,`
3917                `),c(587,"app-dynamic-form-field",85),e(588,`
3918                `),c(589,"app-dynamic-form-field",86),e(590,`
3919            `),t(),e(591,`
3920        `),t(),e(592,`
3921        `),k(593,_c,16,0,"ng-template",null,1,fe),e(595,`
3922    `),t(),e(596,`
3923    `),n(597,"p",87),e(598,`
3924        `),n(599,"strong"),e(600,"116 of the 305 orphan-control templates are dialogs"),t(),e(601,` \u2014 modals that
3925        collect input with no `),n(602,"code"),e(603,"<form>"),t(),e(604,` at all, so Enter does nothing. That is where
3926        the missing form element is most surprising, and it is the single largest slice of the
3927        finding on the `),n(605,"a",6),e(606,"Defects"),t(),e(607,` tab.
3928    `),t(),e(608,`
3929`),t(),e(609,`
3930
3931`),n(610,"div",88),e(611,`
3932    `),n(612,"h3"),e(613,"Hand-rolled dialog"),t(),e(614,`
3933    `),n(615,"app-sg-caption",14),e(616,".sprocket-dialog \u2014 reproduction, 27 templates"),t(),e(617,`
3934    `),n(618,"p",5),e(619,`
3935        The prescribed escape hatch: when content projection into `),n(620,"code"),e(621,"p-dialog"),t(),e(622,` will not
3936        work, the Angular standards call for this markup instead \u2014
3937        `),n(623,"code"),e(624,".sprocket-dialog"),t(),e(625," / "),n(626,"code"),e(627,".sprocket-dialog-inner"),t(),e(628,` with one of the same
3938        four width classes, a header row with `),n(629,"code"),e(630,"app-close-icon"),t(),e(631,`, and the body in
3939        `),n(632,"code"),e(633,".sprocket-dialog-content"),t(),e(634,`. It is a real CSS contract, not a component, so
3940        nothing enforces the structure.
3941    `),t(),e(635,`
3942    `),n(636,"button",89),g("click",function(){return o.sprocketDialogOpen=!0}),e(637,"Open hand-rolled dialog"),t(),e(638,`
3943    `),v(639,kc,35,0),t(),e(640,`
3944
3945`),n(641,"div",90),e(642,`
3946    `),n(643,"h3"),e(644,"Drawer form"),t(),e(645,`
3947    `),n(646,"app-sg-caption",4),e(647,"p-drawer \u2014 9 templates"),t(),e(648,`
3948    `),n(649,"p",5),e(650,`
3949        An edge-anchored panel hosting a form \u2014 used for event messaging, the cart, and the AI
3950        chat surfaces. The header treatment is not consistent across the nine: three different
3951        mechanisms and four close affordances, which is its own parked project.
3952    `),t(),e(651,`
3953    `),n(652,"button",81),g("click",function(){return o.drawerOpen=!0}),e(653,"Open drawer form"),t(),e(654,`
3954    `),n(655,"p-drawer",91),M("visibleChange",function(_){return w(x),I(o.drawerOpen,_)||(o.drawerOpen=_),C(_)}),e(656,`
3955        `),n(657,"app-dynamic-form",92),e(658,`
3956            `),c(659,"app-dynamic-form-field",93),e(660,`
3957            `),c(661,"app-dynamic-form-field",94),e(662,`
3958        `),t(),e(663,`
3959    `),t(),e(664,`
3960`),t(),e(665,`
3961
3962`),n(666,"div",95),e(667,`
3963    `),n(668,"h3"),e(669,"Multi-step wizard"),t(),e(670,`
3964    `),n(671,"app-sg-caption",4),e(672,"p-steps + one dynamic form per step \u2014 17 templates"),t(),e(673,`
3965    `),n(674,"p",5),e(675,`
3966        Step chrome over `),n(676,"strong"),e(677,"separate"),t(),e(678,` dynamic forms \u2014 one per step, each with its
3967        own `),n(679,"code"),e(680,"formID"),t(),e(681,", composed by the host through "),n(682,"code"),e(683,"@ViewChild"),t(),e(684,`. There is
3968        no step primitive in `),n(685,"code"),e(686,"FormMetadata"),t(),e(687,`, so the host owns the index, the validity
3969        gate between steps, and the accumulation of values across them.
3970    `),t(),e(688,`
3971    `),c(689,"p-steps",96),e(690,`
3972    `),n(691,"div",97),e(692,`
3973        `),v(693,Tc,11,5)(694,Ic,11,5)(695,Mc,7,0),e(696,`
3974    `),t(),e(697,`
3975    `),n(698,"div",98),e(699,`
3976        `),n(700,"div",99),e(701,`
3977            `),n(702,"button",100),g("click",function(){return o.wizardStep=o.wizardStep-1}),e(703,"Back"),t(),e(704,`
3978        `),t(),e(705,`
3979        `),n(706,"div",101),e(707,`
3980            `),n(708,"button",102),g("click",function(){return o.wizardStep=o.wizardStep+1}),e(709,"Next"),t(),e(710,`
3981        `),t(),e(711,`
3982    `),t(),e(712,`
3983`),t(),e(713,`
3984
3985`),n(714,"div",103),e(715,`
3986    `),n(716,"h3"),e(717,"Tabbed form"),t(),e(718,`
3987    `),n(719,"app-sg-caption",4),e(720,"p-tabs \u2014 280 templates"),t(),e(721,`
3988    `),n(722,"p",5),e(723,`
3989        Fields grouped across tabs. The one thing to get right: `),n(724,"strong"),e(725,`each tab's form needs its
3990        own `),n(726,"code"),e(727,"formID"),t()(),e(728,". "),n(729,"code"),e(730,"DynamicFormService"),t(),e(731,` is provided by
3991        `),n(732,"code"),e(733,"DynamicFormModule"),t(),e(734,` rather than per component, so a single service instance
3992        serves the whole page and filters `),n(735,"code"),e(736,"formSubmitted$"),t(),e(737," / "),n(738,"code"),e(739,"formError$"),t(),e(740,` by
3993        id \u2014 give two forms the same id and submitting one lights up the other.
3994    `),t(),e(741,`
3995    `),n(742,"p-tabs",104),M("valueChange",function(_){return w(x),I(o.tabbedTab,_)||(o.tabbedTab=_),C(_)}),e(743,`
3996        `),n(744,"p-tablist"),e(745,`
3997            `),n(746,"p-tab",21),e(747,"Team details"),t(),e(748,`
3998            `),n(749,"p-tab",21),e(750,"Appearance"),t(),e(751,`
3999        `),t(),e(752,`
4000        `),n(753,"p-tabpanels"),e(754,`
4001            `),n(755,"p-tabpanel",21),e(756,`
4002                `),n(757,"app-dynamic-form",105),e(758,`
4003                    `),c(759,"app-dynamic-form-field",106),e(760,`
4004                `),t(),e(761,`
4005            `),t(),e(762,`
4006            `),n(763,"p-tabpanel",21),e(764,`
4007                `),n(765,"app-dynamic-form",107),e(766,`
4008                    `),c(767,"app-dynamic-form-field",108),e(768,`
4009                `),t(),e(769,`
4010            `),t(),e(770,`
4011        `),t(),e(771,`
4012    `),t(),e(772,`
4013`),t(),e(773,`
4014
4015`),n(774,"div",109),e(775,`
4016    `),n(776,"h3"),e(777,"Accordion form"),t(),e(778,`
4017    `),n(779,"app-sg-caption",4),e(780,"p-accordion \u2014 25 templates"),t(),e(781,`
4018    `),n(782,"p",5),e(783,`
4019        Collapsible field groups \u2014 the closest thing the app has to a fieldset. This is how
4020        the CMS rail hides Permissions and SEO behind headers, and it is the only grouping mechanism
4021        that keeps every field in one `),n(784,"code"),e(785,"FormGroup"),t(),e(786,` while hiding most of them.
4022    `),t(),e(787,`
4023    `),n(788,"app-dynamic-form",110),e(789,`
4024        `),n(790,"p-accordion"),e(791,`
4025            `),n(792,"p-accordion-panel",29),e(793,`
4026                `),n(794,"p-accordion-header"),e(795,"Visibility"),t(),e(796,`
4027                `),n(797,"p-accordion-content"),e(798,`
4028                    `),c(799,"app-dynamic-form-field",111),e(800,`
4029                `),t(),e(801,`
4030            `),t(),e(802,`
4031            `),n(803,"p-accordion-panel",112),e(804,`
4032                `),n(805,"p-accordion-header"),e(806,"Staff only"),t(),e(807,`
4033                `),n(808,"p-accordion-content"),e(809,`
4034                    `),c(810,"app-dynamic-form-field",113),e(811,`
4035                `),t(),e(812,`
4036            `),t(),e(813,`
4037        `),t(),e(814,`
4038    `),t(),e(815,`
4039    `),n(816,"p",5),e(817,`
4040        Worth knowing: `),n(818,"code"),e(819),t(),e(820,`
4041        is what lets a projected field survive being nested inside an accordion, a tab or a table
4042        cell. Without `),n(821,"code"),e(822,"descendants"),t(),e(823,`, only direct children would be found.
4043    `),t(),e(824,`
4044`),t(),e(825,`
4045
4046`),n(826,"div",114),e(827,`
4047    `),n(828,"h3"),e(829,"Sticky action bar"),t(),e(830,`
4048    `),n(831,"app-sg-caption",4),e(832,"appStickyFormButtons + [buttonsSticky] \u2014 33 templates"),t(),e(833,`
4049    `),n(834,"p",5),e(835,`
4050        For forms long enough to scroll the Save button out of view. The directive pins
4051        `),n(836,"code"),e(837,".form-action"),t(),e(838,` to the viewport bottom and toggles
4052        `),n(839,"code"),e(840,".form-sticky-form-buttons-on"),t(),e(841,` from TypeScript \u2014 which is why that class
4053        never appears in any template and is `),n(842,"em"),e(843,"not"),t(),e(844,` dead code, unlike the eight on the
4054        `),n(845,"a",6),e(846,"CSS contracts"),t(),e(847,` tab.
4055    `),t(),e(848,`
4056    `),n(849,"app-dynamic-form",115),e(850,`
4057    `),t(),e(851,`
4058`),t(),e(852,`
4059
4060`),n(853,"div",116),e(854,`
4061    `),n(855,"h3"),e(856,"Narrow centered form"),t(),e(857,`
4062    `),n(858,"app-sg-caption",4),e(859,".form-container \u2014 7 templates"),t(),e(860,`
4063    `),n(861,"p",5),e(862,`
4064        A max-width wrapper for a standalone form \u2014 the public checkout, login and
4065        registration shape. These are also among the ~6 templates in the whole app with a
4066        hand-written `),n(863,"code"),e(864,"<form>"),t(),e(865," and a real "),n(866,"code"),e(867,"[formGroup]"),t(),e(868,`, because they
4067        predate the dynamic form system.
4068    `),t(),e(869,`
4069    `),n(870,"div",117),e(871,`
4070        `),n(872,"div",35),e(873,`
4071            `),n(874,"label",118),e(875,"Email"),t(),e(876,`
4072            `),c(877,"input",119),e(878,`
4073        `),t(),e(879,`
4074        `),n(880,"div",35),e(881,`
4075            `),n(882,"label",120),e(883,"Password"),t(),e(884,`
4076            `),c(885,"input",121),e(886,`
4077        `),t(),e(887,`
4078        `),n(888,"div",98),e(889,`
4079            `),n(890,"div",101),e(891,`
4080                `),n(892,"button",122),e(893,"Sign in"),t(),e(894,`
4081            `),t(),e(895,`
4082        `),t(),e(896,`
4083    `),t(),e(897,`
4084`),t(),e(898,`
4085
4086`),n(899,"div",123),e(900,`
4087    `),n(901,"h3"),e(902,"Dashboard mini-form"),t(),e(903,`
4088    `),n(904,"app-sg-caption",4),e(905,"app-admin-dashboard-card header \u2014 18 templates"),t(),e(906,`
4089    `),n(907,"p",5),e(908,`
4090        A lone `),n(909,"code"),e(910,"p-select"),t(),e(911,", "),n(912,"code"),e(913,"p-multiSelect"),t(),e(914," or "),n(915,"code"),e(916,"p-selectButton"),t(),e(917,` used
4091        as a scope selector, projected into `),n(918,"code"),e(919,"app-admin-dashboard-card"),t(),e(920,`'s
4092        `),n(921,"code"),e(922,'slot="filters"'),t(),e(923,". No form, usually an "),n(924,"code"),e(925,"sr-only"),t(),e(926,` label, no submit
4093        \u2014 changing it refetches the panel. Eighteen dashboard panels do this and each styles
4094        the control slightly differently, which is why it is marked drift rather than live: the slot
4095        is shared, the contents of it are not.
4096    `),t(),e(927,`
4097    `),n(928,"div",15),e(929,`
4098        `),n(930,"div",124),e(931,`
4099            `),n(932,"app-admin-dashboard-card",125),e(933,`
4100                `),n(934,"div",126),e(935,`
4101                    `),n(936,"div",127),e(937,`
4102                        `),n(938,"div",128),e(939,`
4103                            `),n(940,"label",129),e(941,"Season"),t(),e(942,`
4104                            `),n(943,"p-select",130),M("ngModelChange",function(_){return w(x),I(o.demo.scope,_)||(o.demo.scope=_),C(_)}),t(),e(944,`
4105                        `),t(),e(945,`
4106                    `),t(),e(946,`
4107                `),t(),e(947,`
4108                `),n(948,"p",5),e(949,"panel body"),t(),e(950,`
4109            `),t(),e(951,`
4110        `),t(),e(952,`
4111    `),t(),e(953,`
4112`),t(),e(954,`
4113
4114`),n(955,"div",131),e(956,`
4115    `),n(957,"h3"),e(958,"The layout metadata that already exists"),t(),e(959,`
4116    `),n(960,"app-sg-caption",4),e(961,"shared/modules/form-builder \u2014 one consumer"),t(),e(962,`
4117    `),n(963,"p",5),e(964,`
4118        Every architecture above is a workaround for the same absence: `),n(965,"code"),e(966,"FormMetadata"),t(),e(967,` has
4119        no column, section, fieldset, tab or step primitive, so each host builds its own. That
4120        metadata does exist in this codebase \u2014 just not in the system anyone uses.
4121        `),n(968,"code"),e(969,"shared/modules/form-builder/"),t(),e(970,` is a complete second forms system: a
4122        drag-and-drop builder with its own field model, its own string-keyed type enum, and
4123        `),n(971,"strong"),e(972,"the only "),n(973,"code"),e(974,"steps"),t(),e(975," / "),n(976,"code"),e(977,"columnSpan"),t(),e(978," / "),n(979,"code"),e(980,"multiStep"),t(),e(981,`
4124        metadata anywhere in the codebase`),t(),e(982,`. It holds 83 of the app's 93
4125        `),n(983,"code"),e(984,"formControlName"),t(),e(985,` occurrences. Its renderer appears in one template, reachable
4126        from `),n(986,"code"),e(987,"/form-builder-demo"),t(),e(988,", and it is not wired to "),n(989,"code"),e(990,"DynamicFormField"),t(),e(991,`.
4127    `),t(),e(992,`
4128    `),n(993,"p",5),e(994,`
4129        Nothing about that is a recommendation \u2014 the two models are unrelated and merging them
4130        is a real project. It is here because the fourteen shapes above look like independent
4131        decisions and are not: they are fourteen answers to one missing feature that was built once,
4132        somewhere else.
4133    `),t(),e(995,`
4134`),t(),e(996,`
4135`)}if(s&2){let x;m("compact",!0),i(12),m("routerLink","../fields"),i(36),E(o.architectures),i(62),T("value",o.cmsTab),i(4),m("value",0),i(3),m("value",1),i(6),m("value",0),i(2),m("fields",o.cmsFields)("entity",o.emptyEntity)("contentFieldsMode",!0)("showCancelButton",!1),i(17),f("",o.linkOrigin,"/club/"),i(23),m("value",1),i(67),m("options",o.demoOptions),i(8),m("autofocusFilter",!0)("options",o.demoTeams)("filter",!0)("showToggleAll",!0)("maxSelectedLabels",1),i(12),T("ngModel",o.calendarFilters.practices),i(8),T("ngModel",o.calendarFilters.games),i(8),T("ngModel",o.calendarFilters.other),i(50),m("showAdvanced",!0)("hideReset",!1)("showAdvancedFlyout",o.advancedFlyout),i(11),T("ngModel",o.demo.search),i(16),m("options",o.demoOptions),i(13),T("ngModel",o.demo.asOf),i(67),m("horizontal",!0)("showAdvanced",!0)("showAdvancedFlyout",o.horizontalFlyout),i(9),m("options",o.demoOptions),i(11),m("autofocusFilter",!0)("options",o.demoTeams)("filter",!0)("maxSelectedLabels",1),i(53),T("ngModel",o.demo.season),m("options",o.demoOptions),i(12),m("autofocusFilter",!0),T("ngModel",o.demo.teams),m("options",o.demoTeams)("filter",!0)("showToggleAll",!0)("maxSelectedLabels",1),i(14),T("ngModel",o.demo.asOf),i(23),m("routerLink","../layout"),i(34),T("visible",o.dialogOpen),m("modal",!0),i(2),m("fields",o.dialogFields)("entity",o.emptyEntity)("contentFieldsMode",!0)("showSubmitButton",!1)("showCancelButton",!1)("modalContent",!0),i(22),m("routerLink","../defects"),i(34),y(o.sprocketDialogOpen?639:-1),i(16),T("visible",o.drawerOpen),i(2),m("fields",o.drawerFields)("entity",o.emptyEntity)("contentFieldsMode",!0)("showCancelButton",!1),i(32),m("model",o.wizardSteps)("readonly",!0)("activeIndex",o.wizardStep),i(4),y((x=o.wizardStep)===0?693:x===1?694:695),i(9),m("disabled",o.wizardStep===0),i(6),m("disabled",o.wizardStep===2),i(34),T("value",o.tabbedTab),i(4),m("value",0),i(3),m("value",1),i(6),m("value",0),i(2),m("fields",o.tabbedOneFields)("entity",o.emptyEntity)("contentFieldsMode",!0)("showCancelButton",!1),i(6),m("value",1),i(2),m("fields",o.tabbedTwoFields)("entity",o.emptyEntity)("contentFieldsMode",!0)("showCancelButton",!1),i(23),m("fields",o.accordionFields)("entity",o.emptyEntity)("contentFieldsMode",!0)("showCancelButton",!1),i(31),q("@ContentChildren(\u2026, ","{"," descendants: true ","}",")"),i(26),m("routerLink","../contracts"),i(4),m("fields",o.stickyFields)("entity",o.emptyEntity)("buttonsSticky",!0)("showCancelButton",!0),i(94),T("ngModel",o.demo.scope),m("options",o.demoOptions)}},dependencies:[be,U,H,Be,Ne,$,Ua,ot,fn,wn,it,at,rt,Kt,za,ye,Yt,Nn,ct,Rn,Wn,pt,xt,mt,dt,kn,Tn,cn,Rt,X,ve,we],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var Kn=(a,r)=>
4135r.className;function Dc(a,r){if(a&1&&(e(0,`
4136                    `),n(1,"tr"),e(2,`
4137                        `),n(3,"td")(4,"code",18),e(5),t()(),e(6,`
4138                        `),n(7,"td")(8,"code",18),e(9),t()(),e(10,`
4139                        `),n(11,"td",3),e(12),t(),e(13,`
4140                        `),n(14,"td",18),e(15),t(),e(16,`
4141                        `),n(17,"td",18),e(18),t(),e(19,`
4142                        `),n(20,"td"),c(21,"app-sg-verdict",19),t(),e(22,`
4143                    `),t(),e(23,`
4144                `)),a&2){let l=r.$implicit;i(5),p(l.className),i(4),p(l.home),i(3),p(l.does),i(3),p(l.uses||"\u2014"),i(3),p(l.files||"\u2014"),i(3),m("verdict",l.verdict)}}function Fc(a,r){if(a&1&&(e(0,`
4145                    `),n(1,"tr"),e(2,`
4146                        `),n(3,"td")(4,"code",18),e(5),t()(),e(6,`
4147                        `),n(7,"td")(8,"code",18),e(9),t()(),e(10,`
4148                        `),n(11,"td",3),e(12),t(),e(13,`
4149                        `),n(14,"td"),c(15,"app-sg-verdict",19),t(),e(16,`
4150                    `),t(),e(17,`
4151                `)),a&2){let l=r.$implicit;i(5),p(l.className),i(4),p(l.home),i(3),p(l.does),i(3),m("verdict",l.verdict)}}function Pc(a,r){if(a&1&&(e(0,`
4152                    `),n(1,"tr"),e(2,`
4153                        `),n(3,"td")(4,"code",18),e(5),t()(),e(6,`
4154                        `),n(7,"td")(8,"code",18),e(9),t()(),e(10,`
4155                        `),n(11,"td",3),e(12),t(),e(13,`
4156                    `),t(),e(14,`
4157                `)),a&2){let l=r.$implicit;i(5),p(l.className),i(4),p(l.home),i(3),p(l.does)}}function Ac(a,r){if(a&1&&(e(0,`
4158                    `),n(1,"tr"),e(2,`
4159                        `),n(3,"td")(4,"code",18),e(5),t()(),e(6,`
4160                        `),n(7,"td",3),e(8),t(),e(9,`
4161                        `),n(10,"td",18),e(11),t(),e(12,`
4162                        `),n(13,"td",18),e(14),t(),e(15,`
4163                    `),t(),e(16,`
4164                `)),a&2){let l=r.$implicit;i(5),p(l.className),i(3),p(l.home),i(3),p(l.does),i(3),p(l.uses)}}var Rl=(()=>{let r=class r{constructor(){this.contracts=vl,this.adjacentContracts=yl,this.deadContracts=wl,this.undefinedContracts=Cl}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-forms-contracts"]],standalone:!1,decls:255,vars:3,consts:[[3,"compact"],["id","digest",1,"card"],["side","shared"],[1,"text-small","text-grey"],[3,"routerLink"],[1,"overflow-x-auto"],[1,"table","table-bordered","table-hover","sg-doc-table"],[2,"width","16rem"],[2,"width","18rem"],[2,"width","5rem"],[2,"width","8rem"],["id","adjacent",1,"card"],[1,"table","table-bordered","sg-doc-table"],[2,"width","22rem"],["id","dead",1,"card"],[2,"width","20rem"],["id","undefined",1,"card"],[2,"width","24rem"],[1,"text-small"],[3,"verdict"]],template:function(s,o){s&1&&(c(0,"app-sg-verdict-legend",0),e(1,`
4165
4166`),n(2,"div",1),e(3,`
4167    `),n(4,"h3"),e(5,"The CSS contract digest"),t(),e(6,`
4168    `),n(7,"app-sg-caption",2),e(8,"2_layout/forms.scss \u2014 1,413 lines, ~200 selectors"),t(),e(9,`
4169    `),n(10,"p",3),e(11,`
4170        Every form class the app declares, what it does, and how much of the app depends on it.
4171        These are class-only contracts \u2014 no Angular component owns them, so nothing stops a
4172        template from using one in a context where it does nothing. The `),n(12,"code"),e(13,"drift"),t(),e(14,` entries
4173        scoped under `),n(15,"code"),e(16,".horizontal-form"),t(),e(17,` are exactly that case: they read as
4174        general-purpose modifiers and are not. See them fail on the
4175        `),n(18,"a",4),e(19,"Defects"),t(),e(20,` tab.
4176    `),t(),e(21,`
4177    `),n(22,"div",5),e(23,`
4178        `),n(24,"table",6),e(25,`
4179            `),n(26,"thead"),e(27,`
4180                `),n(28,"tr"),e(29,`
4181                    `),n(30,"th",7),e(31,"Class"),t(),e(32,`
4182                    `),n(33,"th",8),e(34,"Declared"),t(),e(35,`
4183                    `),n(36,"th"),e(37,"What it does"),t(),e(38,`
4184                    `),n(39,"th",9),e(40,"Uses"),t(),e(41,`
4185                    `),n(42,"th",9),e(43,"Files"),t(),e(44,`
4186                    `),n(45,"th",10),e(46,"Verdict"),t(),e(47,`
4187                `),t(),e(48,`
4188            `),t(),e(49,`
4189            `),n(50,"tbody"),e(51,`
4190                `),S(52,Dc,24,6,null,null,Kn),t(),e(54,`
4191        `),t(),e(55,`
4192    `),t(),e(56,`
4193    `),n(57,"p",3),e(58,`
4194        One row is a defect on its own terms: `),n(59,"strong")(60,"code"),e(61,".form-label"),t(),e(62,` is declared three
4195        times`),t(),e(63," at top level ("),n(64,"code"),e(65,":160"),t(),e(66,", "),n(67,"code"),e(68,":176"),t(),e(69,", "),n(70,"code"),e(71,":685"),t(),e(72,`), plus
4196        twice more as `),n(73,"code"),e(74,"legend.form-label"),t(),e(75," nested inside "),n(76,"code"),e(77,".horizontal-form"),t(),e(78,`.
4197        Line 176 reaches it through a shared selector list with `),n(79,"code"),e(80,".form-group input"),t(),e(81,` and
4198        `),n(82,"code"),e(83,".form-group label"),t(),e(84,`. The three blocks do not conflict outright, but resolving the
4199        value of any one property means reading all three \u2014 there is nothing visual to render,
4200        which is why it stays a table row.
4201    `),t(),e(85,`
4202`),t(),e(86,`
4203
4204`),n(87,"div",11),e(88,`
4205    `),n(89,"h3"),e(90,"Form contracts declared elsewhere"),t(),e(91,`
4206    `),n(92,"app-sg-caption",2),e(93,"not everything a form needs lives in forms.scss"),t(),e(94,`
4207    `),n(95,"p",3),e(96,`
4208        These partials own the rest. Two of them \u2014 `),n(97,"code"),e(98,".resetBtn"),t(),e(99,` and
4209        `),n(100,"code"),e(101,"hr.form-section"),t(),e(102,` \u2014 are scoped so tightly that using them anywhere else is
4210        silently a no-op, and `),n(103,"code"),e(104,".pb-settings-column"),t(),e(105,` is the largest single-consumer form
4211        contract in the app: ~130 lines re-specifying form layout for one host.
4212    `),t(),e(106,`
4213    `),n(107,"div",5),e(108,`
4214        `),n(109,"table",12),e(110,`
4215            `),n(111,"thead"),e(112,`
4216                `),n(113,"tr"),e(114,`
4217                    `),n(115,"th",7),e(116,"Class"),t(),e(117,`
4218                    `),n(118,"th",13),e(119,"Declared"),t(),e(120,`
4219                    `),n(121,"th"),e(122,"What it does"),t(),e(123,`
4220                    `),n(124,"th",10),e(125,"Verdict"),t(),e(126,`
4221                `),t(),e(127,`
4222            `),t(),e(128,`
4223            `),n(129,"tbody"),e(130,`
4224                `),S(131,Fc,18,4,null,null,Kn),t(),e(133,`
4225        `),t(),e(134,`
4226    `),t(),e(135,`
4227`),t(),e(136,`
4228
4229`),n(137,"div",14),e(138,`
4230    `),n(139,"h3"),e(140,"Dead \u2014 declared, never used"),t(),e(141,`
4231    `),n(142,"app-sg-caption",2),e(143,"measured, documented, not deleted"),t(),e(144,`
4232    `),n(145,"p",3),e(146,`
4233        Eight classes with zero references in any `),n(147,"code"),e(148,".html"),t(),e(149," "),n(1
423350,"em"),e(151,"and"),t(),e(152,` any
4234        `),n(153,"code"),e(154,".ts"),t(),e(155,` \u2014 roughly 80 lines, including a ~50-line hand-built checkmark checkbox
4235        that predates `),n(156,"code"),e(157,"p-checkbox"),t(),e(158,`. Dead CSS is harmless: it is weight, not breakage.
4236    `),t(),e(159,`
4237    `),n(160,"p",3),e(161,`
4238        `),n(162,"code"),e(163,".form-sticky-form-buttons-on"),t(),e(164,` looks like a ninth and is not. It never appears in
4239        markup either, but `),n(165,"code"),e(166,"sticky-form-buttons.directive.ts"),t(),e(167,` applies it from TypeScript
4240        \u2014 checking `),n(168,"code"),e(169,".html"),t(),e(170,` alone would have deleted a live class. That is the whole
4241        reason this list was measured against both file types.
4242    `),t(),e(171,`
4243    `),n(172,"div",5),e(173,`
4244        `),n(174,"table",12),e(175,`
4245            `),n(176,"thead"),e(177,`
4246                `),n(178,"tr"),e(179,`
4247                    `),n(180,"th",8),e(181,"Class"),t(),e(182,`
4248                    `),n(183,"th",15),e(184,"Declared"),t(),e(185,`
4249                    `),n(186,"th"),e(187,"What it would have done"),t(),e(188,`
4250                `),t(),e(189,`
4251            `),t(),e(190,`
4252            `),n(191,"tbody"),e(192,`
4253                `),S(193,Pc,15,3,null,null,Kn),t(),e(195,`
4254        `),t(),e(196,`
4255    `),t(),e(197,`
4256`),t(),e(198,`
4257
4258`),n(199,"div",16),e(200,`
4259    `),n(201,"h3"),e(202,"Undefined \u2014 used, never declared"),t(),e(203,`
4260    `),n(204,"app-sg-caption",2),e(205,"the opposite failure, and the worse one"),t(),e(206,`
4261    `),n(207,"p",3),e(208,`
4262        Markup that names a treatment which does not exist. The template reads as styled and renders
4263        bare, and nothing at the call site suggests it. `),n(209,"strong"),e(210,`Four of these are emitted by the
4264        dynamic form itself`),t(),e(211,`, so the app ships markup referencing its own undeclared
4265        classes; two more come from `),n(212,"code"),e(213,"app-admin-filter"),t(),e(214,`'s second layout and from a
4266        commented-out block. `),n(215,"code"),e(216,".text-danger"),t(),e(217,` is the widest: 83 uses across 36 templates,
4267        and it is not Bootstrap-provided here because this app compiles a trimmed Bootstrap that
4268        never included it. Two component stylesheets declare a local copy, which is why it is not
4269        uniformly broken \u2014 it works in exactly two components.
4270    `),t(),e(218,`
4271    `),n(219,"div",5),e(220,`
4272        `),n(221,"table",12),e(222,`
4273            `),n(223,"thead"),e(224,`
4274                `),n(225,"tr"),e(226,`
4275                    `),n(227,"th",8),e(228,"Class"),t(),e(229,`
4276                    `),n(230,"th",17),e(231,"Where it comes from"),t(),e(232,`
4277                    `),n(233,"th"),e(234,"What it does"),t(),e(235,`
4278                    `),n(236,"th",9),e(237,"Uses"),t(),e(238,`
4279                `),t(),e(239,`
4280            `),t(),e(240,`
4281            `),n(241,"tbody"),e(242,`
4282                `),S(243,Ac,17,4,null,null,Kn),t(),e(245,`
4283        `),t(),e(246,`
4284    `),t(),e(247,`
4285    `),n(248,"p",3),e(249,`
4286        Every row above renders as a broken/correct pair on the
4287        `),n(250,"a",4),e(251,"Defects"),t(),e(252,` tab, which is the only way to see that a class
4288        does nothing \u2014 by definition it leaves no trace in the markup.
4289    `),t(),e(253,`
4290`),t(),e(254,`
4291`)),s&2&&(m("compact",!0),i(18),m("routerLink","../defects"),i(34),E(o.contracts),i(79),E(o.adjacentContracts),i(62),E(o.deadContracts),i(50),E(o.undefinedContracts),i(7),m("routerLink","../defects"))},dependencies:[$,X,ve,we],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var Oc=()=>[],Nc=(a,r)=>
4291r.title,Bc=(a,r)=>r.label;function Wc(a,r){if(a&1&&(e(0,`
4292                                `),n(1,"a",86),e(2),t(),e(3,`
4293                            `)),a&2){let l=u().$implicit;i(),m("routerLink",V(3,Oc))("fragment",l.anchor),i(),p(l.title)}}function Rc(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
4294                                `,l.title,`
4295                            `)}}function Lc(a,r){a&1&&e(0," below ")}function qc(a,r){a&1&&e(0," no visual ")}function Vc(a,r){if(a&1&&(e(0,`
4296                    `),n(1,"tr"),e(2,`
4297                        `),n(3,"td"),e(4,`
4298                            `),v(5,Wc,4,4)(6,Rc,1,1),t(),e(7,`
4299                        `),n(8,"td",2),e(9),t(),e(10,`
4300                        `),n(11,"td",85),e(12),t(),e(13,`
4301                        `),n(14,"td",2),e(15,`
4302                            `),v(16,Lc,1,0)(17,qc,1,0),t(),e(18,`
4303                    `),t(),e(19,`
4304                `)),a&2){let l=r.$implicit;i(5),y(l.demonstrable?5:6),i(4),p(l.where),i(3),p(l.measured),i(4),y(l.demonstrable?16:17)}}function zc(a,r){if(a&1&&(e(0,`
4305                        `),n(1,"option",87),e(2),t(),e(3,`
4306                    `)),a&2){let l=r.$implicit;i(),m("ngValue",l.value),i(),p(l.label)}}var Ll=(()=>{let r=class r{constructor(){this.snapshotDate=Gn,this.defects=_l,this.demoOptions=ft,this.viewOnlyFields=[new z({key:"dfName",controlName:"dfName",label:"First Name"})],this.headerFields=[new z({key:"dfHeader",controlName:"dfHeader",label:"Jersey Number",fieldHeader:"Uniform"})],this.viewOnlyEntity={dfName:"Dana"},this.emptyEntity={},this.demo={},this.calendarToggles={stock:!0,intended:!0}}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-forms-defects"]],standalone:!1,decls:750,vars:24,consts:[["id","register",1,"card"],["side","shared"],[1,"text-small","text-grey"],[1,"overflow-x-auto"],[1,"table","table-bordered","table-hover","sg-doc-table"],[2,"width","20rem"],[2,"width","18rem"],[2,"width","7rem"],["id","noform",1,"card"],[1,"row"],[1,"col-md-6"],["side","admin"],[3,"ngSubmit"],[1,"form-group"],["for","sgInForm"],["id","sgInForm","type","text","name","sgInForm","placeholder","Player name",3,"ngModelChange","ngModel"],["for","sgOutOfForm"],["id","sgOutOfForm","type","text","name","sgOutOfForm","placeholder","Player name",3,"ngModelChange","ngModel"],["id","asterisk",1,"card"],[1,"col-md-3"],["for","sgAstA"],["aria-hidden","true",1,"required-asterisk"],["id","sgAstA","type","text","placeholder","00"],["for","sgAstB"],[1,"text-danger"],["id","sgAstB","type","text","placeholder","00"],["for","sgAstC"],[1,"required"],["id","sgAstC","type","text","placeholder","00"],["for","sgAstD"],[1,"required-indicator"],["id","sgAstD","type","text","placeholder","00"],["id","text-danger",1,"card"],[1,"col-md-4"],[1,"form-group","form-error"],["for","sgTdA"],["id","sgTdA","type","text","value","not-an-email","readonly",""],[1,"form-error-message"],["for","sgTdB"],["id","sgTdB","type","text","value","not-an-email","readonly",""],["for","sgTdC"],["id","sgTdC","type","text","value","not-an-email","readonly",""],[1,"text-red"],["id","admin-filter-horizontal",1,"card"],["fragment","admin-filter-horizontal",3,"routerLink"],["id","calendar-filters",1,"card"],[1,"calendar-filters"],[1,"form-check"],["inputId","sgTogA",3,"ngModelChange","ngModel"],["for","sgTogA"],[1,"form-check",2,"--p-toggleswitch-handle-size",".5rem","--p-toggleswitch-width","1.5rem","--p-toggleswitch-height",".75rem"],["inputId","sgTogB",3,"ngModelChange","ngModel"],["for","sgTogB"],["id","scoping",1,"card"],[1,"horizontal-form"],[1,"form-group","form-dropdown"],["for","sgFdA"],["inputId","sgFdA","optionLabel","label","optionValue","value","appendTo","body",3,"options"],["for","sgFdB"],["inputId","sgFdB","optionLabel","label","optionValue","value","appendTo","body",3,"options"],[1,"row","mt-3"],[1,"report-filters","p-2"],[1,"resetBtn"],[1,"far","fa-redo-alt"],[1,"p-2"],["id","labels",1,"card"],["for","sgLblNative"],["id","sgLblNative","name","sgLblNative"],["for","sgLblGood"],["inputId","sgLblGood","optionLabel","label","optionValue","value","appendTo","body","styleClass","full-width",3,"ngModelChange","options","ngModel"],["for","sgLblBroken"],["id","sgLblBroken","optionLabel","label","optionValue","value","appendTo","body","styleClass","full-width",3,"ngModelChange","options","ngModel"],["id","emitted-undefined",1,"card"],["formID","sgDefectViewOnly",3,"fields","entity","viewOnly","horizontalForm"],["formID","sgDefectHeader",3,"fields","entity","contentFieldsMode","showSubmitButton","showCancelButton"],["fieldName","dfHeader"],["id","dead-checkbox",1,"card"],[1,"form-checkbox"],["type","checkbox"],[1,"checkmark"],["inputId","sgDeadChk",3,"binary"],["for","sgDeadChk"],["id","no-visual",1,"card"],[3,"routerLink"],["fragment","missing",3,"routerLink"],[1,"text-small"],[3,"routerLink","fragment"],[3,"ngValue"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
4307    `),n(2,"h3"),e(3,"Defect register"),t(),e(4,`
4308    `),n(5,"app-sg-caption",1),e(6),t(),e(7,`
4309    `),n(8,"p",2),e(9,`
4310        Everything on this page that is measurably wrong, in one table. Each row is a measurement
4311        rather than an opinion. Ten of the fifteen have something to look at, and those are rendered
4312        below as a `),n(10,"strong"),e(11,"broken / correct pair"),t(),e(12,` \u2014 the markup as it ships beside the
4313        markup that works. The other five have no visual: a duplicated CSS declaration, an unguarded
4314        dereference, three `),n(13,"code"),e(14,"console.log"),t(),e(15,`s, an orphaned module and a commented-out nav
4315        entry. Those stay table rows, and they say so, so the absence reads as deliberate rather
4316        than as an oversight.
4317    `),t(),e(16,`
4318    `),n(17,"div",3),e(18,`
4319        `),n(19,"table",4),e(20,`
4320            `),n(21,"thead"),e(22,`
4321                `),n(23,"tr"),e(24,`
4322                    `),n(25,"th",5),e(26,"Defect"),t(),e(27,`
4323                    `),n(28,"th",6),e(29,"Where"),t(),e(30,`
4324                    `),n(31,"th"),e(32,"Measured"),t(),e(33,`
4325                    `),n(34,"th",7),e(35,"Rendered"),t(),e(36,`
4326                `),t(),e(37,`
4327            `),t(),e(38,`
4328            `),n(39,"tbody"),e(40,`
4329                `),S(41,Vc,20,4,null,null,Nc),t(),e(43,`
4330        `),t(),e(44,`
4331    `),t(),e(45,`
4332`),t(),e(46,`
4333
4334`),n(47,"div",8),e(48,`
4335    `),n(49,"h3"),e(50,"Enter does nothing on ~280 screens"),t(),e(51,`
4336    `),n(52,"app-sg-caption",1),e(53,"305 templates \u2014 the largest single finding"),t(),e(54,`
4337    `),n(55,"p",2),e(56,`
4338        A control does not need a `),n(57,"code"),e(58,"<form>"),t(),e(59,` to work, and plenty of these are
4339        deliberate \u2014 a filter panel driven by a Run button has nothing to submit. But the
4340        population is far larger than the deliberate cases, and the consequences are uniform: no
4341        implicit submission, no `),n(60,"code"),e(61,"ngSubmit"),t(),e(62,`, no form landmark for a screen reader, and
4342        browsers treat each control as unrelated for autofill. `),n(63,"strong"),e(64,`116 of the 305 sit inside a
4343        dialog`),t(),e(65,`, where the missing Enter is most surprising.
4344    `),t(),e(66,`
4345    `),n(67,"div",9),e(68,`
4346        `),n(69,"div",10),e(70,`
4347            `),n(71,"app-sg-caption",11),e(72,"correct \u2014 inside a <form>, Enter submits"),t(),e(73,`
4348            `),n(74,"form",12),g("ngSubmit",function(h){return h.preventDefault()}),e(75,`
4349                `),n(76,"div",13),e(77,`
4350                    `),n(78,"label",14),e(79,"Search"),t(),e(80,`
4351                    `),n(81,"input",15),M("ngModelChange",function(h){return I(o.demo.inForm,h)||(o.demo.inForm=h),h}),t(),e(82,`
4352                `),t(),e(83,`
4353            `),t(),e(84,`
4354        `),t(),e(85,`
4355        `),n(86,"div",10),e(87,`
4356            `),n(88,"app-sg-caption",11),e(89,"as it ships \u2014 no <form>, Enter is inert"),t(),e(90,`
4357            `),n(91,"div",13),e(92,`
4358                `),n(93,"label",16),e(94,"Search"),t(),e(95,`
4359                `),n(96,"input",17),M("ngModelChange",function(h){return I(o.demo.outOfForm,h)||(o.demo.outOfForm=h),h}),t(),e(97,`
4360            `),t(),e(98,`
4361        `),t(),e(99,`
4362    `),t(),e(100,`
4363    `),n(101,"p",2),e(102,`
4364        Type into both and press Enter. The left one fires a submit; the right one does nothing.
4365        That difference is the whole of the finding \u2014 the two look identical, which is exactly
4366        why it has never been noticed screen by screen.
4367    `),t(),e(103,`
4368`),t(),e(104,`
4369
4370`),n(105,"div",18),e(106,`
4371    `),n(107,"h3"),e(108,"28 of 74 required markers render unstyled"),t(),e(109,`
4372    `),n(110,"app-sg-caption",1),e(111,"three of seven markups reference classes that do not exist"),t(),e(112,`
4373    `),n(113,"p",2),e(114,`
4374        All four asterisks below sit in a positioned `),n(115,"code"),e(116,".form-group"),t(),e(117,`, so
4375        `),n(118,"code"),e(119,".required-asterisk"),t(),e(120,"'s "),n(121,"code"),e(122,"position: absolute; left: -0.4rem"),t(),e(123,` lands
4376        correctly. Only the first one is orange. The other three inherit body colour, and nothing at
4377        the call site distinguishes them \u2014 every one reads as a deliberate required marker.
4378    `),t(),e(124,`
4379    `),n(125,"div",9),e(126,`
4380        `),n(127,"div",19),e(128,`
4381            `),n(129,"app-sg-caption",11),e(130,"correct \u2014 .required-asterisk, 30 uses"),t(),e(131,`
4382            `),n(132,"div",13),e(133,`
4383                `),n(134,"label",20),e(135,"Jersey Number "),n(136,"span",21),e(137,"*"),t()(),e(138,`
4384                `),c(139,"input",22),e(140,`
4385            `),t(),e(141,`
4386        `),t(),e(142,`
4387        `),n(143,"div",19),e(144,`
4388            `),n(145,"app-sg-caption",11),e(146,"as it ships \u2014 .text-danger, 18 uses"),t(),e(147,`
4389            `),n(148,"div",13),e(149,`
4390                `),n(150,"label",23),e(151,"Jersey Number "),n(152,"span",24),e(153,"*"),t()(),e(154,`
4391                `),c(155,"input",25),e(156,`
4392            `),t(),e(157,`
4393        `),t(),e(158,`
4394        `),n(159,"div",19),e(160,`
4395            `),n(161,"app-sg-caption",11),e(162,"as it ships \u2014 .required, 9 uses"),t(),e(163,`
4396            `),n(164,"div",13),e(165,`
4397                `),n(166,"label",26),e(167,"Jersey Number "),n(168,"span",27),e(169,"*"),t()(),e(170,`
4398                `),c(171,"input",28),e(172,`
4399            `),t(),e(173,`
4400        `),t(),e(174,`
4401        `),n(175,"div",19),e(176,`
4402            `),n(177,"app-sg-caption",11),e(178,"as it ships \u2014 .required-indicator, 1 use"),t(),e(179,`
4403            `),n(180,"div",13),e(181,`
4404                `),n(182,"label",29),e(183,"Jersey Number "),n(184,"span",30),e(185,"*"),t()(),e(186,`
4405                `),c(187,"input",31),e(188,`
4406            `),t(),e(189,`
4407        `),t(),e(190,`
4408    `),t(),e(191,`
4409`),t(),e(192,`
4410
4411`),n(193,"div",32),e(194,`
4412    `),n(195,"h3")(196,"code"),e(197,".text-danger"),t(),e(198," is used 83 times and declared nowhere"),t(),e(199,`
4413    `),n(200,"app-sg-caption",1),e(201,"36 templates \u2014 error text rendering in body colour"),t(),e(202,`
4414    `),n(203,"p",2),e(204,`
4415        Nothing in `),n(205,"code"),e(206,"assets/css/sass"),t(),e(207,` declares it \u2014 this app compiles a trimmed
4416        Bootstrap that never included the class. Two component stylesheets declare a local copy
4417        (`),n(208,"code"),e(209,"create-scheduled-report/create.component.scss:2"),t(),e(210,` and
4418        `),n(211,"code"),e(212,"message-edit-bubble.component.scss:81"),t(),e(213,`), and three more declare only a
4419        `),n(214,"code"),e(215,":hover"),t(),e(216,` variant on top of a base colour that does not exist. So it works in
4420        exactly two components and is inert in the other 34 templates.
4421    `),t(),e(217,`
4422    `),n(218,"div",9),e(219,`
4423        `),n(220,"div",33),e(221,`
4424            `),n(222,"app-sg-caption",11),e(223,"correct \u2014 .form-error-message"),t(),e(224,`
4425            `),n(225,"div",34),e(226,`
4426                `),n(227,"label",35),e(228,"Email"),t(),e(229,`
4427                `),c(230,"input",36),e(231,`
4428                `),n(232,"div",37),e(233,"Email must be a valid email address"),t(),e(234,`
4429            `),t(),e(235,`
4430        `),t(),e(236,`
4431        `),n(237,"div",33),e(238,`
4432            `),n(239,"app-sg-caption",11),e(240,"as it ships \u2014 .text-danger"),t(),e(241,`
4433            `),n(242,"div",13),e(243,`
4434                `),n(244,"label",38),e(245,"Email"),t(),e(246,`
4435                `),c(247,"input",39),e(248,`
4436                `),n(249,"div",24),e(250,"Email must be a valid email address"),t(),e(251,`
4437            `),t(),e(252,`
4438        `),t(),e(253,`
4439        `),n(254,"div",33),e(255,`
4440            `),n(256,"app-sg-caption",11),e(257,"for comparison \u2014 .text-red is declared"),t(),e(258,`
4441            `),n(259,"div",13),e(260,`
4442                `),n(261,"label",40),e(262,"Email"),t(),e(263,`
4443                `),c(264,"input",41),e(265,`
4444                `),n(266,"div",42),e(267,"Email must be a valid email address"),t(),e(268,`
4445            `),t(),e(269,`
4446        `),t(),e(270,`
4447    `),t(),e(271,`
4448    `),n(272,"p",2),e(273,`
4449        Remediation is owned by the system-alert normalization project, which already tracks this
4450        class among its 407 no-op colored-text usages and proposes mapping it to
4451        `),n(274,"code"),e(275,".text-red"),t(),e(276,` \u2014 the third column above is what that would look like.
4452    `),t(),e(277,`
4453`),t(),e(278,`
4454
4455`),n(279,"div",43),e(280,`
4456    `),n(281,"h3")(282,"code"),e(283,"app-admin-filter"),t(),e(284,"'s "),n(285,"code"),e(286,"[horizontal]"),t(),e(287," layout has no CSS at all"),t(),e(288,`
4457    `),n(289,"app-sg-caption",1),e(290,"a shared component's second layout mode, unstyled"),t(),e(291,`
4458    `),n(292,"p",2),e(293,`
4459        `),n(294,"code"),e(295,"admin-filter.component.scss"),t(),e(296," is a "),n(297,"strong"),e(298,"0-byte file"),t(),e(299,`, and
4460        `),n(300,"code"),e(301,".admin-filter-container"),t(),e(302,", "),n(303,"code"),e(304,".filters-section"),t(),e(305,` and
4461        `),n(306,"code"),e(307,".content-section"),t(),e(308,` \u2014 the three classes that layout depends on \u2014 are
4462        declared in no stylesheet in the app. The mode emits the markup of a left filter rail beside
4463        projected content and renders as stacked full-width blocks. Its two consumers,
4464        `),n(309,"code"),e(310,"bulk-cancel"),t(),e(311," and "),n(312,"code"),e(313,"advanced-bulk-edit"),t(),e(314,`, ship that way.
4465    `),t(),e(315,`
4466    `),n(316,"p",2),e(317,`
4467        Both layouts are rendered on the
4468        `),n(318,"a",44),e(319,"Architectures"),t(),e(320,`
4469        tab, one after the other. This is the clearest case on the page of why undefined classes are
4470        worse than dead ones: the component's API, its projection slots and its class names all
4471        describe a rail, and reading the template gives you no reason to doubt it.
4472    `),t(),e(321,`
4473`),t(),e(322,`
4474
4475`),n(323,"div",45),e(324,`
4476    `),n(325,"h3")(326,"code"),e(327,".calendar-filters"),t(),e(328," is commented out"),t(),e(329,`
4477    `),n(330,"app-sg-caption",1),e(331,"3_modules/templates.scss:842-847 \u2014 live in 2 templates"),t(),e(332,`
4478    `),n(333,"p",2),e(334,`
4479        The declaration block exists in the partial and is entirely commented out, so its three
4480        `),n(335,"code"),e(336,"--p-toggleswitch-*"),t(),e(337,` overrides never apply. The two templates that carry the
4481        class \u2014 `),n(338,"code"),e(339,"club-calendar/calendar"),t(),e(340,` and
4482        `),n(341,"code"),e(342,"schedule-sign-up/time-slots"),t(),e(343,` \u2014 get stock PrimeNG toggle switches instead of
4483        the smaller ones the rail was designed around. Cosmetic, which is why it survived, and a
4484        good example of a class that is not dead and not working.
4485    `),t(),e(344,`
4486    `),n(345,"div",9),e(346,`
4487        `),n(347,"div",10),e(348,`
4488            `),n(349,"app-sg-caption",11),e(350,"as it ships \u2014 stock size, the class does nothing"),t(),e(351,`
4489            `),n(352,"div",46),e(353,`
4490                `),n(354,"div",47),e(355,`
4491                    `),n(356,"p-toggleswitch",48),M("ngModelChange",function(h){return I(o.calendarToggles.stock,h)||(o.calendarToggles.stock=h),h}),t(),e(357,`
4492                    `),n(358,"label",49),e(359,"Practices"),t(),e(360,`
4493                `),t(),e(361,`
4494            `),t(),e(362,`
4495        `),t(),e(363,`
4496        `),n(364,"div",10),e(365,`
4497            `),n(366,"app-sg-caption",11),e(367,"what the commented-out block intended"),t(),e(368,`
4498            `),n(369,"div",50),e(370,`
4499                `),n(371,"p-toggleswitch",51),M("ngModelChange",function(h){return I(o.calendarToggles.intended,h)||(o.calendarToggles.intended=h),h}),t(),e(372,`
4500                `),n(373,"label",52),e(374,"Practices"),t(),e(375,`
4501            `),t(),e(376,`
4502        `),t(),e(377,`
4503    `),t(),e(378,`
4504    `),n(379,"p",2),e(380,`
4505        The right-hand switch sets the same three custom properties inline, which is the only way to
4506        show what the partial would have done. It is a demonstration, not a proposed fix \u2014
4507        uncommenting the block is the fix, and this page does not apply it.
4508    `),t(),e(381,`
4509`),t(),e(382,`
4510
4511`),n(383,"div",53),e(384,`
4512    `),n(385,"h3"),e(386,"Classes that only work inside one container"),t(),e(387,`
4513    `),n(388,"app-sg-caption",1),e(389,".form-dropdown (26 uses), .resetBtn, .wide-label, .inline-form"),t(),e(390,`
4514    `),n(391,"p",2),e(392,`
4515        These are declared only as descendants of something else, so they read as general-purpose
4516        modifiers and silently do nothing outside their one scope. The pairs below are the same
4517        markup in both positions.
4518    `),t(),e(393,`
4519    `),n(394,"div",9),e(395,`
4520        `),n(396,"div",10),e(397,`
4521            `),n(398,"app-sg-caption",11),e(399,"correct \u2014 .form-dropdown inside .horizontal-form"),t(),e(400,`
4522            `),n(401,"div",54),e(402,`
4523                `),n(403,"div",55),e(404,`
4524                    `),n(405,"label",56),e(406,"Season"),t(),e(407,`
4525                    `),c(408,"p-select",57),e(409,`
4526                `),t(),e(410,`
4527            `),t(),e(411,`
4528        `),t(),e(412,`
4529        `),n(413,"div",10),e(414,`
4530            `),n(415,"app-sg-caption",11),e(416,"as it ships \u2014 the same class, outside one"),t(),e(417,`
4531            `),n(418,"div",55),e(419,`
4532                `),n(420,"label",58),e(421,"Season"),t(),e(422,`
4533                `),c(423,"p-select",59),e(424,`
4534            `),t(),e(425,`
4535        `),t(),e(426,`
4536    `),t(),e(427,`
4537    `),n(428,"div",60),e(429,`
4538        `),n(430,"div",10),e(431,`
4539            `),n(432,"app-sg-caption",11),e(433,"correct \u2014 .resetBtn inside .report-filters"),t(),e(434,`
4540            `),n(435,"div",61),e(436,`
4541                `),n(437,"a",62),c(438,"i",63),t(),e(439,`
4542            `),t(),e(440,`
4543        `),t(),e(441,`
4544        `),n(442,"div",10),e(443,`
4545            `),n(444,"app-sg-caption",11),e(445,"as it ships \u2014 the same anchor, outside one"),t(),e(446,`
4546            `),n(447,"div",64),e(448,`
4547                `),n(449,"a",62),c(450,"i",63),t(),e(451,`
4548            `),t(),e(452,`
4549        `),t(),e(453,`
4550    `),t(),e(454,`
4551    `),n(455,"p",2),e(456,`
4552        `),n(457,"code"),e(458,".resetBtn"),t(),e(459," is deliberately outside the "),n(460,"code"),e(461,"btn-*"),t(),e(462,` namespace because it is
4553        not a button variant, and that is fine. The problem is only that 55 report filter grids use
4554        it without being inside `),n(463,"code"),e(464,".report-filters"),t(),e(465,` \u2014 the advanced panel of
4555        `),n(466,"code"),e(467,"app-admin-filter"),t(),e(468,` is the one place that container exists.
4556    `),t(),e(469,`
4557`),t(),e(470,`
4558
4559`),n(471,"div",65),e(472,`
4560    `),n(473,"h3"),e(474,"56% of labels have no working association"),t(),e(475,`
4561    `),n(476,"app-sg-caption",1),e(477,"1,657 labels, 723 with a for attribute"),t(),e(478,`
4562    `),n(479,"p",2),e(480,`
4563        The pairing rule differs by control, and the third case below is the one that costs
4564        something: a PrimeNG component renders its own inner input, so `),n(481,"code"),e(482,"for"),t(),e(483,` pointed at
4565        the component's `),n(484,"code"),e(485,"id"),t(),e(486,` resolves to a wrapper element that is not a form control.
4566        The label looks associated in the markup, passes a casual review, and does nothing.
4567    `),t(),e(487,`
4568    `),n(488,"div",9),e(489,`
4569        `),n(490,"div",33),e(491,`
4570            `),n(492,"app-sg-caption",11),e(493,"correct \u2014 native, for \u2192 id"),t(),e(494,`
4571            `),n(495,"div",13),e(496,`
4572                `),n(497,"label",66),e(498,"Season"),t(),e(499,`
4573                `),n(500,"select",67),e(501,`
4574                    `),S(502,zc,4,2,null,null,Bc),t(),e(504,`
4575            `),t(),e(505,`
4576        `),t(),e(506,`
4577        `),n(507,"div",33),e(508,`
4578            `),n(509,"app-sg-caption",11),e(510,"correct \u2014 PrimeNG, for \u2192 inputId"),t(),e(511,`
4579            `),n(512,"div",13),e(513,`
4580                `),n(514,"label",68),e(515,"Season"),t(),e(516,`
4581                `),n(517,"p-select",69),M("ngModelChange",function(h){return I(o.demo.goodLabel,h)||(o.demo.goodLabel=h),h}),t(),e(518,`
4582            `),t(),e(519,`
4583        `),t(),e(520,`
4584        `),n(521,"div",33),e(522,`
4585            `),n(523,"app-sg-caption",11),e(524,"as it ships \u2014 for \u2192 the component's id"),t(),e(525,`
4586            `),n(526,"div",13),e(527,`
4587                `),n(528,"label",70),e(529,"Season"),t(),e(530,`
4588                `),n(531,"p-select",71),M("ngModelChange",function(h){return I(o.demo.brokenLabel,h)||(o.demo.brokenLabel=h),h}),t(),e(532,`
4589            `),t(),e(533,`
4590        `),t(),e(534,`
4591    `),t(),e(535,`
4592    `),n(536,"p",2),e(537,`
4593        Click each of the three labels. The first two open their control; the third does nothing.
4594        Remediation across all ~820 bare labels is the parked label-for cleanup project.
4595    `),t(),e(538,`
4596`),t(),e(539,`
4597
4598`),n(540,"div",72),e(541,`
4599    `),n(542,"h3"),e(543,"Four classes the dynamic form emits have no stylesheet"),t(),e(544,`
4600    `),n(545,"app-sg-caption",1),e(546,".f-value, .form-wrapper, .form-group--field-header, .timeDropDown"),t(),e(547,`
4601    `),n(548,"p",2),e(549,`
4602        The app ships markup referencing its own undeclared classes. There is nothing to point at in
4603        a template \u2014 the class is right there in the component's HTML \u2014 so the only way
4604        to see it is beside something that is styled.
4605    `),t(),e(550,`
4606    `),n(551,"div",9),e(552,`
4607        `),n(553,"div",10),e(554,`
4608            `),n(555,"app-sg-caption",11),e(556,"as it ships \u2014 view-only value in .f-value"),t(),e(557,`
4609            `),n(558,"app-dynamic-form",73),e(559,`
4610            `),t(),e(560,`
4611        `),t(),e(561,`
4612        `),n(562,"div",10),e(563,`
4613            `),n(564,"app-sg-caption",11),e(565,"as it ships \u2014 field.fieldHeader in .form-group--field-header"),t(),e(566,`
4614            `),n(567,"app-dynamic-form",74),e(568,`
4615                `),c(569,"app-dynamic-form-field",75),e(570,`
4616            `),t(),e(571,`
4617        `),t(),e(572,`
4618    `),t(),e(573,`
4619    `),n(574,"p",2),e(575,`
4620        The read-only value on the left renders in body text with no treatment of any kind \u2014
4621        no label weight, no field chrome, nothing to distinguish a value from the prose around it.
4622        The field header on the right renders as an unstyled line above the label. Both classes exist
4623        in the component's template and in no stylesheet.
4624        `),n(576,"code"),e(577,".form-wrapper"),t(),e(578," is the widest of the four: "),n(579,"code"),e(580,"dynamic-form.component.html:2"),t(),e(581,`
4625        wraps `),n(582,"strong"),e(583,"every form in the app"),t(),e(584,` in it, plus 30 hand-written uses, and three
4626        component stylesheets define their own local version.
4627    `),t(),e(585,`
4628`),t(),e(586,`
4629
4630`),n(587,"div",76),e(588,`
4631    `),n(589,"h3"),e(590,"Eight dead classes \u2014 the one worth seeing"),t(),e(591,`
4632    `),n(592,"app-sg-caption",1),e(593,".form-checkbox \u2014 ~50 lines across 6 rule blocks"),t(),e(594,`
4633    `),n(595,"p",2),e(596,`
4634        Dead CSS has no visual by definition, but this one is different: it is a hand-built checkmark
4635        checkbox that predates `),n(597,"code"),e(598,"p-checkbox"),t(),e(599,`, and its stylesheet expects a specific markup
4636        shape. Below is that shape. Because the class is dead the CSS is gone, so the hidden n
4636ative
4637        input it was meant to replace shows through and the `),n(600,"code"),e(601,".checkmark"),t(),e(602,` span renders as
4638        nothing.
4639    `),t(),e(603,`
4640    `),n(604,"div",9),e(605,`
4641        `),n(606,"div",10),e(607,`
4642            `),n(608,"app-sg-caption",11),e(609,"as it would have been \u2014 the markup its CSS expects"),t(),e(610,`
4643            `),n(611,"div",77),e(612,`
4644                `),n(613,"label"),e(614,`
4645                    `),c(615,"input",78),e(616,`
4646                    `),c(617,"span",79),e(618,`
4647                    Dead class \u2014 renders as a bare browser checkbox
4648                `),t(),e(619,`
4649            `),t(),e(620,`
4650        `),t(),e(621,`
4651        `),n(622,"div",10),e(623,`
4652            `),n(624,"app-sg-caption",11),e(625,"correct \u2014 what replaced it"),t(),e(626,`
4653            `),n(627,"div",47),e(628,`
4654                `),c(629,"p-checkbox",80),e(630,`
4655                `),n(631,"label",81),e(632,"p-checkbox, the sanctioned control"),t(),e(633,`
4656            `),t(),e(634,`
4657        `),t(),e(635,`
4658    `),t(),e(636,`
4659`),t(),e(637,`
4660
4661`),n(638,"div",82),e(639,`
4662    `),n(640,"h3"),e(641,"The five with no visual"),t(),e(642,`
4663    `),n(643,"app-sg-caption",1),e(644,"real, measured, and nothing to render"),t(),e(645,`
4664    `),n(646,"p",2),e(647,`
4665        Listed here rather than silently dropped, so the gap in the demos above reads as deliberate.
4666    `),t(),e(648,`
4667    `),n(649,"ul",2),e(650,`
4668        `),n(651,"li"),e(652,`
4669            `),n(653,"strong")(654,"code"),e(655,".form-label"),t(),e(656," is declared three times"),t(),e(657,` \u2014
4670            `),n(658,"code"),e(659,"forms.scss:160"),t(),e(660,", "),n(661,"code"),e(662,":176"),t(),e(663,", "),n(664,"code"),e(665,":685"),t(),e(666,`, plus twice more as
4671            `),n(667,"code"),e(668,"legend.form-label"),t(),e(669," inside "),n(670,"code"),e(671,".horizontal-form"),t(),e(672,`. The blocks do not
4672            conflict outright, so nothing renders wrong; resolving any one property just means
4673            reading all three.
4674        `),t(),e(673,`
4675        `),n(674,"li"),e(675,`
4676            `),n(676,"strong")(677,"code"),e(678,"DynamicFormField.controlName"),t(),e(679,` is typed optional and is
4677            mandatory`),t(),e(680," \u2014 "),n(681,"code"),e(682,"dynamic-form-field.model.ts:237"),t(),e(683,` dereferences it
4678            unguarded, so a hand-built field without one throws at construction. Nothing renders
4679            because nothing can. It only bites outside production code, which is exactly what this
4680            harness is; see the `),n(684,"a",83),e(685,"Fields"),t(),e(686,` tab.
4681        `),t(),e(687,`
4682        `),n(688,"li"),e(689,`
4683            `),n(690,"strong"),e(691,"Three production "),n(692,"code"),e(693,"console.log"),t(),e(694,"s"),t(),e(695,` \u2014
4684            `),n(696,"code"),e(697,"validators.model.ts:232"),t(),e(698,` fires on every min-validation,
4685            `),n(699,"code"),e(700,"dynamic-form.component.ts:444"),t(),e(701,` logs the whole form object on every submit,
4686            and `),n(702,"code"),e(703,"checkboxGroupCheck()"),t(),e(704,` logs its event. Open the console and submit any
4687            form on this page to see the second one.
4688        `),t(),e(705,`
4689        `),n(706,"li"),e(707,`
4690            `),n(708,"strong"),e(709,"The form-builder system has one consumer"),t(),e(710,` \u2014
4691            `),n(711,"code"),e(712,"shared/modules/form-builder/"),t(),e(713," holds the only "),n(714,"code"),e(715,"steps"),t(),e(716,` /
4692            `),n(717,"code"),e(718,"columnSpan"),t(),e(719," / "),n(720,"code"),e(721,"multiStep"),t(),e(722,` metadata in the codebase and is
4693            reachable only from `),n(723,"code"),e(724,"/form-builder-demo"),t(),e(725,`. Described on the
4694            `),n(726,"a",84),e(727,"Architectures"),t(),e(728,` tab.
4695        `),t(),e(729,`
4696        `),n(730,"li"),e(731,`
4697            `),n(732,"strong"),e(733,"The styleguide is unreachable from the nav"),t(),e(734,` \u2014
4698            `),n(735,"code"),e(736,"left-nav.component.html:529-537"),t(),e(737,`, the super-admin entry is commented out, so
4699            this harness is URL-only. `),n(738,"code"),e(739,"shared/constants.ts:25"),t(),e(740,` also still lists the dead
4700            `),n(741,"code"),e(742,"/styleguide"),t(),e(743," path; the route is "),n(744,"code"),e(745,"/admin/styleguide"),t(),e(746,`.
4701        `),t(),e(747,`
4702    `),t(),e(748,`
4703`),t(),e(749,`
4704`)),s&2&&(i(6),f("measured on ",o.snapshotDate," \u2014 nothing here is fixed by this page"),i(35),E(o.defects),i(40),T("ngModel",o.demo.inForm),i(15),T("ngModel",o.demo.outOfForm),i(222),m("routerLink","../architectures"),i(38),T("ngModel",o.calendarToggles.stock),i(15),T("ngModel",o.calendarToggles.intended),i(37),m("options",o.demoOptions),i(15),m("options",o.demoOptions),i(79),E(o.demoOptions),i(15),m("options",o.demoOptions),T("ngModel",o.demo.goodLabel),i(14),m("options",o.demoOptions),T("ngModel",o.demo.brokenLabel),i(27),m("fields",o.viewOnlyFields)("entity",o.viewOnlyEntity)("viewOnly",!0)("horizontalForm",!0),i(9),m("fields",o.headerFields)("entity",o.emptyEntity)("contentFieldsMode",!0)("showSubmitButton",!1)("showCancelButton",!1),i(62),m("binary",!0),i(55),m("routerLink","../fields"),i(42),m("routerLink","../architectures"))},dependencies:[Ea,Fe,Pe,be,U,fa,H,Sa,Be,Ne,$,Oe,ye,cn,X],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var ql=(()=>
4704{let r=class r{constructor(d){this.siteDataService=d}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-tables"]],standalone:!1,decls:236,vars:0,consts:[[1,""],[1,"table"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
4705    `),n(2,"h2"),e(3,"Tables"),t(),e(4,`
4706    `),n(5,"h3"),e(6,"Base Style"),t(),e(7,`
4707    `),n(8,"div",0),e(9,`
4708    `),n(10,"table",1),e(11,`
4709      `),n(12,"thead"),e(13,`
4710        `),n(14,"tr"),e(15,`
4711          `),n(16,"th"),e(17,"Table Head"),t(),e(18,`
4712          `),n(19,"th"),e(20,"Table Head"),t(),e(21,`
4713          `),n(22,"th"),e(23,"Table Head"),t(),e(24,`
4714          `),n(25,"th"),e(26,"Table Head"),t(),e(27,`
4715          `),n(28,"th"),e(29,"Table Head"),t(),e(30,`
4716          `),n(31,"th"),e(32,"Table Head"),t(),e(33,`
4717          `),n(34,"th"),e(35,"Table Head"),t(),e(36,`
4718          `),n(37,"th"),e(38,"Table Head"),t(),e(39,`
4719        `),t(),e(40,`
4720      `),t(),e(41,`
4721      `),n(42,"tbody"),e(43,`
4722        `),n(44,"tr"),e(45,`
4723          `),n(46,"td"),e(47,"Table Cell"),t(),e(48,`
4724          `),n(49,"td"),e(50,"Table Cell"),t(),e(51,`
4725          `),n(52,"td"),e(53,"Table Cell"),t(),e(54,`
4726          `),n(55,"td"),e(56,"Table Cell"),t(),e(57,`
4727          `),n(58,"td"),e(59,"Table Cell"),t(),e(60,`
4728          `),n(61,"td"),e(62,"Table Cell"),t(),e(63,`
4729          `),n(64,"td"),e(65,"Table Cell"),t(),e(66,`
4730          `),n(67,"td"),e(68,"Table Cell"),t(),e(69,`
4731        `),t(),e(70,`
4732        `),n(71,"tr"),e(72,`
4733          `),n(73,"td"),e(74,"Table Cell"),t(),e(75,`
4734          `),n(76,"td"),e(77,"Table Cell"),t(),e(78,`
4735          `),n(79,"td"),e(80,"Table Cell"),t(),e(81,`
4736          `),n(82,"td"),e(83,"Table Cell"),t(),e(84,`
4737          `),n(85,"td"),e(86,"Table Cell"),t(),e(87,`
4738          `),n(88,"td"),e(89,"Table Cell"),t(),e(90,`
4739          `),n(91,"td"),e(92,"Table Cell"),t(),e(93,`
4740          `),n(94,"td"),e(95,"Table Cell"),t(),e(96,`
4741        `),t(),e(97,`
4742        `),n(98,"tr"),e(99,`
4743          `),n(100,"td"),e(101,"Table Cell"),t(),e(102,`
4744          `),n(103,"td"),e(104,"Table Cell"),t(),e(105,`
4745          `),n(106,"td"),e(107,"Table Cell"),t(),e(108,`
4746          `),n(109,"td"),e(110,"Table Cell"),t(),e(111,`
4747          `),n(112,"td"),e(113,"Table Cell"),t(),e(114,`
4748          `),n(115,"td"),e(116,"Table Cell"),t(),e(117,`
4749          `),n(118,"td"),e(119,"Table Cell"),t(),e(120,`
4750          `),n(121,"td"),e(122,"Table Cell"),t(),e(123,`
4751        `),t(),e(124,`
4752        `),n(125,"tr"),e(126,`
4753          `),n(127,"td"),e(128,"Table Cell"),t(),e(129,`
4754          `),n(130,"td"),e(131,"Table Cell"),t(),e(132,`
4755          `),n(133,"td"),e(134,"Table Cell"),t(),e(135,`
4756          `),n(136,"td"),e(137,"Table Cell"),t(),e(138,`
4757          `),n(139,"td"),e(140,"Table Cell"),t(),e(141,`
4758          `),n(142,"td"),e(143,"Table Cell"),t(),e(144,`
4759          `),n(145,"td"),e(146,"Table Cell"),t(),e(147,`
4760          `),n(148,"td"),e(149,"Table Cell"),t(),e(150,`
4761        `),t(),e(151,`
4762        `),n(152,"tr"),e(153,`
4763          `),n(154,"td"),e(155,"Table Cell"),t(),e(156,`
4764          `),n(157,"td"),e(158,"Table Cell"),t(),e(159,`
4765          `),n(160,"td"),e(161,"Table Cell"),t(),e(162,`
4766          `),n(163,"td"),e(164,"Table Cell"),t(),e(165,`
4767          `),n(166,"td"),e(167,"Table Cell"),t(),e(168,`
4768          `),n(169,"td"),e(170,"Table Cell"),t(),e(171,`
4769          `),n(172,"td"),e(173,"Table Cell"),t(),e(174,`
4770          `),n(175,"td"),e(176,"Table Cell"),t(),e(177,`
4771        `),t(),e(178,`
4772        `),n(179,"tr"),e(180,`
4773          `),n(181,"td"),e(182,"Table Cell"),t(),e(183,`
4774          `),n(184,"td"),e(185,"Table Cell"),t(),e(186,`
4775          `),n(187,"td"),e(188,"Table Cell"),t(),e(189,`
4776          `),n(190,"td"),e(191,"Table Cell"),t(),e(192,`
4777          `),n(193,"td"),e(194,"Table Cell"),t(),e(195,`
4778          `),n(196,"td"),e(197,"Table Cell"),t(),e(198,`
4779          `),n(199,"td"),e(200,"Table Cell"),t(),e(201,`
4780          `),n(202,"td"),e(203,"Table Cell"),t(),e(204,`
4781        `),t(),e(205,`
4782        `),n(206,"tr"),e(207,`
4783          `),n(208,"td"),e(209,"Table Cell"),t(),e(210,`
4784          `),n(211,"td"),e(212,"Table Cell"),t(),e(213,`
4785          `),n(214,"td"),e(215,"Table Cell"),t(),e(216,`
4786          `),n(217,"td"),e(218,"Table Cell"),t(),e(219,`
4787          `),n(220,"td"),e(221,"Table Cell"),t(),e(222,`
4788          `),n(223,"td"),e(224,"Table Cell"),t(),e(225,`
4789          `),n(226,"td"),e(227,"Table Cell"),t(),e(228,`
4790          `),n(229,"td"),e(230,"Table Cell"),t(),e(231,`
4791        `),t(),e(232,`
4792      `),t(),e(233,`
4793    `),t(),e(234,`
4794  `),t(),e(235,`
4795  `),t())},encapsulation:2});let a=r;return a})();var Ul=(()=>
vendor: 7,304 bytes, lines 4795-4874
4795{let r=class r{constructor(d){this.siteDataService=d}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-sg-utilities"]],standalone:!1,decls:484,vars:8,consts:[[1,"text-small","text-grey"],[1,"page"],[1,"section"],[1,"container-fluid"],[1,"row","mt-5"],[1,"col-12"],[1,"d-flex","align-items-center","flex-wrap","gap-3"],[1,"card","border-radius",2,"width","140px"],[1,"sub-head","mb-2"],[1,"card","border-radius-sm",2,"width","140px"],[1,"card","border-radius-lg",2,"width","140px"],[1,"card","border-radius-xl",2,"width","140px"],[1,"card","box-shadow-none",2,"width","180px"],[1,"d-block","mb-1"],[1,"text-smallest"],[1,"card","box-shadow-sm",2,"width","180px"],[1,"card","box-shadow",2,"width","180px"],[1,"card","box-shadow-md",2,"width","180px"],[1,"card","box-shadow-lg",2,"width","180px"],[1,"card","box-shadow-xl",2,"width","180px"],[1,"table","table-bordered","table-hover"],["status","default","text","Default Status"],["status","default","text","Default",3,"dots"],["status","default","text","Default","tooltipText","This is default"],["status","active","text","Active Status"],["status","active","text","Active",3,"dots"],["status","active","text","Active","tooltipText","Currently active"],["status","success","text","Success Status"],["status","success","text","Success",3,"dots"],["status","success","text","Success","tooltipText","Operation successful"],["status","error","text","Error Status"],["status","error","text","Error",3,"dots"],["status","error","text","Error","tooltipText","An error occurred"],["status","warning","text","Warning Status"],["status","warning","text","Warning",3,"dots"],["status","warning","text","Warning","tooltipText","Please review"],["status","note","text","Note Status"],["status","note","text","Note",3,"dots"],["status","note","text","Note","tooltipText","Important note"],[1,"table-info"],["colspan","4",1,"text-center"],["status","success"],["status","error",3,"dots"],["status","warning","tooltipText","Hover for info"],[1,"table","table-bordered"],[3,"pillCount"],[1,"mb-3"],[1,"btn","btn-primary"],[1,"btn","btn-secondary","ml-2"],[1,"btn","btn-tertiary","ml-2"],[1,"btn","ml-2"],[1,"btn","btn-primary","btn-sm"],[1,"btn","btn-secondary","btn-sm","ml-2"],["disabled","",1,"btn","btn-primary"],["disabled","",1,"btn","btn-secondary","ml-2"],["type","success"],["type","error"],["type","warning"],["type","info"],[1,"text-muted"]],template:function(s,o){s&1&&(n(0,"h2"),e(1,"Utilities & Misc"),t(),e(2,`
4796`),n(3,"p",0),e(4,`
4797    Border radius, box shadow, status indicators, badges, buttons, alerts, loading states and user
4798    components. Everything below was hidden behind `),n(5,"code"),e(6,"d-none"),t(),e(7,` on the old
4799    `),n(8,"code"),e(9,"/admin/ui-test-page"),t(),e(10,` landing and had not rendered in a long time \u2014 expect rough
4800    edges. The component sections here want splitting into `),n(11,"code"),e(12,"components/*"),t(),e(13,` pages.
4801`),t(),e(14,`
4802
4803`),n(15,"main",1),e(16,`
4804    `),n(17,"section",2),e(18,`
4805        `),n(19,"div",3),e(20,`
4806            `),n(21,"div",4),e(22,`
4807                `),n(23,"div",5),e(24,`
4808                    `),n(25,"h2"),e(26,"Border Radius"),t(),e(27,`
4809                    `),n(28,"div",6),e(29,`
4810                        `),n(30,"div",7),e(31,`
4811                            `),n(32,"div",8),e(33,"border-radius"),t(),e(34,`
4812                            `),n(35,"code"),e(36,".border-radius"),t(),c(37,"br"),e(38,`
4813                            `),n(39,"code"),e(40,"4px"),t(),e(41,`
4814                        `),t(),e(42,`
4815                        `),n(43,"div",9),e(44,`
4816                            `),n(45,"div",8),e(46,"border-radius-sm"),t(),e(47,`
4817                            `),n(48,"code"),e(49,".border-radius-sm"),t(),c(50,"br"),e(51,`
4818                            `),n(52,"code"),e(53,"4px"),t(),e(54,`
4819                        `),t(),e(55,`
4820                        `),n(56,"div",10),e(57,`
4821                            `),n(58,"div",8),e(59,"border-radius-lg"),t(),e(60,`
4822                            `),n(61,"code"),e(62,".border-radius-lg"),t(),c(63,"br"),e(64,`
4823                            `),n(65,"code"),e(66,"8px"),t(),e(67,`
4824                        `),t(),e(68,`
4825                        `),n(69,"div",11),e(70,`
4826                            `),n(71,"div",8),e(72,"border-radius-xl"),t(),e(73,`
4827                            `),n(74,"code"),e(75,".border-radius-xl"),t(),c(76,"br"),e(77,`
4828                            `),n(78,"code"),e(79,"16px"),t(),e(80,`
4829                        `),t(),e(81,`
4830                    `),t(),e(82,`
4831                `),t(),e(83,`
4832            `),t(),e(84,`
4833
4834            `),n(85,"div",4),e(86,`
4835                `),n(87,"div",5),e(88,`
4836                    `),n(89,"h2"),e(90,"Box Shadows"),t(),e(91,`
4837                    `),n(92,"div",6),e(93,`
4838                        `),n(94,"div",12),e(95,`
4839                            `),n(96,"div",8),e(97,"box-shadow-none"),t(),e(98,`
4840                            `),n(99,"code",13),e(100,".box-shadow-none"),t(),e(101,`
4841                            `),n(102,"code",14),e(103,"none"),t(),e(104,`
4842                        `),t(),e(105,`
4843                        `),n(106,"div",15),e(107,`
4844                            `),n(108,"div",8),e(109,"box-shadow-sm"),t(),e(110,`
4845                            `),n(111,"code",13),e(112,".box-shadow-sm"),t(),e(113,`
4846                            `),n(114,"code",14),e(115,"0 2px 4px rgba(0,0,0,0.1)"),t(),e(116,`
4847                        `),t(),e(117,`
4848                        `),n(118,"div",16),e(119,`
4849                            `),n(120,"div",8),e(121,"box-shadow"),t(),e(122,`
4850                            `),n(123,"code",13),e(124,".box-shadow"),t(),e(125,`
4851                            `),n(126,"code",14),e(127,"0 1px 2px rgba(0,0,0,0.08), 0 3px 6px -2px rgba(0,0,0,0.04)"),t(),e(128,`
4852                        `),t(),e(129,`
4853                        `),n(130,"div",17),e(131,`
4854                            `),n(132,"div",8),e(133,"box-shadow-md"),t(),e(134,`
4855                            `),n(135,"code",13),e(136,".box-shadow-md"),t(),e(137,`
4856                            `),n(138,"code",14),e(139,"0 2px 5px rgba(0,0,0,0.26)"),t(),e(140,`
4857                        `),t(),e(141,`
4858                        `),n(142,"div",18),e(143,`
4859                            `),n(144,"div",8),e(145,"box-shadow-lg"),t(),e(146,`
4860                            `),n(147,"code",13),e(148,".box-shadow-lg"),t(),e(149,`
4861                            `),n(150,"code",14),e(151,"0 2px 8px rgba(0,0,0,0.1)"),t(),e(152,`
4862                        `),t(),e(153,`
4863                        `),n(154,"div",19),e(155,`
4864                            `),n(156,"div",8),e(157,"box-shadow-xl"),t(),e(158,`
4865                            `),n(159,"code",13),e(160,".box-shadow-xl"),t(),e(161,`
4866                            `),n(162,"code",14),e(163,"0 5px 15px rgba(0,0,0,0.3)"),t(),e(164,`
4867                        `),t(),e(165,`
4868                    `),t(),e(166,`
4869                `),t(),e(167,`
4870            `),t(),e(168,`
4871            `),n(169,"div",4),e(170,`
4872                `),n(171,"div",5),e(172,`
4873                    `),n(173,"h2"),e(174,"Status Indicator Component - All Status Variations"),t(),e(175,`
4874                    `),n(176,"table",20),e(177,`
4875                        `),n(178,"thead"),e(179,`
4876                            `),n(180,"tr"),e(181,`
4877                                `),n(182,"th"),e(183,"Status Type"),t(),e(184,`
4878                                `),n(185,"th"),e(186,"Text Only"),t(),e(187,`
4879                                `),n(188,"th"),e(189,"With Dots"),t(),e(190,`
4880                                `),n(191,"th"),e(192,"With Tooltip"),t(),e(193,`
4881                            `),t(),e(194,`
4882                        `),t(),e(195,`
4883                        `),n(196,"tbody"),e(197,`
4884                            `),n(198,"tr"),e(199,`
4885                                `),n(200,"td")(201,"code"),e(202,"default"),t()(),e(203,`
4886                                `),n(204,"td"),c(205,"app-status-indicator",21),e(206,`
4887                                `),t(),e(207,`
4888                                `),n(208,"td"),c(209,"app-status-indicator",22),t(),e(210,`
4889                                `),n(211,"td"),c(212,"app-status-indicator",23),t(),e(213,`
4890                            `),t(),e(214,`
4891                            `),n(215,"tr"),e(216,`
4892                                `),n(217,"td")(218,"code"),e(219,"active"),t()(),e(220,`
4893                                `),n(221,"td"),c(222,"app-status-indicator",24),e(223,`
4894                                `),t(),e(224,`
4895                                `),n(225,"td"),c(226,"app-status-indicator",25),t(),e(227,`
4896                                `),n(228,"td"),c(229,"app-status-indicator",26),t(),e(230,`
4897                            `),t(),e(231,`
4898                            `),n(232,"tr"),e(233,`
4899                                `),n(234,"td")(235,"code"),e(236,"success"),t()(),e(237,`
4900                                `),n(238,"td"),c(239,"app-status-indicator",27),e(240,`
4901                                `),t(),e(241,`
4902                                `),n(242,"td"),c(243,"app-status-indicator",28),t(),e(244,`
4903                                `),n(245,"td"),c(246,"app-status-indicator",29),t(),e(247,`
4904                            `),t(),e(248,`
4905                            `),n(249,"tr"),e(250,`
4906                                `),n(251,"td")(252,"code"),e(253,"error"),t()(),e(254,`
4907                                `),n(255,"td"),c(256,"app-status-indicator",30),e(257,`
4908                                `),t(),e(258,`
4909                                `),n(259,"td"),c(260,"app-status-indicator",31),t(),e(261,`
4910                                `),n(262,"td"),c(263,"app-status-indicator",32),t(),e(264,`
4911                            `),t(),e(265,`
4912                            `),n(266,"tr"),e(267,`
4913                                `),n(268,"td")(269,"code"),e(270,"warning"),t()(),e(271,`
4914                                `),n(272,"td"),c(273,"app-status-indicator",33),e(274,`
4915                                `),t(),e(275,`
4916                                `),n(276,"td"),c(277,"app-status-indicator",34),t(),e(278,`
4917                                `),n(279,"td"),c(280,"app-status-indicator",35),t(),e(281,`
4918                            `),t(),e(282,`
4919                            `),n(283,"tr"),e(284,`
4920                                `),n(285,"td")(286,"code"),e(287,"note"),t()(),e(288,`
4921                                `),n(289,"td"),c(290,"app-status-indicator",36),t(),e(291,`
4922                                `),n(292,"td"),c(293,"app-status-indicator",37),t(),e(294,`
4923                                `),n(295,"td"),c(296,"app-status-indicator",38),t(),e(297,`
4924                            `),t(),e(298,`
4925                            `),n(299,"tr",39),e(300,`
4926                                `),n(301,"td",40)(302,"strong"),e(303,`Projected Content Example (no text
4927                                        prop)`),t()(),e(304,`
4928                            `),t(),e(305,`
4929                            `),n(306,"tr"),e(307,`
4930                                `),n(308,"td")(309,"code"),e(310,"projected"),t()(),e(311,`
4931                                `),n(312,"td")(313,"app-status-indicator",41),e(314,"Custom Content Here"),t(),e(315,`
4932                                `),t(),e(316,`
4933                                `),n(317,"td")(318,"app-status-indicator",42),e(319,`Error with
4934                                        dots`),t()(),e(320,`
4935                                `),n(321,"td")(322,"app-status-indicator",43),e(323,`Hover
4936                                        me`),t()(),e(324,`
4937                            `),t(),e(325,`
4938                        `),t(),e(326,`
4939                    `),t(),e(327,`
4940                `),t(),e(328,`
4941            `),t(),e(329,`
4942
4943
4944            `),n(330,"div",4),e(331,`
4945                `),n(332,"div",5),e(333,`
4946                    `),n(334,"h2"),e(335,"Other Badge Components"),t(),e(336,`
4947                    `),n(337,"table",44),e(338,`
4948                        `),n(339,"thead"),e(340,`
4949                            `),n(341,"tr"),e(342,`
4950                                `),n(343,"th"),e(344,"Component"),t(),e(345,`
4951                                `),n(346,"th"),e(347,"Example"),t(),e(348,`
4952                            `),t(),e(349,`
4953                        `),t(),e(350,`
4954                        `),n(351,"tbody"),e(352,`
4955                            `),n(353,"tr"),e(354,`
4956                                `),n(355,"td"),e(356,"Pill Counter"),t(),e(357,`
4957                                `),n(358,"td")(359,"app-pill-counter",45),e(360,"Notifications"),t()(),e(361,`
4958                            `),t(),e(362,`
4959                        `),t(),e(363,`
4960                    `),t(),e(364,`
4961                `),t(),e(365,`
4962            `),t(),e(366,`
4963
4964            `),n(367,"div",4),e(368,`
4965                `),n(369,"div",5),e(370,`
4966                    `),n(371,"h2"),e(372,"Buttons"),t(),e(373,`
4967                    `),n(374,"div",46),e(375,`
4968                        `),n(376,"button",47),e(377,"Primary Button"),t(),e(378,`
4969                        `),n(379,"button",48),e(380,"Secondary Button"),t(),e(381,`
4970                        `),n(382,"button",49),e(383,"Tertiary Button"),t(),e(384,`
4971                        `),n(385,"button",50),e(386,"Default Button"),t(),e(387,`
4972                    `),t(),e(388,`
4973
4974                    `),n(389,"div",46),e(390,`
4975                        `),n(391,"button",51),e(392,"Small Primary"),t(),e(393,`
4976                        `),n(394,"button",52),e(395,"Small Secondary"),t(),e(396,`
4977                    `),t(),e(397,`
4978
4979                    `),n(398,"div",46),e(399,`
4980                        `),n(400,"button",53),e(401,"Disabled Primary"),t(),e(402,`
4981                        `),n(403,"button",54),e(404,"Disabled Secondary"),t(),e(405,`
4982                    `),t(),e(406,`
4983                `),t(),e(407,`
4984            `),t(),e(408,`
4985
4986            `),n(409,"div",4),e(410,`
4987                `),n(411,"div",5),e(412,`
4988                    `),n(413,"h2"),e(414,"Alerts & Messages"),t(),e(415,`
4989                    `),n(416,"div",46),e(417,`
4990                        `),n(418,"app-inline-alert",55),e(419,"This is a success message"),t(),e(420,`
4991                    `),t(),e(421,`
4992                    `),n(422,"div",46),e(423,`
4993                        `),n(424,"app-inline-alert",56),e(425,"This is an error message"),t(),e(426,`
4994                    `),t(),e(427,`
4995                    `),n(428,"div",46),e(429,`
4996                        `),n(430,"app-inline-alert",57),e(431,"This is a warning message"),t(),e(432,`
4997                    `),t(),e(433,`
4998                    `),n(434,"div",46),e(435,`
4999                        `),n(436,"app-inline-alert",58),e(437,"This is an info message"),t(),e(438,`
5000                    `),t(),e(439,`
5001                `),t(),e(440,`
5002            `),t(),e(441,`
5003            `),n(442,"div",4),e(443,`
5004                `),n(444,"div",5),e(445,`
5005                    `),n(446,"h2"),e(447,"Loading States"),t(),e(448,`
5006                    `),n(449,"div",46),e(450,`
5007                        `),c(451,"app-skeleton-template"),e(452,`
5008                    `),t(),e(453,`
5009                `),t(),e(454,`
5010            `),t(),e(455,`
5011
5012            `),n(456,"div",4),e(457,`
5013                `),n(458,"div",5),e(459,`
5014                    `),n(460,"h2"),e(461,"User Components"),t(),e(462,`
5015                    `),n(463,"div",46),e(464,`
5016                        `),c(465,"app-user-initials"),e(466,`
5017                    `),t(),e(467,`
5018                `),t(),e(468,`
5019            `),t(),e(469,`
5020
5021            `),n(470,"div",4),e(471,`
5022                `),n(472,"div",5),e(473,`
5023                    `),n(474,"p",59),e(475,`
5024                        `),n(476,"em"),e(477,"This page is only visible to Super Admins for testing purposes."),t(),e(478,`
5025                    `),t(),e(479,`
5026                `),t(),e(480,`
5027            `),t(),e(481,`
5028        `),t(),e(482,`
5029    `),t(),e(483,`
5030`),t()),s&2&&(i(209),m("dots",!0),i(17),m("dots",!0),i(17),m("dots",!0),i(17),m("dots",!0),i(17),m("dots",!0),i(16),m("dots",!0),i(25),m("dots",!0),i(41),m("pillCount",5))},dependencies:[nt,sn,le,We,lt],encapsulation:2});let a=r;return a})();function jc(a,r){if(a&1&&(e(0,`
5031          `),n(1,"div",15),e(2,`
5032            `),c(3,"i",16),e(4,`
5033            `),n(5,"small",17),e(6),t(),e(7,`
5034          `),t(),e(8,`
5035        `)),a&2){let l=r.$implicit;i(),m("title",l.class),i(2),ne(l.class),i(3),p(l.name)}}function Gc(a,r){if(a&1&&(e(0,`
5036          `),n(1,"p",5),e(2),t(),e(3,`
5037        `)),a&2){let l=u();i(2),q("Showing ",l.filteredV7Icons.length," of ",l.v7NewIcons.length)}}function $c(a,r){if(a&1&&(e(0,`
5038            `),n(1,"div",18),e(2,`
5039              `),c(3,"i",16),e(4,`
5040              `),n(5,"small",17),e(6),t(),e(7,`
5041            `),t(),e(8,`
5042          `)),a&2){let l=r.$implicit;i(),m("title",l.class),i(2),ne(l.class),i(3),f("k",l.name)}}function Hl(a){return{name:a,class:`fa-regular fa-${a}`}}var Kc=["0","00","1","2","3","360-degrees","4","5","6","7","8","9","a","abacus","accent-grave","acorn","address-book","address-card","air-conditioner","airplay","alarm-clock","alarm-exclamation","alarm-plus","alarm-snooze","album","album-circle-plus","album-circle-user","album-collection","album-collection-circle-plus","album-collection-circle-user","alicorn","alien","alien-8bit","align-center","align-justify","align-left","align-right","align-slash","alt","amp-guitar","ampersand","anchor","anchor-circle-check","anchor-circle-exclamation","anchor-circle-xmark","anchor-lock","angel","angle","angle-90","angle-down","angle-left","angle-right","angle-up","angles-down","angles-left","angles-right","angles-up","angles-up-down","ankh","apartment","aperture","apostrophe","apple-core","apple-whole","archway","arrow-down","arrow-down-1-9","arrow-down-9-1","arrow-down-a-z","arrow-down-arrow-up","arrow-down-big-small","arrow-down-from-arc","arrow-down-from-dotted-line","arrow-down-from-line","arrow-down-left","arrow-down-left-and-arrow-up-right-to-center","arrow-down-long","arrow-down-right","arrow-down-short-wide","arrow-down-small-big","arrow-down-square-triangle","arrow-down-to-arc","arrow-down-to-bracket","arrow-down-to-dotted-line","arrow-down-to-line","arrow-down-to-square","arrow-down-triangle-square","arrow-down-up-across-line","arrow-down-up-lock","arrow-down-wide-short","arrow-down-z-a","arrow-left","arrow-left-from-arc","arrow-left-from-line","arrow-left-long","arrow-left-long-to-line","arrow-left-to-arc","arrow-left-to-line","arrow-pointer","arrow-progress","arrow-right","arrow-right-arrow-left","arrow-right-from-arc","arrow-right-from-bracket","arrow-right-from-line","arrow-right-long","arrow-right-long-to-line","arrow-right-to-arc","arrow-right-to-bracket","arrow-right-to-city","arrow-right-to-line","arrow-rotate-left","arrow-rotate-right","arrow-trend-down","arrow-trend-up","arrow-tur
5042n-down","arrow-turn-down-left","arrow-turn-down-right","arrow-turn-left","arrow-turn-left-down","arrow-turn-left-up","arrow-turn-right","arrow-turn-up","arrow-up","arrow-up-1-9","arrow-up-9-1","arrow-up-a-z","arrow-up-arrow-down","arrow-up-big-small","arrow-up-from-arc","arrow-up-from-bracket","arrow-up-from-dotted-line","arrow-up-from-ground-water","arrow-up-from-line","arrow-up-from-square","arrow-up-from-water-pump","arrow-up-left","arrow-up-left-from-circle","arrow-up-long","arrow-up-right","arrow-up-right-and-arrow-down-left-from-center","arrow-up-right-dots","arrow-up-right-from-square","arrow-up-short-wide","arrow-up-small-big","arrow-up-square-triangle","arrow-up-to-arc","arrow-up-to-dotted-line","arrow-up-to-line","arrow-up-triangle-square","arrow-up-wide-short","arrow-up-z-a","arrows-cross","arrows-down-to-line","arrows-down-to-people","arrows-from-dotted-line","arrows-from-line","arrows-left-right","arrows-left-right-to-line","arrows-maximize","arrows-minimize","arrows-repeat","arrows-repeat-1","arrows-retweet","arrows-rotate","arrows-rotate-reverse","arrows-spin","arrows-split-up-and-left","arrows-to-circle","arrows-to-dot","arrows-to-dotted-line","arrows-to-eye","arrows-to-line","arrows-turn-right","arrows-turn-to-dots","arrows-up-down","arrows-up-down-left-right","arrows-up-to-line","asterisk","at","atom","atom-simple","audio-description","audio-description-slash","austral-sign","avocado","award","award-simple","axe","axe-battle","b","baby","baby-carriage","backpack","backward","backward-fast","backward-step","bacon","bacteria","bacterium","badge","badge-check","badge-dollar","badge-percent","badge-sheriff","badger-honey","badminton","bag-seedling","bag-shopping","bag-shopping-minus","bag-shopping-plus","bagel","bags-shopping","baguette","bahai","baht-sign","ball-pile","balloon","balloons","ballot","ballot-check","ban","ban-bug","ban-parking","ban-smoking","banana","bandage","bangladeshi-taka-sign","banjo","barcode","barcode-read","barcode-scan","bars","bars-filter","bars-progress","bars-sort","bars-staggered","baseball","baseball-bat-ball","basket-shopping","basket-shopping-minus","basket-shopping-plus","basket-shopping-simple","basketball","basketball-hoop","bat","bath","battery-bolt","battery-empty","battery-exclamation","battery-full","battery-half","battery-low","battery-quarter","battery-slash","battery-three-quarters","bed","bed-bunk","bed-empty","bed-front","bed-pulse","bee","beer-mug","beer-mug-empty","bell","bell-concierge","bell-exclamation","bell-on","bell-plus","bell-ring","bell-school","bell-school-slash","bell-slash","bells","bench-tree","bezier-curve","bicycle","billboard","bin-bottles","bin-bottles-recycle","bin-recycle","binary","binary-circle-check","binary-lock","binary-slash","binoculars","biohazard","bird","bitcoin-sign","blanket","blanket-fire","blender","blender-phone","blinds","blinds-open","blinds-raised","block","block-brick","block-brick-fire","block-question","block-quote","blog","blueberries","bold","bolt","bolt-auto","bolt-lightning","bolt-slash","bomb","bone","bone-break","bong","book","book-arrow-right","book-arrow-up","book-atlas","book-bible","book-blank","book-bookmark","book-circle-arrow-right","book-circle-arrow-up","book-copy","book-font","book-heart","book-journal-whills","book-medical","book-open","book-open-cover","book-open-reader","book-quran","book-section","book-skull","book-sparkles","book-tanakh","book-user","bookmark","bookmark-slash","books","books-medical","boombox","boot","boot-heeled","booth-curtain","border-all","border-bottom","border-bottom-right","border-center-h","border-center-v","border-inner","border-left","border-none","border-outer","border-right","border-top","border-top-left","bore-hole","bottle-droplet","bottle-water","bow-arrow","bowl-chopsticks","bowl-chopsticks-noodles","bowl-food","bowl-hot","bowl-rice","bowl-scoop","bowl-scoops","bowl-soft-serve","bowl-spoon","bowling-ball","bowling-ball-pin","bowling-pins","box","box-archive","box-ballot","box-check","box-circle-check","box-dollar","box-heart","box-open","box-open-full","box-taped","box-tissue","boxes-packing","boxes-stacked","boxing-glove","bracket-curly","bracket-curly-right","bracket-round","bracket-round-right","bracket-square","bracket-square-right","brackets-curly","brackets-round","brackets-square","braille","brain","brain-arrow-curved-right","brain-circuit","brake-warning","brazilian-real-sign","bread-loaf","bread-slice","bread-slice-butter","bridge","bridge-circle-check","bridge-circle-exclamation","bridge-circle-xmark","bridge-lock","bridge-suspension","bridge-water","briefcase","briefcase-arrow-right","briefcase-blank","briefcase-medical","brightness","brightness-low","bring-forward","bring-front","broccoli","broom","broom-ball","broom-wide","browser","browsers","brush","bucket","bug","bug-slash","bugs","building","building-circle-arrow-right","building-circle-check","building-circle-exclamation","building-circle-xmark","building-columns","building-flag","building-lock","building-magnifying-glass","building-memo","building-ngo","building-shield","building-un","building-user","building-wheat","buildings","bulldozer","bullhorn","bullseye","bullseye-arrow","bullseye-pointer","buoy","buoy-mooring","burger","burger-cheese","burger-fries","burger-glass","burger-lettuce","burger-soda","burrito","burst","bus","bus-school","bus-simple","business-time","butter","c","cabin","cabinet-filing","cable-car","cactus","cake-candles","cake-slice","calculator","calculator-simple","calendar","calendar-arrow-down","calendar-arrow-up","calendar-check","calendar-circle-exclamation","calendar-circle-minus","calendar-circle-plus","calendar-circle-user","calendar-clock","calendar-day","calendar-days","calendar-exclamation","calendar-heart","calendar-image","calendar-lines","calendar-lines-pen","calendar-minus","calendar-pen","calendar-plus","calendar-range","calendar-star","calendar-users","calendar-week","calendar-xmark","calendars","camcorder","camera","camera-cctv","camera-movie","camera-polaroid","camera-retro","camera-rotate","camera-security","camera-slash","camera-viewfinder","camera-web","camera-web-slash","campfire","campground","can-food","candle-holder","candy","candy-bar","candy-cane","candy-corn","cannabis","cannon","capsules","car","car-battery","car-bolt","car-building","car-bump","car-burst","car-bus","car-circle-bolt","car-garage","car-mirrors","car-on","car-rear","car-side","car-side-bolt","car-tilt","car-tunnel","car-wash","car-wrench","caravan","caravan-simple","card-club","card-diamond","card-heart","card-spade","cards","cards-blank","caret-down","caret-left","caret-right","caret-up","carrot","cars","cart-arrow-down","cart-arrow-up","cart-circle-arrow-down","cart-circle-arrow-up","cart-circle-check","cart-circle-exclamation","cart-circle-plus","cart-circle-xmark","cart-flatbed","cart-flatbed-boxes","cart-flatbed-empty","cart-flatbed-suitcase","cart
5042-minus","cart-plus","cart-shopping","cart-shopping-fast","cart-xmark","cash-register","cassette-betamax","cassette-tape","cassette-vhs","castle","cat","cat-space","cauldron","cedi-sign","cent-sign","certificate","chair","chair-office","chalkboard","chalkboard-user","champagne-glass","champagne-glasses","charging-station","chart-area","chart-bar","chart-bullet","chart-candlestick","chart-column","chart-gantt","chart-kanban","chart-line","chart-line-down","chart-line-up","chart-line-up-down","chart-mixed","chart-mixed-up-circle-currency","chart-mixed-up-circle-dollar","chart-network","chart-pie","chart-pie-simple","chart-pie-simple-circle-currency","chart-pie-simple-circle-dollar","chart-pyramid","chart-radar","chart-scatter","chart-scatter-3d","chart-scatter-bubble","chart-simple","chart-simple-horizontal","chart-tree-map","chart-user","chart-waterfall","check","check-double","check-to-slot","cheese","cheese-swiss","cherries","chess","chess-bishop","chess-bishop-piece","chess-board","chess-clock","chess-clock-flip","chess-king","chess-king-piece","chess-knight","chess-knight-piece","chess-pawn","chess-pawn-piece","chess-queen","chess-queen-piece","chess-rook","chess-rook-piece","chestnut","chevron-down","chevron-left","chevron-right","chevron-up","chevrons-down","chevrons-left","chevrons-right","chevrons-up","chf-sign","child","child-combatant","child-dress","child-reaching","children","chimney","chopsticks","church","circle","circle-0","circle-1","circle-2","circle-3","circle-4","circle-5","circle-6","circle-7","circle-8","circle-9","circle-a","circle-ampersand","circle-arrow-down","circle-arrow-down-left","circle-arrow-down-right","circle-arrow-left","circle-arrow-right","circle-arrow-up","circle-arrow-up-left","circle-arrow-up-right","circle-b","circle-bolt","circle-book-open","circle-bookmark","circle-c","circle-calendar","circle-camera","circle-caret-down","circle-caret-left","circle-caret-right","circle-caret-up","circle-check","circle-chevron-down","circle-chevron-left","circle-chevron-right","circle-chevron-up","circle-d","circle-dashed","circle-divide","circle-dollar","circle-dollar-to-slot","circle-dot","circle-down","circle-down-left","circle-down-right","circle-e","circle-ellipsis","circle-ellipsis-vertical","circle-envelope","circle-euro","circle-exclamation","circle-exclamation-check","circle-f","circle-g","circle-h","circle-half","circle-half-stroke","circle-heart","circle-i","circle-info","circle-j","circle-k","circle-l","circle-left","circle-location-arrow","circle-m","circle-microphone","circle-microphone-lines","circle-minus","circle-n","circle-nodes","circle-notch","circle-o","circle-p","circle-parking","circle-pause","circle-phone","circle-phone-flip","circle-phone-hangup","circle-play","circle-plus","circle-q","circle-quarter","circle-quarter-stroke","circle-quarters","circle-question","circle-r","circle-radiation","circle-right","circle-s","circle-small","circle-sort","circle-sort-down","circle-sort-up","circle-star","circle-sterling","circle-stop","circle-t","circle-three-quarters","circle-three-quarters-stroke","circle-trash","circle-u","circle-up","circle-up-left","circle-up-right","circle-user","circle-v","circle-video","circle-w","circle-waveform-lines","circle-x","circle-xmark","circle-y","circle-yen","circle-z","circles-overlap","citrus","citrus-slice","city","clapperboard","clapperboard-play","clarinet","claw-marks","clipboard","clipboard-check","clipboard-list","clipboard-list-check","clipboard-medical","clipboard-prescription","clipboard-question","clipboard-user","clock","clock-desk","clock-eight","clock-eight-thirty","clock-eleven","clock-eleven-thirty","clock-five","clock-five-thirty","clock-four-thirty","clock-nine","clock-nine-thirty","clock-one","clock-one-thirty","clock-rotate-left","clock-seven","clock-seven-thirty","clock-six","clock-six-thirty","clock-ten","clock-ten-thirty","clock-three","clock-three-thirty","clock-twelve","clock-twelve-thirty","clock-two","clock-two-thirty","clone","closed-captioning","closed-captioning-slash","clothes-hanger","cloud","cloud-arrow-down","cloud-arrow-up","cloud-binary","cloud-bolt","cloud-bolt-moon","cloud-bolt-sun","cloud-check","cloud-drizzle","cloud-exclamation","cloud-fog","cloud-hail","cloud-hail-mixed","cloud-meatball","cloud-minus","cloud-moon","cloud-moon-rain","cloud-music","cloud-plus","cloud-question","cloud-rain","cloud-rainbow","cloud-showers","cloud-showers-heavy","cloud-showers-water","cloud-slash","cloud-sleet","cloud-snow","cloud-sun","cloud-sun-rain","cloud-word","cloud-xmark","clouds","clouds-moon","clouds-sun","clover","club","coconut","code","code-branch","code-commit","code-compare","code-fork","code-merge","code-pull-request","code-pull-request-closed","code-pull-request-draft","code-simple","coffee-bean","coffee-beans","coffee-pot","coffin","coffin-cross","coin","coin-blank","coin-front","coin-vertical","coins","colon","colon-sign","columns-3","comet","comma","command","comment","comment-arrow-down","comment-arrow-up","comment-arrow-up-right","comment-captions","comment-check","comment-code","comment-dollar","comment-dots","comment-exclamation","comment-heart","comment-image","comment-lines","comment-medical","comment-mid
5042dle","comment-middle-top","comment-minus","comment-music","comment-pen","comment-plus","comment-question","comment-quote","comment-slash","comment-smile","comment-sms","comment-text","comment-xmark","comments","comments-dollar","comments-question","comments-question-check","compact-disc","compass","compass-drafting","compass-slash","compress","compress-wide","computer","computer-classic","computer-mouse","computer-mouse-scrollwheel","computer-speaker","container-storage","conveyor-belt","conveyor-belt-arm","conveyor-belt-boxes","conveyor-belt-empty","cookie","cookie-bite","copy","copyright","corn","corner","couch","court-sport","cow","cowbell","cowbell-circle-plus","crab","crate-apple","crate-empty","credit-card","credit-card-blank","credit-card-front","cricket-bat-ball","croissant","crop","crop-simple","cross","crosshairs","crosshairs-simple","crow","crown","crutch","crutches","cruzeiro-sign","crystal-ball","cube","cubes","cubes-stacked","cucumber","cup-straw","cup-straw-swoosh","cup-togo","cupcake","curling-stone","custard","d","dagger","dash","database","deer","deer-rudolph","delete-left","delete-right","democrat","desktop","desktop-arrow-down","dharmachakra","diagram-cells","diagram-lean-canvas","diagram-nested","diagram-next","diagram-predecessor","diagram-previous","diagram-project","diagram-sankey","diagram-subtask","diagram-successor","diagram-venn","dial","dial-high","dial-low","dial-max","dial-med","dial-med-low","dial-min","dial-off","diamond","diamond-exclamation","diamond-half","diamond-half-stroke","diamond-turn-right","dice","dice-d10","dice-d12","dice-d20","dice-d4","dice-d6","dice-d8","dice-five","dice-four","dice-one","dice-six","dice-three","dice-two","dinosaur","diploma","disc-drive","disease","display","display-arrow-down","display-chart-up","display-chart-up-circle-currency","display-chart-up-circle-dollar","display-code","display-medical","display-slash","distribute-spacing-horizontal","distribute-spacing-vertical","ditto","divide","dna","do-not-enter","dog","dog-leashed","dollar-sign","dolly","dolly-empty","dolphin","dong-sign","donut","door-closed","door-open","dove","down","down-from-dotted-line","down-from-line","down-left","down-left-and-up-right-to-center","down-long","down-right","down-to-bracket","down-to-dotted-line","down-to-line","download","dragon","draw-circle","draw-polygon","draw-square","dreidel","drone","drone-front","droplet","droplet-degree","droplet-percent","droplet-slash","drum","drum-steelpan","drumstick","drumstick-bite","dryer","dryer-heat","duck","dumbbell","dumpster","dumpster-fire","dungeon","e","ear","ear-deaf","ear-listen","ear-muffs","earth-africa","earth-americas","earth-asia","earth-europe","earth-oceania","eclipse","egg","egg-fried","eggplant","eject","elephant","elevator","ellipsis","ellipsis-stroke","ellipsis-stroke-vertical","ellipsis-vertical","empty-set","engine","engine-warning","envelope","envelope-circle-check","envelope-dot","envelope-open","envelope-open-dollar","envelope-open-text","envelopes","envelopes-bulk","equals","eraser","escalator","ethernet","euro-sign","excavator","exclamation","expand","expand-wide","explosion","eye","eye-dropper","eye-dropper-full","eye-dropper-half","eye-evil","eye-low-vision","eye-slash","eyes","f","face-angry","face-angry-horns","face-anguished","face-anxious-sweat","face-astonished","face-awesome","face-beam-hand-over-mouth","face-clouds","face-confounded","face-confused","face-cowboy-hat","face-diagonal-mouth","face-disappointed","face-disguise","face-dizzy","face-dotted","face-downcast-sweat","face-drooling","face-exhaling","face-explode","face-expressionless","face-eyes-xmarks","face-fearful","face-flushed","face-frown","face-frown-open","face-frown-slight","face-glasses","face-grimace","face-grin","face-grin-beam","face-grin-beam-sweat","face-grin-hearts","face-grin-squint","face-grin-squint-tears","face-grin-stars","face-grin-tears","face-grin-tongue","face-grin-tongue-squint","face-grin-tongue-wink","face-grin-wide","face-grin-wink","face-hand-over-mouth","face-hand-peeking","face-hand-yawn","face-head-bandage","face-holding-back-tears","face-hushed","face-icicles","face-kiss","face-kiss-beam","face-kiss-closed-eyes","face-kiss-wink-heart","face-laugh","face-laugh-beam","face-laugh-squint","face-laugh-wink","face-lying","face-mask","face-meh","face-meh-blank","face-melting","face-monocle","face-nauseated","face-nose-steam","face-party","face-pensive","face-persevering","face-pleading","face-pouting","face-raised-eyebrow","face-relieved","face-rolling-eyes","face-sad-cry","face-sad-sweat","face-sad-tear","face-saluting","face-scream","face-shush","face-sleeping","face-sleepy","face-smile","face-smile-beam","face-smile-halo","face-smile-hearts","face-smile-horns","face-smile-plus","face-smile-relaxed","face-smile-tear","face-smile-tongue","face-smile-upside-down","face-smile-wink","face-smiling-hands","face-smirking","face-spiral-eyes","face-sunglasses","face-surprise","face-swear","face-thermometer","face-thinking","face-tired","face-tissue","face-tongue-money","face-tongue-sweat","face-unamused","face-viewfinder","face-vomit","face-weary","face-woozy","face-worried","face-zany","face-zipper","falafel","family","family-dress","family-pants","fan","fan-table","farm","faucet","faucet-drip","fax","feather","feather-pointed","fence","ferris-wheel","ferry","field-hockey-stick-ball","file","file-arrow-down","file-arrow-up","file-audio","file-binary","file-certificate","file-chart-column","file-chart-pie","file-check","file-circle-check","file-circle-exclamation","file-circle-info","file-circle-minus","file-circle-plus","file-circle-question","file-circle-xmark","file-code","file-contract","file-csv","file-dashed-line","file-doc","file-eps","file-excel","file-exclamation","file-ex
5042port","file-gif","file-heart","file-image","file-import","file-invoice","file-invoice-dollar","file-jpg","file-lines","file-lock","file-magnifying-glass","file-medical","file-minus","file-mov","file-mp3","file-mp4","file-music","file-pdf","file-pen","file-plus","file-plus-minus","file-png","file-powerpoint","file-ppt","file-prescription","file-shield","file-signature","file-slash","file-spreadsheet","file-svg","file-user","file-vector","file-video","file-waveform","file-word","file-xls","file-xmark","file-xml","file-zip","file-zipper","files","files-medical","fill","fill-drip","film","film-canister","film-simple","film-slash","films","filter","filter-circle-dollar","filter-circle-xmark","filter-list","filter-slash","filters","fingerprint","fire","fire-burner","fire-extinguisher","fire-flame","fire-flame-curved","fire-flame-simple","fire-hydrant","fire-smoke","fireplace","fish","fish-bones","fish-cooked","fish-fins","fishing-rod","flag","flag-checkered","flag-pennant","flag-swallowtail","flag-usa","flashlight","flask","flask-gear","flask-round-poison","flask-round-potion","flask-vial","flatbread","flatbread-stuffed","floppy-disk","floppy-disk-circle-arrow-right","floppy-disk-circle-xmark","floppy-disk-pen","floppy-disks","florin-sign","flower","flower-daffodil","flower-tulip","flute","flux-capacitor","flying-disc","folder","folder-arrow-down","folder-arrow-up","folder-bookmark","folder-check","folder-closed","folder-gear","folder-grid","folder-heart","folder-image","folder-magnifying-glass","folder-medical","folder-minus","folder-music","folder-open","folder-plus","folder-tree","folder-user","folder-xmark","folders","fondue-pot","font","font-case","football","football-helmet","fork","fork-knife","forklift","fort","forward","forward-fast","forward-step","frame","franc-sign","french-fries","frog","function","futbol","g","galaxy","gallery-thumbnails","game-board","game-board-simple","game-console-handheld","game-console-handheld-crank","gamepad","gamepad-modern","garage","garage-car","garage-open","garlic","gas-pump","gas-pump-slash","gauge","gauge-circle-bolt","gauge-circle-minus","gauge-circle-plus","gauge-high","gauge-low","gauge-max","gauge-min","gauge-simple","gauge-simple-high","gauge-simple-low","gauge-simple-max","gauge-simple-min","gavel","gear","gear-code","gear-complex","gear-complex-code","gears","gem","genderless","ghost","gif","gift","gift-card","gifts","gingerbread-man","glass","glass-citrus","glass-empty","glass-half","glass-water","glass-water-droplet","glasses","glasses-round","globe","globe-pointer","globe-snow","globe-stand","goal-net","golf-ball-tee","golf-club","golf-flag-hole","gopuram","graduation-cap","gramophone","grapes","grate","grate-droplet","greater-than","greater-than-equal","grid","grid-2","grid-2-plus","grid-4","grid-5","grid-dividers","grid-h
5042orizontal","grid-round","grid-round-2","grid-round-2-plus","grid-round-4","grid-round-5","grill","grill-fire","grill-hot","grip","grip-dots","grip-dots-vertical","grip-lines","grip-lines-vertical","grip-vertical","group-arrows-rotate","guarani-sign","guitar","guitar-electric","guitars","gun","gun-slash","gun-squirt","h","h1","h2","h3","h4","h5","h6","hammer","hammer-brush","hammer-crash","hammer-war","hamsa","hand","hand-back-fist","hand-back-point-down","hand-back-point-left","hand-back-point-ribbon","hand-back-point-right","hand-back-point-up","hand-dots","hand-fingers-crossed","hand-fist","hand-heart","hand-holding","hand-holding-box","hand-holding-circle-dollar","hand-holding-dollar","hand-holding-droplet","hand-holding-hand","hand-holding-heart","hand-holding-magic","hand-holding-medical","hand-holding-seedling","hand-holding-skull","hand-horns","hand-lizard","hand-love","hand-middle-finger","hand-peace","hand-point-down","hand-point-left","hand-point-ribbon","hand-point-right","hand-point-up","hand-pointer","hand-scissors","hand-sparkles","hand-spock","hand-wave","handcuffs","hands","hands-asl-interpreting","hands-bound","hands-bubbles","hands-clapping","hands-holding","hands-holding-child","hands-holding-circle","hands-holding-diamond","hands-holding-dollar","hands-holding-heart","hands-praying","handshake","handshake-angle","handshake-simple","handshake-simple-slash","handshake-slash","hanukiah","hard-drive","hashtag","hashtag-lock","hat-beach","hat-chef","hat-cowboy","hat-cowboy-side","hat-santa","hat-winter","hat-witch","hat-wizard","head-side","head-side-brain","head-side-cough","head-side-cough-slash","head-side-gear","head-side-goggles","head-side-headphones","head-side-heart","head-side-mask","head-side-medical","head-side-virus","heading","headphones","headphones-simple","headset","heart","heart-circle-bolt","heart-circle-check","heart-circle-exclamation","heart-circle-minus","heart-circle-plus","heart-circle-xmark","heart-crack","heart-half","heart-half-stroke","heart-pulse","heat","helicopter","helicopter-symbol","helmet-battle","helmet-safety","helmet-un","hexagon","hexagon-check","hexagon-divide","hexagon-exclamation","hexagon-image","hexagon-minus","hexagon-plus","hexagon-vertical-nft","hexagon-vertical-nft-slanted","hexagon-xmark","high-definition","highlighter","highlighter-line","hill-avalanche","hill-rockslide","hippo","hockey-mask","hockey-puck","hockey-stick-puck","hockey-sticks","holly-berry","honey-pot","hood-cloak","horizontal-rule","horse","horse-head","horse-saddle","hose","hose-reel","hospital","hospital-user","hospitals","hot-tub-person","hotdog","hotel","hourglass","hourglass-clock","hourglass-end","hourglass-half","hourglass-start","house","house-blank","house-building","house-chimney","house-chimney-blank","house-chimney-crack","house-chimney-heart","house-chimney-medical","house-chimney-user","house-chimney-window","house-circle-check","house-circle-exclamation","house-circle-xmark","house-crack","house-day","house-fire","house-flag","house-flood-water","house-flood-water-circle-arrow-right","house-heart","house-laptop","house-lock","house-medical","house-medical-circle-check","house-medical-circle-exclamation","house-medical-circle-xmark","house-medical-flag","house-night","house-person-leave","house-person-return","house-signal","house-tree","house-tsunami","house-turret","house-user","house-water","house-window","hryvnia-sign","hundred-points","hurricane","hyphen","i","i-cursor","ice-cream","ice-skate","icicles","icons","id-badge","id-card","id-card-cl
5042ip","igloo","image","image-landscape","image-polaroid","image-polaroid-user","image-portrait","image-slash","image-user","images","images-user","inbox","inbox-full","inbox-in","inbox-out","inboxes","indent","indian-rupee-sign","industry","industry-windows","infinity","info","inhaler","input-numeric","input-pipe","input-text","integral","interrobang","intersection","island-tropical","italic","j","jack-o-lantern","jar","jar-wheat","jedi","jet-fighter","jet-fighter-up","joint","joystick","jug","jug-bottle","jug-detergent","k","kaaba","kazoo","kerning","key","key-skeleton","key-skeleton-left-right","keyboard","keyboard-brightness","keyboard-brightness-low","keyboard-down","keyboard-left","keynote","khanda","kidneys","kip-sign","kit-medical","kitchen-set","kite","kiwi-bird","kiwi-fruit","knife","knife-kitchen","l","lacrosse-stick","lacrosse-stick-ball","lambda","lamp","lamp-desk","lamp-floor","lamp-street","land-mine-on","landmark","landmark-dome","landmark-flag","landmark-magnifying-glass","language","laptop","laptop-arrow-down","laptop-binary","laptop-code","laptop-file","laptop-medical","laptop-mobile","laptop-slash","lari-sign","lasso","lasso-sparkles","layer-group","layer-minus","layer-plus","leaf","leaf-heart","leaf-maple","leaf-oak","leafy-green","left","left-from-line","left-long","left-long-to-line","left-right","left-to-line","lemon","less-than","less-than-equal","life-ring","light-ceiling","light-emergency","light-emergency-on","light-switch","light-switch-off","light-switch-on","lightbulb","lightbulb-cfl","lightbulb-cfl-on","lightbulb-dollar","lightbulb-exclamation","lightbulb-exclamation-on","lightbulb-gear","lightbulb-on","lightbulb-slash","lighthouse","lights-holiday","line-columns","line-height","lines-leaning","link","link-horizontal","link-horizontal-slash","link-simple","link-simple-slash","link-slash","lips","lira-sign","list","list-check","list-dropdown","list-music","list-ol","list-radio","list-timeline","list-tree","list-ul","litecoin-sign","loader","lobster","location-arrow","location-arrow-up","location-check","location-crosshairs","location-crosshairs-slash","location-dot","location-dot-slash","location-exclamation","location-minus","location-pen","location-pin","location-pin-lock","location-pin-slash","location-plus","location-question","location-smile","location-xmark","lock","lock-a","lock-hashtag","lock-keyhole","lock-keyhole-open","lock-open","locust","lollipop","loveseat","luchador-mask","lungs","lungs-virus","m","mace","magnet","magnifying-glass","magnifying-glass-arrow-right","magnifying-glass-arrows-rotate","magnifying-glass-chart","magnifying-glass-dollar","magnifying-glass-location","magnifying-glass-minus","magnifying-glass-music","magnifying-glass-play","magnifying-glass-plus","magnifying-glass-waveform","mailbox","mailbox-flag-up","manat-sign","mandolin","mango","manhole","map","map-location","map-location-dot","map-pin","marker","mars","mars-and-venus","mars-and-venus-burst","mars-double","mars-stroke","mars-stroke-right","mars-stroke-up","martini-glass","martini-glass-citrus","martini-glass-empty","mask","mask-face","mask-snorkel","mask-ventilator","masks-theater","mattress-pillow","maximize","meat","medal","megaphone","melon","melon-slice","memo","memo-circle-check","memo-circle-info","memo-pad","memory","menorah","mercury","merge","message","message-arrow-down","message-arrow-up","message-arrow-up-right","message-bot","message-captions","message-check","message-code","message-dollar","message-dots","message-exclamation","message-heart","message-image","message-lines","message-medical","message-middle","message-middle-top","message-minus","message-music","message-pen","message-plus","message-question","message-quote","message-slash","message-smile","message-sms","message-text","message-xmark","messages","messages-dollar","messages-question","meteor","meter","meter-bolt","meter-droplet","meter-fire","microchip","microchip-ai","microphone","microphone-lines","microphone-lines-slash","microphone-slash","microphone-stand","microscope","microwave","mill-sign","minimize","minus","mistletoe","mitten","mobile","mobile-button","mobile-notch","mobile-retro","mobile-screen","mobile-screen-button","mobile-signal","mobile-signal-out","money-bill","money-bill-1","money-bill-1-wave","money-bill-simple","money-bill-simple-wave","money-bill-transfer","money-bill-trend-up","money-bill-wave","money-bill-wheat","money-bills","money-bills-simple","money-check","money-check-dollar","money-check-dollar-pen","money-check-pen","money-from-bracket","money-simple-from-bracket","monitor-waveform","monkey","monument","moon","moon-cloud","moon-over-sun","moon-stars","moped","mortar-pestle","mosque","mosquito","mosquito-net","motorcycle","mound","mountain","mountain-city","mountain-sun","mountains","mouse-field","mp3-player","mug","mug-hot","mug-marshmallows","mug-saucer","mug-tea","mug-tea-saucer","mushroom","music","music-magnifying-glass","music-note","music-note-slash","music-slas
5042h","mustache","n","naira-sign","narwhal","nesting-dolls","network-wired","neuter","newspaper","nfc","nfc-lock","nfc-magnifying-glass","nfc-pen","nfc-signal","nfc-slash","nfc-trash","nose","not-equal","notdef","note","note-medical","note-sticky","notebook","notes","notes-medical","o","object-exclude","object-group","object-intersect","object-subtract","object-ungroup","object-union","objects-align-bottom","objects-align-center-horizontal","objects-align-center-vertical","objects-align-left","objects-align-right","objects-align-top","objects-column","octagon","octagon-check","octagon-divide","octagon-exclamation","octagon-minus","octagon-plus","octagon-xmark","oil-can","oil-can-drip","oil-temperature","oil-well","olive","olive-branch","om","omega","onion","option","ornament","otter","outdent","outlet","oven","overline","p","page","page-caret-down","page-caret-up","pager","paint-roller","paintbrush","paintbrush-fine","paintbrush-pencil","palette","pallet","pallet-box","pallet-boxes","pan-food","pan-frying","pancakes","panel-ews","panel-fire","panorama","paper-plane","paper-plane-top","paperclip","paperclip-vertical","parachute-box","paragraph","paragraph-left","party-bell","party-horn","passport","paste","pause","paw","paw-claws","paw-simple","peace","peach","peanut","peanuts","peapod","pear","pedestal","pegasus","pen","pen-circle","pen-clip","pen-clip-slash","pen-fancy","pen-fancy-slash","pen-field","pen-line","pen-nib","pen-nib-slash","pen-paintbrush","pen-ruler","pen-slash","pen-swirl","pen-to-square","pencil","pencil-mechanical","pencil-slash","people","people-arrows","people-carry-box","people-dress","people-dress-simple","people-group","people-line","people-pants","people-pants-simple","people-pulling","people-robbery","people-roof","people-simple","pepper","pepper-hot","percent","period","person","person-arrow-down-to-line","person-arrow-up-from-line","person-biking","person-biking-mountain","person-booth","person-breastfeeding","person-burst","person-cane","person-carry-box","person-chalkboard","person-circle-check","person-circle-exclamation","person-circle-minus","person-circle-plus","person-circle-question","person-circle-xmark","person-digging","person-dolly","person-dolly-empty","person-dots-from-line","person-dress","person-dress-bur
5042st","person-dress-fairy","person-dress-simple","person-drowning","person-fairy","person-falling","person-falling-burst","person-from-portal","person-half-dress","person-harassing","person-hiking","person-military-pointing","person-military-rifle","person-military-to-person","person-pinball","person-praying","person-pregnant","person-rays","person-rifle","person-running","person-running-fast","person-seat","person-seat-reclined","person-shelter","person-sign","person-simple","person-skating","person-ski-jumping","person-ski-lift","person-skiing","person-skiing-nordic","person-sledding","person-snowboarding","person-snowmobiling","person-swimming","person-through-window","person-to-door","person-to-portal","person-walking","person-walking-arrow-loop-left","person-walking-arrow-right","person-walking-dashed-line-arrow-right","person-walking-luggage","person-walking-with-cane","peseta-sign","peso-sign","phone","phone-arrow-down-left","phone-arrow-right","phone-arrow-up-right","phone-flip","phone-hangup","phone-intercom","phone-missed","phone-office","phone-plus","phone-rotary","phone-slash","phone-volume","phone-xmark","photo-film","photo-film-music","pi","piano","piano-keyboard","pickaxe","pickleball","pie","pig","piggy-bank","pills","pinata","pinball","pineapple","pipe","pipe-circle-check","pipe-collar","pipe-section","pipe-smoking","pipe-valve","pizza","pizza-slice","place-of-worship","plane","plane-arrival","plane-circle-check","plane-circle-exclamation","plane-circle-xmark","plane-departure","plane-engines","plane-lock","plane-prop","plane-slash","plane-tail","plane-up","plane-up-slash","planet-moon","planet-ringed","plant-wilt","plate-utensils","plate-wheat","play","play-pause","plug","plug-circle-bolt","plug-circle-check","plug-circle-exclamation","plug-circle-minus","plug-circle-plus","plug-circle-xmark","plus","plus-large","plus-minus","podcast","podium","podium-star","police-box","poll-people","pompebled","poo","poo-storm","pool-8-ball","poop","popcorn","popsicle","pot-food","potato","power-off","prescription","prescription-bottle","prescription-bottle-medical","prescription-bottle-pill","presentation-screen","pretzel","print","print-magnifying-glass","print-slash","projector","pump","pump-medical","pump-soap","pumpkin","puzzle","puzzle-piece","puzzle-piece-simple","q","qrcode","question","quote-left","quote-right","quotes","r","rabbit","rabbit-running","raccoon","racquet","radar","radiation","radio","radio-tuner","rainbow","raindrops","ram","ramp-loading","ranking-star","raygun","receipt","record-vinyl","rectangle","rectangle-ad","rectangle-barcode","rectangle-code","rectangle-history","rectangle-history-circle-plus","rectangle-history-circle-user","rectangle-list","rectangle-pro","rectangle-terminal","rectangle-vertical","rectangle-vertical-history","rectangle-wide","rectangle-xmark","rectangles-mixed","recycle","reel","reflect-horizontal","reflect-vertical","refrigerator","registered","repeat","repeat-1","reply","reply-all","reply-clock","republican","restroom","restroom-simple","retweet","rhombus","ribbon","right","right-from-bracket","right-from-line","right-left","right-left-large","right-long","right-long-to-line","right-to-bracket","right-to-line","ring","ring-diamond","rings-wedding","road","road-barrier","road-bridge","road-circle-check","road-circle-exclamation","road-circle-xmark","road-lock","road-spikes","robot","robot-astromech","rocket","rocket-launch","roller-coaster","rotate","rotate-exclamation","rotate-left","rotate-reverse","rotate-right","route","route-highway","route-interstate","router","rss","ruble-sign","rug","rugby-ball","ruler","ruler-combined","ruler-horizontal","ruler-triangle","ruler-vertical","rupee-sign","rupiah-sign","rv","s","sack","sack-dollar","sack-xmark","sailboat","salad","salt-shaker","sandwich","satellite","satellite-dish","sausage","saxophone","saxophone-fire","scale-balanced","scale-unbalanced","scale-unbalanced-flip","scalpel","scalpel-line-dashed","scanner-gun","scanner-image","scanner-keyboard","scanner-touchscreen","scarecrow","scarf","school","school-circle-check","school-circle-exclamation","school-circle-xmark","school-flag","school-lock","scissors","screen-users","screencast","screwdriver","screwdriver-wrench","scribble","scroll","scroll-old","scroll-torah","scrubber","scythe","sd-card","sd-cards","seal","seal-exclamation","seal-question","seat-airline","section","seedling","semicolon","send-back","send-backward","sensor","sensor-cloud","sensor-fire","sensor-on","sensor-triangle-exclamation","server","shapes","share","share-all","share-from-square","share-nodes","sheep","sheet-plastic","shekel-sign","shelves","shelves-empty","shield","shield-cat","shield-check","shield-cross","shield-dog","shield-exclamation","shield-halved","shield-heart","shield-keyhole","shield-minus","shield-plus","shield-quartered","shield-slas
5042h","shield-virus","shield-xmark","ship","shirt","shirt-long-sleeve","shirt-running","shirt-tank-top","shish-kebab","shoe-prints","shop","shop-lock","shop-slash","shovel","shovel-snow","shower","shower-down","shredder","shrimp","shuffle","shutters","shuttle-space","shuttlecock","sickle","sidebar","sidebar-flip","sigma","sign-hanging","sign-post","sign-posts","sign-posts-wrench","signal","signal-bars","signal-bars-fair","signal-bars-good","signal-bars-slash","signal-bars-weak","signal-fair","signal-good","signal-slash","signal-stream","signal-stream-slash","signal-strong","signal-weak","signature","signature-lock","signature-slash","signs-post","sim-card","sim-cards","sink","siren","siren-on","sitemap","skeleton","skeleton-ribs","ski-boot","ski-boot-ski","skull","skull-cow","skull-crossbones","slash","slash-back","slash-forward","sleigh","slider","sliders","sliders-simple","sliders-up","slot-machine","smog","smoke","smoking","snake","snooze","snow-blowing","snowflake","snowflake-droplets","snowflakes","snowman","snowman-head","snowplow","soap","socks","soft-serve","solar-panel","solar-system","sort","sort-down","sort-up","spa","space-station-moon","space-station-moon-construction","spade","spaghetti-monster-flying","sparkle","sparkles","speaker","speakers","spell-check","spider","spider-black-widow","spider-web","spinner","spinner-scale","spinner-third","split","splotch","spoon","sportsball","spray-can","spray-can-sparkles","sprinkler","sprinkler-ceiling","square","square-0","square-1","square-2","square-3","square-4","square-5","square-6","square-7","square-8","square-9","square-a","square-a-lock","square-ampersand","square-arrow-down","square-arrow-down-left","square-arrow-down-right","square-arrow-left","square-arrow-right","square-arrow-up","square-arrow-up-left","square-arrow-up-right","square-b","square-bolt","square-c","square-caret-down","square-caret-left","square-caret-right","square-caret-up","square-check","square-chevron-down","square-chevron-left","square-chevron-right","square-chevron-up","square-code","square-d","square-dashed","square-dashed-circle-plus","square-divide","square-dollar","square-down","square-down-left","square-down-right","square-e","square-ellipsis","square-ellipsis-vertical","square-envelope","square-exclamation","square-f","square-fragile","square-full","square-g","square-h","square-heart","square-i","square-info","square-j","square-k","square-kanban","square-l","square-left","square-list","square-m","square-minus","square-n","square-nfi","square-o","square-p","square-parking","square-parking-slash","square-pen","square-person-confined","square-phone","square-phone-flip","square-phone-hangup","square-plus","square-poll-horizontal","square-poll-vertical","square-q","square-quarters","square-question","square-quote","square-r","square-right","square-ring","square-root","square-root-variable","square-rss","square-s","square-share-nodes","square-sliders","square-sliders-vertical","square-small","square-star","square-t","square-terminal","square-this-way-up","square-u","square-up","square-up-left","square-up-right","square-user","square-v","square-virus","square-w","square-x","square-xmark","square-y","square-z","squid","squirrel","staff","staff-snake","stairs","stamp","standard-definition","stapler","star","star-and-crescent","star-christmas","star-exclamation","star-half","star-half-stroke","star-of-david","star-of-life","star-sharp","star-sharp-half","star-sharp-half-stroke","star-shooting","starfighter","starfighter-twin-ion-engine","starfighter-twin-ion-engine-advanced","stars","starship","starship-freighter","steak","steering-wheel","sterling-sign","stethoscope","stocking","stomach","stop","stopwatch","stopwatch-20","store","store-lock","store-slash","strawberry","street-view","stretcher","strikethrough","stroopwafel","subscript","subtitles","subtitles-slash","suitcase","suitcase-medical","suitcase-rolling","sun","sun-bright","sun-cloud","sun-dust","sun-haze","sun-plant-wilt","sunglasses","sunrise","sunset","superscript","sushi","sushi-roll","swap","swap-arrows","swatchbook","sword","sword-laser","sword-laser-alt","swords","swords-laser","symbols","synagogue","syringe","t","t-rex","table","table-cells","table-cells-large","table-columns","table-layout","table-list","table-picnic","table-pivot","table-rows","table-tennis-paddle-ball","table-tree","tablet","tablet-button","tablet-rugged","tablet-screen","tablet-screen-button","tablets","tachograph-digital","taco","tag","tags","tally","tally-1","tally-2","tally-3","tally-4","tamale","tank-water","tape","tarp","tarp-droplet","taxi","taxi-bus","teddy-bear","teeth","teeth-open","telescope","temperature-arrow-down","temperature-arrow-up","temperature-empty","temperature-full","temperature-half","temperature-high","temperature-list","temperature-low","temperature-quarter","temperature-snow","temperature-sun","temperature-three-quarters","tenge-sign","tennis-ball","tent","tent-arrow-down-to-line","tent-arrow-left-right","tent-arrow-tur
5042n-left","tent-arrows-down","tent-double-peak","tents","terminal","text","text-height","text-size","text-slash","text-width","thermometer","theta","thought-bubble","thumbs-down","thumbs-up","thumbtack","tick","ticket","ticket-airline","ticket-perforated","ticket-simple","tickets","tickets-airline","tickets-perforated","tickets-simple","tilde","timeline","timeline-arrow","timer","tire","tire-flat","tire-pressure-warning","tire-rugged","toggle-large-off","toggle-large-on","toggle-off","toggle-on","toilet","toilet-paper","toilet-paper-blank","toilet-paper-blank-under","toilet-paper-check","toilet-paper-slash","toilet-paper-under","toilet-paper-under-slash","toilet-paper-xmark","toilet-portable","toilets-portable","tomato","tombstone","tombstone-blank","toolbox","tooth","toothbrush","torii-gate","tornado","tower-broadcast","tower-cell","tower-control","tower-observation","tractor","trademark","traffic-cone","traffic-light","traffic-light-go","traffic-light-slow","traffic-light-stop","trailer","train","train-subway","train-subway-tunnel","train-track","train-tram","train-tunnel","transformer-bolt","transgender","transporter","transporter-1","transporter-2","transporter-3","transporter-4","transporter-5","transporter-6","transporter-7","transporter-empty","trash","trash-arrow-up","trash-can","trash-can-arrow-up","trash-can-check","trash-can-clock","trash-can-list","trash-can-plus","trash-can-slash","trash-can-undo","trash-can-xmark","trash-check","trash-clock","trash-list","trash-plus","trash-slash","trash-undo","trash-xmark","treasure-chest","tree","tree-christmas","tree-city","tree-deciduous","tree-decorated","tree-large","tree-palm","trees","triangle","triangle-exclamation","triangle-instrument","triangle-person-digging","tricycle","tricycle-adult","trillium","trophy","trophy-star","trowel","trowel-bricks","truck","truck-arrow-right","truck-bolt","truck-clock","truck-container","truck-container-empty","truck-droplet","truck-fast","truck-field","truck-field-un","truck-fire","truck-flatbed","truck-front","truck-ladder","truck-medical","truck-monster","truck-moving","truck-pickup","truck-plane","truck-plow","truck-ramp","truck-ramp-box","truck-ramp-couch","truck-tow","truck-utensils","trumpet","tty","tty-answer","tugrik-sign","turkey","turkish-lira-sign","turn-down","turn-down-left","turn-down-right","turn-left","turn-left-down","turn-left-up","turn-right","turn-up","turntable","turtle","tv","tv-music","tv-retro","typewriter","u","ufo","ufo-beam","umbrella","umbrella-beach","umbrella-simple","underline","unicorn","uniform-martial-arts","union","universal-access","unlock","unlock-keyhole","up","up-down","up-down-left-right","up-from-bracket","up-from-dotted-line","up-from-line","up-left","up-long","up-right","up-right-and-down-left-from-center","up-right-from-square","up-to-dotted-line","up-to-line","upload","usb-drive","user","user-alien","user-astronaut","user-bounty-hunter","user-check","user-chef","user-clock","user-cowboy","user-crown","user-doctor","user-doctor-hair","user-doctor-hair-long","user-doctor-message","user-gear","user-graduate","user-group","user-group-crown","user-group-simple","user-hair","user-hair-buns","user-hair-long","user-hair-mullet","user-headset","user-helmet-safety","user-injured","user-large","user-large-slash","user-lock","user-magnifying-glass","user-minus","user-music","user-ninja","user-nurse","user-nurse-hair","user-nurse-hair-long","user-pen","user-pilot","user-pilot-tie","user-plus","user-police","user-police-tie","user-robot","user-robot-xmarks","user-secret","user-shakespeare","user-shield","user-slash","user-tag","user-tie","user-tie-hair","user-tie-hair-long","user-unlock","user-visor","user-vneck","user-vneck-hair","user-vneck-hair-long","user-xmark","users","users-between-lines","users-gear","users-line","users-medical","users-rays","users-rectangle","users-slash","users-viewfinder","utensils","utensils-slash","utility-pole","utility-pole-double","v","vacuum","vacuum-robot","value-absolute","van-shuttle","vault","vector-circle","vector-polygon","vector-square","vent-damper","venus","venus-double","venus-mars","vest","vest-patches","vial","vial-circle-check","vial-virus","vials","video","video-arrow-down-left","video-arrow-up-right","video-plus","video-slash","vihara","violin","virus","virus-covid","virus-covid-slash","virus-slash","viruses","voicemail","volcano","volleyball","volume","volume-high","volume-low","volume-off","volume-slash","volume-xmark","vr-cardboard","w","waffle","wagon-covered","walker","walkie-talkie","wallet","wand","wand-magic","wand-magic-sparkles","wand-sparkles","warehouse","warehouse-full","washing-machine","watch","watch-apple","watch-calculator","watch-fitness","wat
5042ch-smart","water","water-arrow-down","water-arrow-up","water-ladder","watermelon-slice","wave","wave-pulse","wave-sine","wave-square","wave-triangle","waveform","waveform-lines","waves-sine","webhook","weight-hanging","weight-scale","whale","wheat","wheat-awn","wheat-awn-circle-exclamation","wheat-awn-slash","wheat-slash","wheelchair","wheelchair-move","whiskey-glass","whiskey-glass-ice","whistle","wifi","wifi-exclamation","wifi-fair","wifi-slash","wifi-weak","wind","wind-turbine","wind-warning","window","window-flip","window-frame","window-frame-open","window-maximize","window-minimize","window-restore","windsock","wine-bottle","wine-glass","wine-glass-crack","wine-glass-empty","won-sign","worm","wreath","wreath-laurel","wrench","wrench-simple","x","x-ray","xmark","xmark-large","xmark-to-slot","xmarks-lines","y","yen-sign","yin-yang","z"],Xc=["aeropress","airplay-audio","alarm-minus","almost-equal-to","ant","aquarius","aries","arrow-archery","arrow-down-from-bracket","arrow-down-long-to-line","arrow-left-arrow-right","arrow-left-from-bracket","arrow-left-from-dotted-line","arrow-left-to-bracket","arrow-left-to-dotted-line","arrow-right-from-dotted-line","arrow-right-to-dotted-line","arrow-rotate-left-10","arrow-rotate-left-15","arrow-rotate-left-30","arrow-rotate-right-10","arrow-rotate-right-15","arrow-rotate-right-30","arrow-u-turn-down-left","arrow-u-turn-down-right","arrow-u-turn-left-down","arrow-u-turn-left-up","arrow-u-turn-right-down","arrow-u-turn-right-up","arrow-u-turn-up-left","arrow-u-turn-up-right","arrow-up-long-to-line","arrow-up-to-bracket","australian-dollar-sign","ball-yarn","bar-progress","bar-progress-empty","bar-progress-full","bar-progress-half","bar-progress-quarter","bar-progress-three-quarters","barn","baseball-bat","bicep","bin","book-open-lines","book-spine","bookmark-plus","bottle-baby","bow-archery","box-arrow-down","box-arrow-down-arrow-up","box-arrow-down-magnifying-glass","box-arrow-up","box-isometric","box-isometric-tape","box-magnifying-glass","bra","briefs","burst-new","bus-side","bus-stop","butterfly","caduceus","camera-circle-ellipsis","camera-clock","camera-shutter","cancer","canoe-person","capricorn","capsule","car-key","car-siren","car-siren-on","caret-large-down","caret-large-left","caret-large-right","caret-large-up","carpool","chart-diagram","chart-fft","chart-sine","chemex","chest-drawers","circle-austral","circle-australian-dollar","circle-baht","circle-bangladeshi-taka","circle-bitcoin","circle-brazilian-real","circle-cedi","circle-cent","circle-chf","circle-colon","circle-cruzeiro","circle-currency","circle-danish-krone","circle-dong","circle-equals","circle-eurozone","circle-florin","circle-franc","circle-gf","circle-guarani","circle-half-horizontal","circle-half-stroke-horizontal","circle-house","circle-hryvnia","circle-indian-rupee","circle-kip","circle-lari","circle-lira","circle-litecoin","circle-malaysian-ringgit","circle-manat","circle-mill","circle-moon","circle-naira","circle-norwegian-krone","circle-peruvian-soles","circle-peseta","circle-peso","circle-polish-zloty","circle-renminbi","circle-ruble","circle-rupee","circle-rupiah","circle-share-nodes","circle-shekel","circle-swedish-krona","circle-tenge","circle-tugrik","circle-turkish-lira","circle-user-circle-check","circle-user-circle-exclamation","circle-user-circle-minus","circle-user-circle-moon","circle-user-circle-plus","circle-user-circle-question","circle-user-circle-user","circle-user-circle-xmark","circle-user-clock","circle-wifi","circle-wifi-circle-wifi","circle-won","circleapore-dollar","circles-overlap-3","clipboard-clock","clipboard-exclamation","clone-plus","comment-dot","comment-nodes","comment-waveform","computer-mouse-button-left","computer-mouse-button-right","currency-sign","danish-krone-sign","desk","dialpad","diamonds-4","direction-left-right","direction-up-down","dot","down-from-bracket","down-long-to-line","down-up","dress","dresser","droplet-plus","ear-circle-checkmark","ear-triangle-exclamation","ear-waveform","envelope-circle-user","envelope-ribbon","eurozone-sign","eye-closed","face-shaking","face-shaking-horizontal","face-shaking-vertical","file-aiff","file-ban","file-brackets-curly","file-cad","file-css","file-fragment","file-half-dashed","file-html","file-icns","file-js","file-midi","file-odf","file-tex","file-wav","film-music","film-stack","folder-arrow-left","folder-arrow-right","foot-wing","garage-empty","gas-pump-left","gas-pump-right","gear-api","gear-complex-api","gemini","globe-wifi","globe-www","gpu","grid-2-minus","grid-round-2-minus","hand-holding-star","hand-shaka","head-side-circuit","head-side-speak","headphones-slash","heart-slash","hearts","hexagon-equals","hexagon-nodes","hexagon-nodes-bolt","hockey-stick","horseshoe","house-unlock","hydra","image-broken","image-circle-arrow-down","image-circle-check","image-circle-plus","image-circle-xmark","image-music","image-stack","input-password","jeans","jeans-straight","kayak","kettlebell","label","layer","left-from-bracket","left-from-dotted-line","left-to-bracket","left-to-dotted-line","leo","libra","lightbulb-message","link-broken","location-arrow-slash","lychee","mailbox-open-empty","mailbox-open-letter","malaysian-ringgit-sign","message-dot","message-waveform","microphone-circle-plus","microphone-circle-xmark","microphone-signal-meter","midi","mobile-arrow-down","mobile-rotate","mobile-rotate-reverse","mobile-slash","mobile-vibrate","mobile-vibrate-slash","moon-first-quarter","moon-full","moon-last-quarter","moon-new","moon-star","moon-waning-crescent","moon-waning-gibbous","moon-waxing-crescent","moon-waxing-gibbous","nas","non-binary","norwegian-krone-sign","notes-sticky","oar","oars","octagon-equals","octopus","open-captioning","opossum","owl","paintbrush-fine-slash","paintbrush-slash","panties","pants","pants-straight","pencil-line","pentagon","person-arms-raised","person-basketball","person-carry-empty","person-golfing","person-limbs-wide","person-meditating","person-seat-window","person-soccer","person-swimming-pool","person-swimming-water","person-water-arms-raised","person-waving","peruvian-soles-sign","phone-connection","phone-waveform","picture-in-picture","pisces","plane-flying","plane-landing-gear","play-flip","poker-chip","polish-zloty-sign","postage-stamp","pump-impeller","qrcode-read","rainbow-half","rectangle-4k","rectangle-api","rectangle-beta","rectangle-high-dynamic-range","rectangle-irc","rectangle-minus","rectangle-n-a","re
5042ctangle-new","rectangle-plus","rectangle-tall","rectangle-video-on-demand","reflect-both","remote","renminbi-sign","right-from-dotted-line","right-to-dotted-line","rocket-vertical","rows-3","sagittarius","school-unlock","scooter","scorpio","seat","seat-airline-window","seats","septagon","shield-user","ship-large","shirt-jersey","shoe","shop-24","shorts","shuttle-space-vertical","signapore-dollar-sign","single-quote-left","single-quote-right","slider-circle","sneaker","sneaker-running","snowmobile-blank","spine","spiral","square-austral","square-australian-dollar","square-baht","square-bangladeshi-taka","square-binary","square-bitcoin","square-brazilian-real","square-cedi","square-cent","square-chf","square-colon","square-cruzeiro","square-currency","square-danish-krone","square-dong","square-equals","square-euro","square-eurozone","square-florin","square-franc","square-guarani","square-half","square-half-horizontal","square-half-stroke","square-half-stroke-horizontal","square-hryvnia","square-indian-rupee","square-kip","square-lari","square-lira","square-litecoin","square-malaysian-ringgit","square-manat","square-microphone","square-mill","square-naira","square-norwegian-krone","square-peruvian-soles","square-peseta","square-peso","square-polish-zloty","square-renminbi","square-ruble","square-rupee","square-rupiah","square-shekel","square-sterling","square-swedish-krona","square-tenge","square-tugrik","square-turkish-lira","square-won","square-yen","squareapore-dollar","stadium","stair-car","stool","store-24","swedish-krona-sign","table-bar","table-cells-column-lock","table-cells-column-unlock","table-cells-columns","table-cells-header","table-cells-header-lock","table-cells-header-unlock","table-cells-lock","table-cells-merge","table-cells-row-lock","table-cells-row-unlock","table-cells-rows","table-cells-split","table-cells-unlock","table-columns-add-after","table-columns-add-before","table-columns-merge-next","table-columns-merge-previous","table-columns-remove-after","table-columns-remove-before","table-dining","table-rows-add-above","table-rows-add-below","table-rows-merge-next","table-rows-merge-previous","table-rows-remove-above","table-rows-remove-below","table-slash","tank-recovery","taurus","temperature-slash","tent-circus","thumbtack-angle","thumbtack-angle-slash","thumbtack-slash","tower-receive","train-stop","transducer","transmission","triple-chevrons-down","triple-chevrons-left","triple-chevrons-right","triple-chevrons-up","trombone","truck-suv","u-turn-down-left","u-turn-down-right","u-turn-left-down","u-turn-left-up","u-turn-right-down","u-turn-right-up","u-turn-up-left","u-turn-up-right","unicycle","up-long-to-line","up-to-bracket","user-beard","user-beard-bolt","user-chef-hair-long","user-circle-minus","user-circle-plus","user-dashed","user-doctor-hair-mullet","user-hat-tie","user-hat-tie-magnifying-glass","user-hoodie","user-key","user-message","user-microphone","user-pilot-hair-long","user-pilot-tie-hair-long","user-police-hair-long","user-police-tie-hair-long","user-question","user-sith","user-tie-hair-mullet","user-viewfinder","user-vneck-hair-mullet","utility-can","van","vial-vertical","video-down-to-line","video-question","virgo","wardrobe","water-temperature","wireless"],jl=(()=>{let r=class r{constructor(d){this.siteDataService=d,this.unsubscribe$=new He,this.v6Icons=Kc.map(Hl),this.v7NewIcons=Xc.map(Hl),this.searchTerm=""}ngOnInit(){this.siteDataService.hideSiteLoader()}get filteredV7Icons(){if(!this.searchTerm)return this.v7NewIcons;let d=this.searchTerm.toLowerCase();return this.v7NewIcons.filter(s=>s.name.includes(d))}ngOnDestroy(){this.unsubscribe$.next(),this.unsubscribe$.complete()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-font-test"]],standalone:!1,decls:57,vars:5,consts:[[1,"page"],["pageTitle","Font Awesome Regular \u2014 Icon Reference"],[1,"mb-5","card"],[1,"mb-1"],[1,"badge","badge-secondary","ml-2"],[1,"text-muted","mb-3"],[1,"row","no-gutters","flex-wrap"],[1,"card"],[1,"badge","badge-success","ml-2"],[1,"text-muted","mb-2"],[1,"mb-3",2,"max-width","400px"],[1,"fa-regular","fa-magnifying-glass"],["type","text","placeholder","Filter icons\u2026",1,"form-control",3,"ngModelChange","ngModel"],["type","button",1,"btn","btn-naked","btn-sm",3,"click","disabled"],[1,"fa-regular","fa-xmark"],[1,"col-6","col-sm-4","col-md-3","col-lg-2","p-2","d-flex","flex-column","align-items-center","text-center","border",3,"title"],[1,"mb-1",2,"font-size","1.5rem"],[1,"text-muted","text-smallest","word-break-all"],[1,"col-6","col-sm-4","col-md-3","col-lg-2","p-2","d-flex","flex-column","align-items-center","text-center","border","border-success",3,"title"]],template:function(s,o){s&1&&(n(0,"main",0),e(1,`
5043  `),c(2,"app-admin-header",1),e(3,`
5044
5045  `),e(4,`
5046  `),n(5,"section",2),e(6,`
5047    `),n(7,"h5",3),e(8,`Font Awesome 6.5.1 \u2014 Free Regular
5048      `),n(9,"span",4),e(10),t()(),e(11,`
5049      `),n(12,"p",5)(13,"code"),e(14,"fa-regular fa-name"),t()(),e(15,`
5050      `),n(16,"div",6),e(17,`
5051        `),S(18,jc,9,4,null,null,K),t(),e(20,`
5052    `),t(),e(21,`
5053
5054    `),e(22,`
5055    `),n(23,"section",7),e(24,`
5056      `),n(25,"h5",3),e(26,"New in Font Awesome 7 Pro \u2014 Classic Regular "),n(27,"span",8),e(28),t()(),e(29,`
5057      `),n(30,"p",9),e(31,"Classic (non-brand) icons not present in 6.5.
50571 free. Use "),n(32,"code"),e(33,"fa-regular fa-name"),t(),e(34,"."),t(),e(35,`
5058      `),n(36,"p-inputgroup",10),e(37,`
5059        `),n(38,"p-inputgroup-addon"),c(39,"i",11),t(),e(40,`
5060        `),n(41,"input",12),M("ngModelChange",function(h){return I(o.searchTerm,h)||(o.searchTerm=h),h}),t(),e(42,`
5061        `),n(43,"p-inputgroup-addon"),e(44,`
5062          `),n(45,"button",13),g("click",function(){return o.searchTerm=""}),c(46,"i",14),t(),e(47,`
5063        `),t(),e(48,`
5064      `),t(),e(49,`
5065        `),v(50,Gc,4,2),n(51,"div",6),e(52,`
5066          `),S(53,$c,9,4,null,null,K),t(),e(55,`
5067      `),t(),e(56,`
5068    `),t()),s&2&&(i(10),p(o.v6Icons.length),i(8),E(o.v6Icons),i(10),f("",o.v7NewIcons.length," new"),i(13),T("ngModel",o.searchTerm),i(4),m("disabled",!o.searchTerm),i(5),y(o.searchTerm?50:-1),i(3),E(o.filteredV7Icons))},dependencies:[be,U,H,gn,at,rt],encapsulation:2});let a=r;return a})();function Qc(a,r){a&1&&(e(0,`
5069      `),n(1,"div",10),e(2,`
5070        `),n(3,"div",11),e(4,`
5071          `),n(5,"div",12),e(6,"option 1: force our card style"),t(),e(7,`
5072        `),t(),e(8,`
5073        `),n(9,"div",11),e(10,`
5074          `),n(11,"div",12),e(12,"option 1: force our card style"),t(),e(13,`
5075        `),t(),e(14,`
5076        `),n(15,"div",11),e(16,`
5077          `),n(17,"div",12),e(18,"option 1: force our card style"),t(),e(19,`
5078        `),t(),e(20,`
5079      `),t(),e(21,`
5080    `))}function Jc(a,r){a&1&&(e(0,`
5081      `),n(1,"div",13),e(2,`
5082        `),n(3,"div",11)(4,"div",14),e(5,"option 2: forced bg's"),t()(),e(6,`
5083        `),n(7,"div",11)(8,"div",14),e(9,"option 2: forced bg's"),t()(),e(10,`
5084        `),n(11,"div",11)(12,"div",14),e(13,"option 2: forced bg's"),t()(),e(14,`
5085      `),t(),e(15,`
5086    `))}function Zc(a,r){a&1&&(e(0,`
5087                `),n(1,"app-inline-alert",21),e(2,"Blend mode is the fun one."),t(),e(3,`
5088              `)),a&2&&(i(),m("isInline",!0))}function ep(a,r){if(a&1){let l=B();e(0,`
5089                      `),n(1,"div",22),e(2,`
5090                        `),n(3,"div",11),e(4,`
5091                          `),n(5,"div",12),e(6,`
5092                            `),n(7,"h5"),e(8,"Start"),t(),e(9,`
5093                            `),n(10,"div",24),e(11,`
5094                              `),n(12,"label",25),e(13,"Color"),t(),e(14,`
5095                              `),n(15,"p-colorPicker",26),M("ngModelChange",function(s){w(l);let o=u(3);return I(o.gradientStartColor,s)||(o.gradientStartColor=s),C(s)}),g("onChange",function(){w(l);let s=u(3);return C(s.updateCssVars())}),t(),e(16,`
5096                            `),t(),e(17,`
5097                            `),n(18,"div",27),e(19,`
5098                              `),n(20,"label"),e(21,"Opacity"),t(),e(22,`
5099                              `),n(23,"input",28),M("ngModelChange",function(s){w(l);let o=u(3);return I(o.gradientStartOpacity,s)||(o.gradientStartOpacity=s),C(s)}),g("input",function(){w(l);let s=u(3);return C(s.updateCssVars())}),t(),e(24,`
5100                            `),t(),e(25,`
5101                          `),t(),e(26,`
5102                        `),t(),e(27,`
5103                        `),n(28,"div",11),e(29,`
5104                          `),n(30,"div",12),e(31,`
5105                            `),n(32,"h5"),e(33,"End"),t(),e(34,`
5106                            `),n(35,"div",24),e(36,`
5107                              `),n(37,"label",25),e(38,"Color"),t(),e(39,`
5108                              `),n(40,"p-colorPicker",26),M("ngModelChange",function(s){w(l);let o=u(3);return I(o.gradientEndColor,s)||(o.gradientEndColor=s),C(s)}),g("onChange",function(){w(l);let s=u(3);return C(s.updateCssVars())}),t(),e(41,`
5109                            `),t(),e(42,`
5110                            `),n(43,"div",27),e(44,`
5111                              `),n(45,"label"),e(46,"Opacity"),t(),e(47,`
5112                              `),n(48,"input",28),M("ngModelChange",function(s){w(l);let o=u(3);return I(o.gradientEndOpacity,s)||(o.gradientEndOpacity=s),C(s)}),g("input",function(){w(l);let s=u(3);return C(s.updateCssVars())}),t(),e(49,`
5113                            `),t(),e(50,`
5114                          `),t(),e(51,`
5115                        `),t(),e(52,`
5116                      `),t(),e(53,`
5117                    `)}if(a&2){let l=u(3);i(15),T("ngModel",l.gradientStartColor),i(8),T("ngModel",l.gradientStartOpacity),m("min",0)("max",1)("step",.01),i(17),T("ngModel",l.gradientEndColor),i(8),T("ngModel",l.gradientEndOpacity),m("min",0)("max",1)("step",.01)}}function tp(a,r){if(a&1){let l=B();e(0,`
5118                `),n(1,"h5"),e(2,"Blend Mode"),t(),e(3,`
5119                `),n(4,"div",17),e(5,`
5120                  `),n(6,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("multiply"))}),e(7,"multiply"),t(),e(8,`
5121                  `),n(9,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("screen"))}),e(10,"screen"),t(),e(11,`
5122                  `),n(12,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("overlay"))}),e(13,"overlay"),t(),e(14,`
5123                  `),n(15,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("darken"))}),e(16,"darken"),t(),e(17,`
5124                  `),n(18,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("lighten"))}),e(19,"lighten"),t(),e(20,`
5125                  `),n(21,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("color-burn"))}),e(22,"color-burn"),t(),e(23,`
5126                  `),n(24,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("color-dodge"))}),e(25,"color-dodge"),t(),e(26,`
5127                  `),n(27,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("soft-light"))}),e(28,"soft-light"),t(),e(29,`
5128                  `),n(30,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("hard-light"))}),e(31,"hard-light"),t(),e(32,`
5129                  `),n(33,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("luminosity"))}),e(34,"luminosity"),t(),e(35,`
5130                  `),n(36,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("hue"))}),e(37,"hue"),t(),e(38,`
5131                  `),n(39,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("saturation"))}),e(40,"saturation"),t(),e(41,`
5132                  `),n(42,"button",18),g("click",function(){w(l);let s=u(2);return C(s.setBlendMode("color"))}),e(43,"color"),t(),e(44,`
5133                `),t(),e(45,`
5134                `),n(46,"div",22),e(47,`
5135                  `),n(48,"div",23),e(49,`
5136                    `),n(50,"h5"),e(51,"Background Color"),t(),e(52,`
5137                    `),n(53,"div",24),e(54,`
5138                      `),n(55,"label",25),e(56,"Color"),t(),e(57,`
5139                      `),n(58,"p-colorPicker",26),M("ngModelChange",function(s){w(l);let o=u(2);return I(o.backgroundColor,s)||(o.backgroundColor=s),C(s)}),g("onChange",function(){w(l);let s=u(2);return C(s.updateCssVars())}),t(),e(59,`
5140                    `),t(),e(60,`
5141                    `),n(61,"div",27),e(62,`
5142                      `),n(63,"label"),e(64,"Opacity"),t(),e(65,`
5143                      `),n(66,"input",28),M("ngModelChange",function(s){w(l);let o=u(2);return I(o.backgroundOpacity,s)||(o.backgroundOpacity=s),C(s)}),g("input",function(){w(l);let s=u(2);return C(s.updateCssVars())}),t(),e(67,`
5144                    `),t(),e(68,`
5145                  `),t(),e(69,`
5146                  `),n(70,"div",11),e(71,`
5147                    `),n(72,"div",29),e(73,`
5148                      `),n(74,"h5",30),e(75,"Gradients"),t(),e(76,`
5149                      `),n(77,"p-checkbox",31),M("ngModelChange",function(s){w(l);let o=u(2);return I(o.useGradients,s)||(o.useGradients=s),C(s)}),g("onChange",function(){w(l);let s=u(2);return C(s.updateCssVars())}),t(),e(78,`
5150                    `),t(),e(79,`
5151                    `),v(80,ep,54,10),t(),e(81,`
5152                `),t(),e(82,`
5153              `)}if(a&2){let l=u(2);i(6),j("active",l.currentBlendMode==="multiply"),i(3),j("active",l.currentBlendMode==="screen"),i(3),j("active",l.currentBlendMode==="overlay"),i(3),j("active",l.currentBlendMode==="darken"),i(3),j("active",l.currentBlendMode==="lighten"),i(3),j("active",l.currentBlendMode==="color-burn"),i(3),j("active",l.currentBlendMode==="color-dodge"),i(3),j("active",l.currentBlendMode==="soft-light"),i(3),j("active",l.currentBlendMode==="hard-light"),i(3),j("active",l.currentBlendMode==="luminosity"),i(3),j("active",l.currentBlendMode==="hue"),i(3),j("active",l.currentBlendMode==="saturation"),i(3),j("active",l.currentBlendMode==="color"),i(16),T("ngModel",l.backgroundColor),i(8),T("ngModel",l.backgroundOpacity),m("min",0)("max",1)("step",.01),i(11),T("ngModel",l.useGradients),m("binary",!0),i(3),y(l.useGradients?80:-1)}}function np(a,r){if(a&1){let l=B();e(0,`
5154      `),n(1,"div"),e(2,`
5155        `),n(3,"section",15),e(4,`
5156          `),n(5,"h3"),e(6,"Background Effect"),t(),e(7,`
5157          `),n(8,"div",16),e(9,`
5158            `),n(10,"div",17),e(11,`
5159              `),n(12,"button",18),g("click",function(){w(l);let s=u();return C(s.addBgEffect("tint"))}),e(13,"Tint/Overlay"),t(),e(14,`
5160              `),n(15,"button",18),g("click",function(){w(l);let s=u();return C(s.addBgEffect("gradient-fade"))}),e(16,"Gradient Fade"),t(),e(17,`
5161              `),n(18,"button",18),g("click",function(){w(l);let s=u();return C(s.addBgEffect("vignette"))}),e(19,"Vignette"),t(),e(20,`
5162              `),n(21,"button",18),g("click",function(){w(l);let s=u();return C(s.addBgEffect("color-wash"))}),e(22,"Color Wash"),t(),e(23,`
5163              `),n(24,"button",18),g("click",function(){w(l);let s=u();return C(s.addBgEffect("duotone"))}),e(25,"Duotone"),t(),e(26,`
5164              `),n(27,"button",18),g("click",function(){w(l);let s=u();return C(s.addBgEffect("blend-mode"))}),c(28,"i",19),e(29,"Blend Mode"),t(),e(30,`
5165              `),t(),e(31,`
5166              `),v(32,Zc,4,1),v(33,tp,83,34),t(),e(34,`
5167          `),t(),e(35,`
5168          `),n(36,"div",20),e(37,`
5169            `),n(38,"div",11)(39,"div",14),e(40,"option 3: css filters"),t()(),e(41,`
5170            `),n(42,"div",11)(43,"div",14),e(44,"option 3: css filters"),t()(),e(45,`
5171            `),n(46,"div",11)(47,"div",14),e(48,"option 3: css filters"),t()(),e(49,`
5172          `),t(),e(50,`
5173        `),t(),e(51,`
5174      `)}if(a&2){let l=u();i(12),j("active",l.currentEffect==="tint"),i(3),j("active",l.currentEffect==="gradient-fade"),i(3),j("active",l.currentEffect==="vignette"),i(3),j("active",l.currentEffect==="color-wash"),i(3),j("active",l.currentEffect==="duotone"),i(3),j("active",l.isBlendMode()),i(5),y(l.isBlendMode()?-1:32),i(),y(l.isBlendMode()?33:-1)}}var Gl=(()=>
5174{let r=class r{constructor(d,s,o){this.el=d,this.authorizeService=s,this.siteDataService=o,this.currentEffect=null,this.currentBlendMode=null,this.backgroundColor={r:0,g:0,b:0},this.gradientStartColor={r:0,g:0,b:0},this.gradientEndColor={r:0,g:0,b:0},this.backgroundOpacity=.6,this.gradientStartOpacity=.8,this.gradientEndOpacity=.8,this.useGradients=!1,this.useWhiteText=!1}ngOnInit(){this.authorizeService.getUser().subscribe(d=>{d&&(this.user=d)}),this.siteDataService.hideSiteLoader(),this.updateCssVars()}showOption(d){this.activeOption=d}addBgEffect(d){this.currentEffect=d,this.currentBlendMode=null,this.updateCssVars()}setBlendMode(d){this.currentEffect="blend-mode",this.currentBlendMode=d,this.updateCssVars()}isBlendMode(){return this.currentEffect==="blend-mode"}updateCssVars(){this.useWhiteText?this.el.nativeElement.style.setProperty("--base-text","#ffffff"):this.el.nativeElement.style.removeProperty("--base-text"),this.el.nativeElement.style.setProperty("--background-blend-mode",this.currentBlendMode??"normal"),this.el.nativeElement.style.setProperty("--background-color",this.toRgba(this.backgroundColor,this.backgroundOpacity)),this.useGradients?(this.el.nativeElement.style.setProperty("--gradient-start",this.toRgba(this.gradientStartColor,this.gradientStartOpacity)),this.el.nativeElement.style.setProperty("--gradient-end",this.toRgba(this.gradientEndColor,this.gradientEndOpacity))):(this.el.nativeElement.style.setProperty("--gradient-start","transparent"),this.el.nativeElement.style.setProperty("--gradient-end","transparent"))}toRgba(d,s){return d?typeof d=="object"?`rgba(${d.r},${d.g},${d.b},${s})`:`rgba(${d.replace(/^rgb\(|\)$/g,"")},${s})`:`rgba(0,0,0,${s})`}};r.\u0275fac=function(s){return new(s||r)(A(Ce),A(Ia),A(R))},r.\u0275cmp=b({type:r,selectors:[["app-background-test"]],standalone:!1,decls:43,vars:14,consts:[[1,"page"],[1,"bg-test",3,"ngClass"],["header-description",""],[1,"tabs"],["role","tablist",1,"tab-nav","no-bullets","inline-list"],[1,"nav-item"],["role","tab",1,"nav-link",3,"click"],[1,"d-flex","align-items-center","mb-3"],["inputId","textColorToggle",3,"ngModelChange","onChange","ngModel","binary"],["for","textColorToggle",1,"mb-0","ml-2"],[1,"option-1","row"],[1,"col"],[1,"card"],[1,"option-2","row"],[1,"border-all","border-radius","p-3"],[1,"card","edit-card","mb-4"],[1,"card-body"],[1,"d-flex","flex-wrap","gap-2","mb-3"],[1,"btn","btn-sm","mr-2",3,"click"],[1,"fa-solid","fa-stars","mr-1"],[1,"option-3","row"],[3,"isInline"],[1,"row"],[1,"col-auto"],[1,"form-group","d-flex","align-items-center"],[1,"mr-3"],["format","rgb",1,"d-block",3,"ngModelChange","onChange","ngModel"],[1,"form-group"],["type","range",3,"ngModelChange","input","ngModel","min","max","step"],[1,"d-flex","align-items-center","mb-2"],[1,"mb-0","mr-2"],[3,"ngModelChange","onChange","ngModel","binary"]],template:function(s,o){s&1&&(n(0,"main",0),e(1,`
5175  `),n(2,"div",1),e(3,`
5176
5177    `),n(4,"div",2),e(5,`
5178      Test and preview UI components in isolation.
5179    `),t(),e(6,`
5180
5181    `),n(7,"div",3),e(8,`
5182      `),n(9,"ul",4),e(10,`
5183        `),n(11,"li",5),e(12,`
5184          `),n(13,"a",6),g("click",function(){return o.showOption(1)}),e(14,"Option 1: Card Style"),t(),e(15,`
5185        `),t(),e(16,`
5186        `),n(17,"li",5),e(18,`
5187          `),n(19,"a",6),g("click",function(){return o.showOption(2)}),e(20,"Option 2: Forced Backgrounds"),t(),e(21,`
5188        `),t(),e(22,`
5189        `),n(23,"li",5),e(24,`
5190          `),n(25,"a",6),g("click",function(){return o.showOption(3)}),e(26,"Option 3: CSS Filters"),t(),e(27,`
5191        `),t(),e(28,`
5192      `),t(),e(29,`
5193    `),t(),e(30,`
5194
5195    `),n(31,"div",7),e(32,`
5196      `),n(33,"p-checkbox",8),M("ngModelChange",function(h){return I(o.useWhiteText,h)||(o.useWhiteText=h),h}),g("onChange",function(){return o.updateCssVars()}),t(),e(34,`
5197      `),n(35,"label",9),e(36,"White text"),t(),e(37,`
5198    `),t(),e(38,`
5199
5200    `),v(39,Qc,22,0),v(40,Jc,16,0),v(41,np,52,14),t(),e(42,`
5201  `),t()),s&2&&(i(2),j("option-4",o.activeOption===4),m("ngClass",o.currentEffect?"effect-"+o.currentEffect:""),i(9),j("active",o.activeOption===1),i(6),j("active",o.activeOption===2),i(6),j("active",o.activeOption===3),i(10),T("ngModel",o.useWhiteText),m("binary",!0),i(6),y(o.activeOption===1?39:-1),i(),y(o.activeOption===2?40:-1),i(),y(o.activeOption===3?41:-1))},dependencies:[It,be,va,U,H,le,Oe,jt],styles:["[_nghost-%COMP%]{--background-color: #111111;--background-image: url(https://i.redd.it/thas7cq703b61.jpg);--gradient-start: transparent;--gradient-end: transparent;--background-blend-mode: normal}*[_ngcontent-%COMP%]:not(.btn), .nav-link[_ngcontent-%COMP%]:not(.btn){color:var(--base-text)!important}.card[_ngcontent-%COMP%]{--base-text: #000}.bg-test[_ngcontent-%COMP%]{background-color:var(--background-color);background-image:linear-gradient(var(--gradient-start),var(--gradient-end)),var(--background-image);background-size:cover;background-blend-mode:var(--background-blend-mode);position:relative}.bg-test.effect-gradient-fade[_ngcontent-%COMP%]{background-image:linear-gradient(to bottom,transparent 50%,var(--background-color) 100%),var(--background-image)}.bg-test.effect-vignette[_ngcontent-%COMP%]{background-image:radial-gradient(ellipse at center,transparent 40%,rgba(0,0,0,.8) 100%),var(--background-image)}.bg-test.effect-duotone[_ngcontent-%COMP%]{--background-blend-mode: multiply}.option-2[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]{background-color:#111;color:var(--base-text)}"]});let a=r;return a})();var $l=a=>({$implicit:a});function ip(a,r){a&1&&(O(0),e(1,`
5202      `),N())}function ap(a,r){if(a&1&&(e(0,`
5203      `),k(1,ip,2,0,"ng-container",4),e(2,`
5204    `)),a&2){let l=r.$implicit;u();let d=ue(29);i(),m("ngTemplateOutlet",d)("ngTemplateOutletContext",ie(2,$l,l))}}function rp(a,r){a&1&&(O(0),e(1,`
5205      `),N())}function op(a,r){if(a&1&&(e(0,`
5206      `),k(1,rp,2,0,"ng-container",4),e(2,`
5207    `)),a&2){let l=r.$implicit;u();let d=ue(29);i(),m("ngTemplateOutlet",d)("ngTemplateOutletContext",ie(2,$l,l))}}function lp(a,r){if(a&1&&(e(0,`
5208  `),n(1,"div",5),e(2,`
5209    `),n(3,"h3",6),e(4),t(),e(5,`
5210    `),n(6,"div",7),e(7,`
5211      `),c(8,"img",8),L(9,"safeUrl"),e(10,`
5212    `),t(),e(11,`
5213    `),e(12,`
5214  `),n(13,"div",9),e(14,`
5215    `),e(15,`
5216  `),e(16,`
5217
5218`),n(17,"div",10),e(18,`
5219  `),n(19,"div",11),e(20,"Size (KB)"),t(),e(21,`
5220  `),n(22,"div",12),e(23),t(),e(24,`
5221`),t(),e(25,`
5222`),n(26,"div",10),e(27,`
5223  `),n(28,"div",11),e(29,"Size (Bytes)"),t(),e(30,`
5224  `),n(31,"div",12),e(32),t(),e(33,`
5225`),t(),e(34,`
5226`),e(35,`
5227`),n(36,"div",13),e(37,`
5228  `),n(38,"div",11),e(39,"Dimensions"),t(),e(40,`
5229  `),n(41,"div",12),e(42),t(),e(43,`
5230`),t(),e(44,`
5231`),e(45,`
5232`),t(),e(46,`
5233`),t(),e(47,`
5234`)),a&2){let l=r.$implicit;i(4),p(l.documentType),i(4),m("src",ze(9,6,"./assets/img/image-test/"+l.fileName),kt),i(1
52345),p(l.fileSizeKb),i(9),p(l.fileSizeBytes),i(10),q("",l.imageSize.width," \xD7 ",l.imageSize.height)}}var Kl=(()=>{let r=class r{constructor(d){this.siteDataService=d,this.imageData=[{fileName:"VU-Banana-1000x1000.jpg",documentType:"JPEG",fileSizeKb:206,fileSizeBytes:206368,creationDate:"2025-05-15T21:02:00",modificationDate:"2025-05-15T21:02:00",imageSize:{width:1e3,height:1e3},imageDpi:72,colorModel:"RGB",colorProfile:"sRGB IEC61966-2.1"},{fileName:"VU-Banana-1000x1000.png",documentType:"PNG",fileSizeKb:187,fileSizeBytes:186687,creationDate:"2025-05-15T21:01:00",modificationDate:"2025-05-15T21:01:00",imageSize:{width:1e3,height:1e3},imageDpi:72,colorModel:"RGB",colorProfile:"Calibrated RGB Colorspace"},{fileName:"VU-Banana-1000x1000.gif",documentType:"GIF",fileSizeKb:75,fileSizeBytes:75189,creationDate:"2025-05-15T21:03:00",modificationDate:"2025-05-15T21:03:00",imageSize:{width:1e3,height:1e3},imageDpi:72,colorModel:"RGB",colorProfile:"sRGB IEC61966-2.1"},{fileName:"VU-Banana-1000x1000.webp",documentType:"WebP",fileSizeKb:55,fileSizeBytes:55176,creationDate:"2025-05-15T21:03:00",modificationDate:"2025-05-15T21:03:00",imageSize:{width:1e3,height:1e3},imageDpi:72,colorModel:"RGB",colorProfile:"sRGB IEC61966-2.1"}],this.imageDataResized=[{fileName:"VU-Banana-320x320.jpg",documentType:"JPEG ",fileSizeKb:38,fileSizeBytes:37973,creationDate:"2025-05-16T08:42:00",modificationDate:"2025-05-16T08:42:00",imageSize:{width:320,height:320},imageDpi:72,colorModel:"RGB",colorProfile:"sRGB IEC61966-2.1"},{fileName:"VU-Banana-320x320.png",documentType:"PNG ",fileSizeKb:32,fileSizeBytes:32140,creationDate:"2025-05-16T08:44:00",modificationDate:"2025-05-16T08:44:00",imageSize:{width:320,height:320},imageDpi:72,colorModel:"RGB",colorProfile:"sRGB IEC61966-2.1"},{fileName:"VU-Banana-320x320.gif",documentType:"GIF ",fileSizeKb:28,fileSizeBytes:27541,creationDate:"2025-05-16T08:44:00",modificationDate:"2025-05-16T08:44:00",imageSize:{width:320,height:320},imageDpi:72,colorModel:"RGB",colorProfile:"sRGB IEC61966-2.1"},{fileName:"VU-Banana-320x320.webp",documentType:"WebP ",fileSizeKb:19,fileSizeBytes:18824,creationDate:"2025-05-16T08:45:00",modificationDate:"2025-05-16T08:45:00",imageSize:{width:320,height:320},imageDpi:72,colorModel:"RGB",colorProfile:"sRGB IEC61966-2.1"}]}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-image-test"]],standalone:!1,decls:30,vars:0,consts:[["imageDisplay",""],[1,"row","mb-5"],[1,"text-smallest"],["href","https://upload.wikimedia.org/wikipedia/commons/4/47/VU-Banana-1000x1000.png"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"col-md-3"],[1,"text-center"],[1,"mb-2"],[3,"src"],[1,"border-all","bg-white","text-small"],[1,"replace","row","border-bottom","mx-0"],[1,"col-6","fw-700"],[1,"col-6"],[1,"replace","row","mx-0"]],template:function(s,o){s&1&&(n(0,"main"),e(1,`
5235  `),n(2,"h1"),e(3,"Image Test"),t(),e(4,`
5236
5237  `),n(5,"h2"),e(6,"Original Size"),t(),e(7,`
5238  `),n(8,"div",1),e(9,`
5239    `),S(10,ap,3,4,null,null,K),t(),e(12,`
5240
5241  `),n(13,"h2"),e(14,"Reduced Size"),t(),e(15,`
5242  `),n(16,"div",1),e(17,`
5243    `),S(18,op,3,4,null,null,K),t(),e(20,`
5244
5245  `),n(21,"div",2),e(22,`
5246    `),n(23,"a",3),e(24,"https://upload.wikimedia.org/wikipedia/commons/4/47/VU-Banana-1000x1000.png"),t(),e(25,`
5247  `),t(),e(26,`
5248`),t(),e(27,`
5249
5250`),k(28,lp,48,8,"ng-template",null,0,fe)),s&2&&(i(10),E(o.imageData),i(8),E(o.imageDataResized))},dependencies:[De,qa],encapsulation:2});let a=r;return a})();var dp=()=>["/styleguide"],Xl=()=>["/admin"];function mp(a,r){if(a&1&&(e(0,`
5251            `),c(1,"app-pill",122),e(2,`
5252        `)),a&2){let l=r.$implicit;i(),m("status",l)("text",l)}}var Yl=(()=>{let r=class r{onPillClick(d){this.lastAction=d}constructor(d){this.siteDataService=d,this.statuses=["default","primary","secondary","active","success","warning","error","info","disabled","black","color1"],this.eventStatuses=["event","event-practice","event-club","event-sign-up","event-game","event-other"],this.lastAction="none yet"}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-sg-pills"]],standalone:!1,decls:945,vars:57,consts:[[1,"text-small","text-grey"],["variant","tag","status","black","text","shared"],[3,"routerLink"],[1,"card"],[1,"table","table-bordered","table-hover"],["status","default"],["status","default","icon","fa-solid fa-check",3,"iconFirst"],["status","default","icon","fa-solid fa-check"],["status","default",3,"clickable"],["status","active"],["status","active","icon","fa-solid fa-circle-check",3,"iconFirst"],["status","active","icon","fa-solid fa-circle-check"],["status","active",3,"clickable"],["status","success"],["status","success","icon","fa-solid fa-check-circle",3,"iconFirst"],["status","success","icon","fa-solid fa-check-circle"],["status","success",3,"clickable"],["status","warning"],["status","warning","icon","fa-solid fa-exclamation-triangle",3,"iconFirst"],["status","warning","icon","fa-solid fa-exclamation-triangle"],["status","warning",3,"clickable"],["status","error"],["status","error","icon","fa-solid fa-exclamation-circle",3,"iconFirst"],["status","error","icon","fa-solid fa-exclamation-circle"],["status","error",3,"clickable"],["status","primary"],["status","primary","icon","fa-solid fa-star",3,"iconFirst"],["status","primary","icon","fa-solid fa-star"],["status","primary",3,"clickable"],["status","secondary"],["status","secondary","icon","fa-solid fa-info-circle",3,"iconFirst"],["status","secondary","icon","fa-solid fa-info-circle"],["status","secondary",3,"clickable"],["status","event"],["status","event","icon","fa-solid fa-calendar",3,"iconFirst"],["status","event","icon","fa-solid fa-calendar"],["status","event",3,"clickable"],["status","event-practice"],["status","event-practice","icon","fa-solid fa-whistle",3,"iconFirst"],["status","event-practice","icon","fa-solid fa-whistle"],["status","event-practice",3,"clickable"],["status","event-club"],["status","event-club","icon","fa-solid fa-pennant",3,"iconFirst"],["status","event-club","icon","fa-solid fa-pennant"],["status","event-club",3,"clickable"],["status","event-sign-up"],["status","event-sign-up","icon","fa-solid fa-clipboard-list",3,"iconFirst"],["status","event-sign-up","icon","fa-solid fa-clipboard-list"],["status","event-sign-up",3,"clickable"],["status","event-game"],["status","event-game","icon","fa-solid fa-futbol",3,"iconFirst"],["status","event-game","icon","fa-solid fa-futbol"],["status","event-game",3,"clickable"],["status","event-other"],["status","event-other","icon","fa-solid fa-ellipsis",3,"iconFirst"],["status","event-other","icon","fa-solid fa-ellipsis"],["status","event-other",3,"clickable"],["status","color1"],["status","color1","icon","fa-solid fa-palette",3,"iconFirst"],["status","color1","icon","fa-solid fa-palette"],["status","color1",3,"clickable"],["status","black"],["status","black","icon","fa-solid fa-circle",3,"iconFirst"],["status","black","icon","fa-solid fa-circle"],["status","black",3,"clickable"],[1,"table-info"],["colspan","5",1,"text-center"],["status","primary","tooltipText","This is a tooltip"],["status","success","icon","fa-solid fa-info-circle","tooltipText","Icon first with tooltip",3,"iconFirst"],["status","warning","icon","fa-solid fa-question-circle","tooltipText","More details here"],["status","active","tooltipText","Clickable with tooltip",3,"clickable"],["alertType","warning",3,"isInline"],["side","shared"],[1,"d-flex","flex-wrap","gap-3","align-items-center"],["styleClass","pill-green-700","text","pill-green-700"],["styleClass","pill-success-lt","text","pill-success-lt"],["styleClass","pill-stripe-test-mode","text","pill-stripe-test-mode"],["status","success","text","pill variant"],["status","success","text","tag variant","variant","tag"],["status","error","text","pill variant"],["status","error","text","tag variant","variant","tag"],["status","primary","text","Click me",3,"onClick","clickable"],["status","secondary","text","Back to the style guide",3,"clickable","routerLink"],["status","primary","text","Remove me","icon","fas fa-times","iconAriaLabel","Remove me",3,"onIconClick","iconClickable"],[1,"text-small","text-grey","mt-3"],[1,"row"],[1,"col-2"],["status","warning","text","Awaiting approval",3,"nowrap"],[1,"col-3"],["status","success","text","Full width",3,"fullWidth"],["text","Sample Tag"],["text","With Icon","icon","fa-solid fa-tag"],["text","Clickable",3,"clickable"],["colspan","3"],["text","Link Tag",3,"routerLink"],["text","Link + Icon","icon","fa-solid fa-link",3,"routerLink"],["text","app-tag"],["status","primary","text","app-pill tag variant","variant","tag"],[3,"pillCount"],["tooltipText","128 unread",3,"pillCount"],["status","active","text","Online"],["status","active","text","Active",3,"dots"],["status","active","text","Active","tooltipText","This item is currently active"],["status","success","text","Verified"],["status","success","text","Success",3,"dots"],["status","success","text","Success","tooltipText","Operation completed successfully"],["status","warning","text","Photo Flagged"],["status","warning","text","Warning",3,"dots"],["status","warning","text","Warning","tooltipText","This item requires attention"],["status","error","text","Failed"],["status","error","text","Error",3,"dots"],["status","error","text","Error","tooltipText","An error has occurred"],["status","note","text","Note"],["status","note","text","Info"],["status","note","text","Note",3,"dots"],["status","note","text","Note","tooltipText","Additional information available"],["status","default","text","Unknown"],["status","default","text","Default",3,"dots"],["status","default","text","Default","tooltipText","Status is unknown"],[1,"pill","pill-success"],[1,"pill","pill-error"],[1,"tab-pill"],[3,"status","text"]],template:function(s,o){s&1&&(n(0,"h2"),e(1,"Pills, Tags & Status Indicators"),t(),e(2,`
5253`),n(3,"p",0),e(4,`
5254    Everything here renders the app's own `),n(5,"code"),e(6,"app-pill"),t(),e(7,", "),n(8,"code"),e(9,"app-tag"),t(),e(10,`,
5255    `),n(11,"code"),e(12,"app-pill-counter"),t(),e(13," and "),n(14,"code"),e(15,"app-status-indicator"),t(),e(16,` against the real
5256    `),n(17,"code"),e(18,"3_modules/components/pill.scss"),t(),e(19,`. Nothing on this page carries harness-local
5257    styling \u2014 if a sample looks wrong, the component or the partial is wrong.
5258`),t(),e(20,`
5259`),n(21,"p",0),e(22,`
5260    Every sample here is marked `),c(23,"app-pill",1),e(24,` \u2014
5261    these render on the admin side and the member side both, and `),n(25,"code"),e(26,"pill.scss"),t(),e(27,` reads no
5262    theme tokens, so a club theme changes none of it. See
5263    `),n(28,"a",2),e(29,"admin vs member"),t(),e(30,`.
5264`),t(),e(31,`
5265
5266`),n(32,"div",3),e(33,`
5267    `),n(34,"h3"),e(35,"1. "),n(36,"code"),e(37,"app-pill"),t(),e(38," \u2014 status"),t(),e(39,`
5268    `),n(40,"p",0),e(41,`
5269        `),n(42,"code"),e(43,"status"),t(),e(44," maps straight to a "),n(45,"code"),e(46,".pill-<status>"),t(),e(47,` class. The matrix
5270        crosses every status with the icon and clickable options.
5271    `),t(),e(48,`
5272
5273    `),n(49,"table",4),e(50,`
5274        `),n(51,"thead"),e(52,`
5275            `),n(53,"tr"),e(54,`
5276                `),n(55,"th"),e(56,"Status Type"),t(),e(57,`
5277                `),n(58,"th"),e(59,"Text Only"),t(),e(60,`
5278                `),n(61,"th"),e(62,"With Icon (Left)"),t(),e(63,`
5279                `),n(64,"th"),e(65,"With Icon (Right)"),t(),e(66,`
5280                `),n(67,"th"),e(68,"Clickable"),t(),e(69,`
5281            `),t(),e(70,`
5282        `),t(),e(71,`
5283        `),n(72,"tbody"),e(73,`
5284            `),n(74,"tr"),e(75,`
5285                `),n(76,"td")(77,"code"),e(78,"default"),t()(),e(79,`
5286                `),n(80,"td")(81,"app-pill",5),e(82,"Default"),t()(),e(83,`
5287                `),n(84,"td")(85,"app-pill",6),e(86,"Default"),t()(),e(87,`
5288                `),n(88,"td")(89,"app-pill",7),e(90,"Default"),t()(),e(91,`
5289                `),n(92,"td")(93,"app-pill",8),e(94,"Clickable"),t()(),e(95,`
5290            `),t(),e(96,`
5291            `),n(97,"tr"),e(98,`
5292                `),n(99,"td")(100,"code"),e(101,"active"),t()(),e(102,`
5293                `),n(103,"td")(104,"app-pill",9),e(105,"Active"),t()(),e(106,`
5294                `),n(107,"td")(108,"app-pill",10),e(109,"Active"),t()(),e(110,`
5295                `),n(111,"td")(112,"app-pill",11),e(113,"Active"),t()(),e(114,`
5296                `),n(115,"td")(116,"app-pill",12),e(117,"Clickable"),t()(),e(118,`
5297            `),t(),e(119,`
5298            `),n(120,"tr"),e(121,`
5299                `),n(122,"td")(123,"code"),e(124,"success"),t()(),e(125,`
5300                `),n(126,"td")(127,"app-pill",13),e(128,"Success"),t()(),e(129,`
5301                `),n(130,"td")(131,"app-pill",14),e(132,"Success"),t()(),e(133,`
5302                `),n(134,"td")(135,"app-pill",15),e(136,"Success"),t()(),e(137,`
5303                `),n(138,"td")(139,"app-pill",16),e(140,"Clickable"),t()(),e(141,`
5304            `),t(),e(142,`
5305            `),n(143,"tr"),e(144,`
5306                `),n(145,"td")(146,"code"),e(147,"warning"),t()(),e(148,`
5307                `),n(149,"td")(150,"app-pill",17),e(151,"Warning"),t()(),e(152,`
5308                `),n(153,"td")(154,"app-pill",18),e(155,"Warning"),t()(),e(156,`
5309                `),n(157,"td")(158,"app-pill",19),e(159,"Warning"),t()(),e(160,`
5310                `),n(161,"td")(162,"app-pill",20),e(163,"Clickable"),t()(),e(164,`
5311            `),t(),e(165,`
5312            `),n(166,"tr"),e(167,`
5313                `),n(168,"td")(169,"code"),e(170,"error"),t()(),e(171,`
5314                `),n(172,"td")(173,"app-pill",21),e(174,"Error"),t()(),e(175,`
5315                `),n(176,"td")(177,"app-pill",22),e(178,"Error"),t()(),e(179,`
5316                `),n(180,"td")(181,"app-pill",23),e(182,"Error"),t()(),e(183,`
5317                `),n(184,"td")(185,"app-pill",24),e(186,"Clickable"),t()(),e(187,`
5318            `),t(),e(188,`
5319            `),n(189,"tr"),e(190,`
5320                `),n(191,"td")(192,"code"),e(193,"primary"),t()(),e(194,`
5321                `),n(195,"td")(196,"app-pill",25),e(197,"Primary"),t()(),e(198,`
5322                `),n(199,"td")(200,"app-pill",26),e(201,"Primary"),t()(),e(202,`
5323                `),n(203,"td")(204,"app-pill",27),e(205,"Primary"),t()(),e(206,`
5324                `),n(207,"td")(208,"app-pill",28),e(209,"Clickable"),t()(),e(210,`
5325            `),t(),e(211,`
5326            `),n(212,"tr"),e(213,`
5327                `),n(214,"td")(215,"code"),e(216,"secondary"),t()(),e(217,`
5328                `),n(218,"td")(219,"app-pill",29),e(220,"Secondary"),t()(),e(221,`
5329                `),n(222,"td")(223,"app-pill",30),e(224,"Secondary"),t()(),e(225,`
5330                `),n(226,"td")(227,"app-pill",31),e(228,"Secondary"),t(),e(229,`
5331                `),t(),e(230,`
5332                `),n(231,"td")(232,"app-pill",32),e(233,"Clickable"),t()(),e(234,`
5333            `),t(),e(235,`
5334            `),n(236,"tr"),e(237,`
5335                `),n(238,"td")(239,"code"),e(240,"event"),t()(),e(241,`
5336                `),n(242,"td")(243,"app-pill",33),e(244,"Event"),t()(),e(245,`
5337                `),n(246,"td")(247,"app-pill",34),e(248,"Event"),t()(),e(249,`
5338                `),n(250,"td")(251,"app-pill",35),e(252,"Event"),t()(),e(253,`
5339                `),n(254,"td")(255,"app-pill",36),e(256,"Clickable"),t()(),e(257,`
5340            `),t(),e(258,`
5341            `),n(259,"tr"),e(260,`
5342                `),n(261,"td")(262,"code"),e(263,"event-practice"),t()(),e(264,`
5343                `),n(265,"td")(266,"app-pill",37),e(267,"Practice"),t()(),e(268,`
5344                `),n(269,"td")(270,"app-pill",38),e(271,"Practice"),t()(),e(272,`
5345                `),n(273,"td")(274,"app-pill",39),e(275,"Practice"),t(),e(276,`
5346                `),t(),e(277,`
5347                `),n(278,"td")(279,"app-pill",40),e(280,"Clickable"),t()(),e(281,`
5348            `),t(),e(282,`
5349            `),n(283,"tr"),e(284,`
5350                `),n(285,"td")(286,"code"),e(287,"event-club"),t()(),e(288,`
5351                `),n(289,"td")(290,"app-pill",41),e(291,"Club Event"),t()(),e(292,`
5352                `),n(293,"td")(294,"app-pill",42),e(295,`Club
5353                        Event`),t()(),e(296,`
5354                `),n(297,"td")(298,"app-pill",43),e(299,"Club Event"),t()(),e(300,`
5355                `),n(301,"td")(302,"app-pill",44),e(303,"Clickable"),t()(),e(304,`
5356            `),t(),e(305,`
5357            `),n(306,"tr"),e(307,`
5358                `),n(308,"td")(309,"code"),e(310,"event-sign-up"),t()(),e(311,`
5359                `),n(312,"td")(313,"app-pill",45),e(314,"Sign Up"),t()(),e(315,`
5360                `),n(316,"td")(317,"app-pill",46),e(318,"Sign Up"),t()(),e(319,`
5361                `),n(320,"td")(321,"app-pill",47),e(322,`Sign
5362                        Up`),t()(),e(323,`
5363                `),n(324,"td")(325,"app-pill",48),e(326,"Clickable"),t()(),e(327,`
5364            `),t(),e(328,`
5365            `),n(329,"tr"),e(330,`
5366                `),n(331,"td")(332,"code"),e(333,"event-game"),t()(),e(334,`
5367                `),n(335,"td")(336,"app-pill",49),e(337,"Game"),t()(),e(338,`
5368                `),n(339,"td")(340,"app-pill",50),e(341,"Game"),t()(),e(342,`
5369                `),n(343,"td")(344,"app-pill",51),e(345,"Game"),t()(),e(346,`
5370                `),n(347,"td")(348,"app-pill",52),e(349,"Clickable"),t()(),e(350,`
5371            `),t(),e(351,`
5372            `),n(352,"tr"),e(353,`
5373                `),n(354,"td")(355,"code"),e(356,"event-other"),t()(),e(357,`
5374                `),n(358,"td")(359,"app-pill",53),e(360,"Other"),t()(),e(361,`
5375                `),n(362,"td")(363,"app-pill",54),e(364,"Other"),t()(),e(365,`
5376                `),n(366,"td")(367,"app-pill",55),e(368,"Other"),t()(),e(369,`
5377                `),n(370,"td")(371,"app-pill",56),e(372,"Clickable"),t()(),e(373,`
5378            `),t(),e(374,`
5379            `),n(375,"tr"),e(376,`
5380                `),n(377,"td")(378,"code"),e(379,"color1"),t()(),e(380,`
5381                `),n(381,"td")(382,"app-pill",57),e(383,"Color 1"),t()(),e(384,`
5382                `),n(385,"td")(386,"app-pill",58),e(387,`Color
5383                        1`),t()(),e(388,`
5384                `),n(389,"td")(390,"app-pill",59),e(391,"Color 1"),t()(),e(392,`
5385                `),n(393,"td")(394,"app-pill",60),e(395,"Clickable"),t()(),e(396,`
5386            `),t(),e(397,`
5387            `),n(398,"tr"),e(399,`
5388                `),n(400,"td")(401,"code"),e(402,"black"),t()(),e(403,`
5389                `),n(404,"td")(405,"app-pill",61),e(406,"Black"),t()(),e(407,`
5390                `),n(408,"td")(409,"app-pill",62),e(410,"Black"),t()(),e(411,`
5391                `),n(412,"td")(413,"app-pill",63),e(414,"Black"),t()(),e(415,`
5392                `),n(416,"td")(417,"app-pill",64),e(418,"Clickable"),t()(),e(419,`
5393            `),t(),e(420,`
5394            `),n(421,"tr",65),e(422,`
5395                `),n(423,"td",66)(424,"strong"),e(425,`Examples with Tooltips (hover to
5396                        see)`),t()(),e(426,`
5397            `),t(),e(427,`
5398            `),n(428,"tr"),e(429,`
5399                `),n(430,"td")(431,"code"),e(432,"With Tooltip"),t()(),e(433,`
5400                `),n(434,"td")(435,"app-pill",67),e(436,"Hover Me"),t()(),e(437,`
5401                `),n(438,"td")(439,"app-pill",68),e(440,"Info"),t()(),e(441,`
5402                `),n(442,"td")(443,"app-pill",69),e(444,"Help"),t()(),e(445,`
5403                `),n(446,"td")(447,"app-pill",70),e(448,"Click & Hover"),t()(),e(449,`
5404            `),t(),e(450,`
5405        `),t(),e(451,`
5406    `),t(),e(452,`
5407
5408    `),n(453,"app-inline-alert",71),e(454,`
5409        `),n(455,"strong"),e(456,"Three statuses have no stylesheet."),t(),e(457,`
5410        `),n(458,"code"),e(459,"default"),t(),e(460,", "),n(461,"code"),e(462,"info"),t(),e(463," and "),n(464,"code"),e(465,"disabled"),t(),e(466,` are on the component's
5411        `),n(467,"code"),e(468,"status"),t(),e(469," union, but "),n(470,"code"),e(471,".pill-default"),t(),e(472,", "),n(473,"code"),e(474,".pill-info"),t(),e(475,` and
5412        `),n(476,"code"),e(477,".pill-disabled"),t(),e(478," do not exist in "),n(479,"code"),e(480,"pill.scss"),t(),e(481,` \u2014 those three render as
5413        a bare `),n(482,"code"),e(483,".pill"),t(),e(484,` in the matrix above.
5414    `),t(),e(485,`
5415
5416    `),n(486,"app-sg-caption",72),e(487,"Event statuses \u2014 used by the calendar"),t(),e(488,`
5417    `),n(489,"div",73),e(490,`
5418        `),S(491,mp,3,2,null,null,K),t(),e(493,`
5419
5420    `),n(494,"app-sg-caption",72),e(495,`
5421        In `),n(496,"code"),e(497,"pill.scss"),t(),e(498," but not on the "),n(499,"code"),e(500,"status"),t(),e(501,` union \u2014 reachable only through
5422        `),n(502,"code"),e(503,"styleClass"),t(),e(504,`
5423    `),t(),e(505,`
5424    `),n(506,"div",73),e(507,`
5425        `),c(508,"app-pill",74),e(509,`
5426        `),c(510,"app-pill",75),e(511,`
5427        `),c(512,"app-pill",76),e(513,`
5428    `),t(),e(514,`
5429`),t(),e(515,`
5430
5431`),n(516,"div",3),e(517,`
5432    `),n(518,"h3"),e(519,"2. "),n(520,"code"),e(521,"app-pill"),t(),e(522," \u2014 variant"),t(),e(523,`
5433    `),n(524,"p",0),e(525,`
5434        `),n(526,"code"),e(527,'variant="tag"'),t(),e(528,` keeps the status color and swaps to the softer treatment: rounded
5435        corners, no uppercase, smaller text.
5436    `),t(),e(529,`
5437
5438    `),n(530,"app-sg-caption",72),e(531,`[variant]="'pill'" (default) vs [variant]="'tag'"`),t(),e(532,`
5439    `),n(533,"div",73),e(534,`
5440        `),c(535,"app-pill",77),e(536,`
5441        `),c(537,"app-pill",78),e(538,`
5442        `),c(539,"app-pill",79),e(540,`
5443        `),c(541,"app-pill",80),e(542,`
5444    `),t(),e(543,`
5445`),t(),e(544,`
5446
5447`),n(545,"div",3),e(546,`
5448    `),n(547,"h3"),e(548,"3. "),n(549,"code"),e(550,"app-pill"),t(),e(551," \u2014 interaction"),t(),e(552,`
5449    `),n(553,"p",0),e(554,`
5450        `),n(555,"code"),e(556,"clickable"),t(),e(557," without "),n(558,"code"),e(559,"routerLink"),t(),e(560," renders a "),n(561,"code"),e(562,"<button>"),t(),e(563,`;
5451        with one it renders an `),n(564,"code"),e(565,"<a>"),t(),e(566,`. Both are here because they produce different
5452        markup and only one is correct for a given call site.
5453    `),t(),e(567,`
5454
5455    `),n(568,"app-sg-caption",72),e(569,'[clickable]="true" (onClick) \u2014 renders a <button>'),t(),e(570,`
5456    `),n(571,"div",73),e(572,`
5457        `),n(573,"app-pill",81),g("onClick",function(){return o.onPillClick("the clickable pill")}),t(),e(574,`
5458    `),t(),e(575,`
5459
5460    `),n(576,"app-sg-caption",72),e(577,'[clickable]="true" [routerLink] \u2014 renders an <a>'),t(),e(578,`
5461    `),n(579,"div",73),e(580,`
5462        `),c(581,"app-pill",82),e(582,`
5463    `),t(),e(583,`
5464
5465    `),n(584,"app-sg-caption",72),e(585,'[iconClickable]="true" \u2014 the icon renders as a <button>
5465 and fires (onIconClick); the pill itself does not. Always pair it with [iconAriaLabel] \u2014 an icon font has no accessible name.'),t(),e(586,`
5466    `),n(587,"div",73),e(588,`
5467        `),n(589,"app-pill",83),g("onIconClick",function(){return o.onPillClick("the removable pill icon")}),t(),e(590,`
5468    `),t(),e(591,`
5469
5470    `),n(592,"p",84),e(593,"Last click: "),n(594,"strong"),e(595),t()(),e(596,`
5471`),t(),e(597,`
5472
5473`),n(598,"div",3),e(599,`
5474    `),n(600,"h3"),e(601,"4. "),n(602,"code"),e(603,"app-pill"),t(),e(604," \u2014 layout"),t(),e(605,`
5475
5476    `),n(606,"app-sg-caption",72),e(607,'[nowrap]="true" \u2014 inside a narrow column'),t(),e(608,`
5477    `),n(609,"div",85),e(610,`
5478        `),n(611,"div",86),e(612,`
5479            `),c(613,"app-pill",87),e(614,`
5480        `),t(),e(615,`
5481    `),t(),e(616,`
5482
5483    `),n(617,"app-sg-caption",72),e(618,'[fullWidth]="true" \u2014 fills its container and centers'),t(),e(619,`
5484    `),n(620,"div",85),e(621,`
5485        `),n(622,"div",88),e(623,`
5486            `),c(624,"app-pill",89),e(625,`
5487        `),t(),e(626,`
5488    `),t(),e(627,`
5489
5490    `),n(628,"app-sg-caption",72),e(629,"Content projection instead of [text]"),t(),e(630,`
5491    `),n(631,"div",73),e(632,`
5492        `),n(633,"app-pill",25)(634,"strong"),e(635,"Projected"),t(),e(636," content"),t(),e(637,`
5493    `),t(),e(638,`
5494`),t(),e(639,`
5495
5496`),n(640,"div",3),e(641,`
5497    `),n(642,"h3"),e(643,"5. "),n(644,"code"),e(645,"app-tag"),t()(),e(646,`
5498    `),n(647,"p",0),e(648,`
5499        A separate component from `),n(649,"code"),e(650,"app-pill"),t(),e(651,"'s "),n(652,"code"),e(653,'variant="tag"'),t(),e(654,`. Resolving that
5500        overlap is the job of the Pills / Badges / Tags audit \u2014 this page exists so the two can be
5501        compared.
5502    `),t(),e(655,`
5503
5504    `),n(656,"table",4),e(657,`
5505        `),n(658,"thead"),e(659,`
5506            `),n(660,"tr"),e(661,`
5507                `),n(662,"th"),e(663,"Variation"),t(),e(664,`
5508                `),n(665,"th"),e(666,"Text Only"),t(),e(667,`
5509                `),n(668,"th"),e(669,"With Icon (Left)"),t(),e(670,`
5510                `),n(671,"th"),e(672,"With Icon (Right)"),t(),e(673,`
5511                `),n(674,"th"),e(675,"Clickable"),t(),e(676,`
5512            `),t(),e(677,`
5513        `),t(),e(678,`
5514        `),n(679,"tbody"),e(680,`
5515            `),n(681,"tr"),e(682,`
5516                `),n(683,"td")(684,"code"),e(685,"default"),t()(),e(686,`
5517                `),n(687,"td"),c(688,"app-tag",90),t(),e(689,`
5518                `),n(690,"td"),c(691,"app-tag",91),t(),e(692,`
5519                `),n(693,"td"),c(694,"app-tag",91),t(),e(695,`
5520                `),n(696,"td"),c(697,"app-tag",92),t(),e(698,`
5521            `),t(),e(699,`
5522            `),n(700,"tr"),e(701,`
5523                `),n(702,"td")(703,"code"),e(704,"with routerLink"),t()(),e(705,`
5524                `),n(706,"td",93),c(707,"app-tag",94),t(),e(708,`
5525                `),n(709,"td"),c(710,"app-tag",95),t(),e(711,`
5526            `),t(),e(712,`
5527        `),t(),e(713,`
5528    `),t(),e(714,`
5529
5530    `),n(715,"app-sg-caption",72),e(716,`Side by side with app-pill [variant]="'tag'"`),t(),e(717,`
5531    `),n(718,"div",73),e(719,`
5532        `),c(720,"app-tag",96),e(721,`
5533        `),c(722,"app-pill",97),e(723,`
5534    `),t(),e(724,`
5535`),t(),e(725,`
5536
5537`),n(726,"div",3),e(727,`
5538    `),n(728,"h3"),e(729,"6. "),n(730,"code"),e(731,"app-pill-counter"),t()(),e(732,`
5539
5540    `),n(733,"app-sg-caption",72),e(734,'<app-pill-counter [pillCount]="\u2026">'),t(),e(735,`
5541    `),n(736,"div",73),e(737,`
5542        `),c(738,"app-pill-counter",98),e(739,`
5543        `),c(740,"app-pill-counter",98),e(741,`
5544        `),c(742,"app-pill-counter",98),e(743,`
5545        `),c(744,"app-pill-counter",99),e(745,`
5546    `),t(),e(746,`
5547`),t(),e(747,`
5548
5549`),n(748,"div",3),e(749,`
5550    `),n(750,"h3"),e(751,"7. "),n(752,"code"),e(753,"app-status-indicator"),t()(),e(754,`
5551    `),n(755,"p",0),e(756,`
5552        Chip-like, so it is in scope for the same audit \u2014 and its `),n(757,"code"),e(758,"status"),t(),e(759,` values are
5553        `),n(760,"em"),e(761,"not"),t(),e(762," the same set as "),n(763,"code"),e(764,"app-pill"),t(),e(765,`'s.
5554    `),t(),e(766,`
5555
5556    `),n(767,"table",4),e(768,`
5557        `),n(769,"thead"),e(770,`
5558            `),n(771,"tr"),e(772,`
5559                `),n(773,"th"),e(774,"Status"),t(),e(775,`
5560                `),n(776,"th"),e(777,"Default"),t(),e(778,`
5561                `),n(779,"th"),e(780,"Custom Text"),t(),e(781,`
5562                `),n(782,"th"),e(783,"Dots"),t(),e(784,`
5563                `),n(785,"th"),e(786,"With Tooltip"),t(),e(787,`
5564            `),t(),e(788,`
5565        `),t(),e(789,`
5566        `),n(790,"tbody"),e(791,`
5567            `),n(792,"tr"),e(793,`
5568                `),n(794,"td")(795,"code"),e(796,"active"),t()(),e(797,`
5569                `),n(798,"td"),c(799,"app-status-indicator",9),t(),e(800,`
5570                `),n(801,"td"),c(802,"app-status-indicator",100),t(),e(803,`
5571                `),n(804,"td"),c(805,"app-status-indicator",101),t(),e(806,`
5572                `),n(807,"td"),c(808,"app-status-indicator",102),t(),e(809,`
5573            `),t(),e(810,`
5574            `),n(811,"tr"),e(812,`
5575                `),n(813,"td")(814,"code"),e(815,"success"),t()(),e(816,`
5576                `),n(817,"td"),c(818,"app-status-indicator",13),t(),e(819,`
5577                `),n(820,"td"),c(821,"app-status-indicator",103),t(),e(822,`
5578                `),n(823,"td"),c(824,"app-status-indicator",104),t(),e(825,`
5579                `),n(826,"td"),c(827,"app-status-indicator",105),t(),e(828,`
5580            `),t(),e(829,`
5581            `),n(830,"tr"),e(831,`
5582                `),n(832,"td")(833,"code"),e(834,"warning"),t()(),e(835,`
5583                `),n(836,"td"),c(837,"app-status-indicator",17),t(),e(838,`
5584                `),n(839,"td"),c(840,"app-status-indicator",106),t(),e(841,`
5585                `),n(842,"td"),c(843,"app-status-indicator",107),t(),e(844,`
5586                `),n(845,"td"),c(846,"app-status-indicator",108),t(),e(847,`
5587            `),t(),e(848,`
5588            `),n(849,"tr"),e(850,`
5589                `),n(851,"td")(852,"code"),e(853,"error"),t()(),e(854,`
5590                `),n(855,"td"),c(856,"app-status-indicator",21),t(),e(857,`
5591                `),n(858,"td"),c(859,"app-status-indicator",109),t(),e(860,`
5592                `),n(861,"td"),c(862,"app-status-indicator",110),t(),e(863,`
5593                `),n(864,"td"),c(865,"app-status-indicator",111),t(),e(866,`
5594            `),t(),e(867,`
5595            `),n(868,"tr"),e(869,`
5596                `),n(870,"td")(871,"code"),e(872,"note"),t()(),e(873,`
5597                `),n(874,"td"),c(875,"app-status-indicator",112),t(),e(876,`
5598                `),n(877,"td"),c(878,"app-status-indicator",113),t(),e(879,`
5599                `),n(880,"td"),c(881,"app-status-indicator",114),t(),e(882,`
5600                `),n(883,"td"),c(884,"app-status-indicator",115),t(),e(885,`
5601            `),t(),e(886,`
5602            `),n(887,"tr"),e(888,`
5603                `),n(889,"td")(890,"code"),e(891,"default"),t()(),e(892,`
5604                `),n(893,"td"),c(894,"app-status-indicator",5),t(),e(895,`
5605                `),n(896,"td"),c(897,"app-status-indicator",116),t(),e(898,`
5606                `),n(899,"td"),c(900,"app-status-indicator",117),t(),e(901,`
5607                `),n(902,"td"),c(903,"app-status-indicator",118),t(),e(904,`
5608            `),t(),e(905,`
5609        `),t(),e(906,`
5610    `),t(),e(907,`
5611`),t(),e(908,`
5612
5613`),n(909,"div",3),e(910,`
5614    `),n(911,"h3"),e(912,"8. Raw classes"),t(),e(913,`
5615    `),n(914,"p",0),e(915,`
5616        Call sites that write the markup by hand instead of using the component. These are migration
5617        targets, not examples to copy.
5618    `),t(),e(916,`
5619
5620    `),n(917,"app-sg-caption",72),e(918,'<span class="pill pill-success"> \u2014 hand-rolled'),t(),e(919,`
5621    `),n(920,"div",73),e(921,`
5622        `),n(922,"span",119),e(923,"Hand-rolled"),t(),e(924,`
5623        `),n(925,"span",120),e(926,"Hand-rolled"),t(),e(927,`
5624    `),t(),e(928,`
5625
5626    `),n(929,"app-sg-caption",72),e(930,".tab-pill \u2014 the filter-tab treatment"),t(),e(931,`
5627    `),n(932,"div",73),e(933,`
5628        `),n(934,"span",121),e(935,"All"),t(),e(936,`
5629        `),n(937,"span",121),e(938,"Active"),t(),e(939,`
5630        `),n(940,"span",121),e(941,"Archived"),t(),e(942,`
5631    `),t(),e(943,`
5632`),t(),e(944,`
5633`)),s&2&&(i(28),m("routerLink","/admin/styleguide/global/admin-vs-member"),i(57),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(9),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(9),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(15),m("iconFirst",!0),i(8),m("clickable",!0),i(22),m("iconFirst",!0),i(8),m("clickable",!0),i(6),m("isInline",!0),i(38),E(o.eventStatuses),i(82),m("clickable",!0),i(8),m("clickable",!0)("routerLink",V(54,dp)),i(8),m("iconClickable",!0),i(6),p(o.lastAction),i(18),m("nowrap",!0),i(11),m("fullWidth",!0),i(73),m("clickable",!0),i(10),m("routerLink",V(55,Xl)),i(3),m("routerLink",V(56,Xl)),i(28),m("pillCount",0),i(2),m("pillCount",3),i(2),m("pillCount",42),i(2),m("pillCount",128),i(61),m("dots",!0),i(19),m("dots",!0),i(19),m("dots",!0),i(19),m("dots",!0),i(19),m("dots",!0),i(19),m("dots",!0))},dependencies:[$,nt,J,le,lt,bn,X],encapsulation:2});let a=r;return a})();function Xi(a){let r=(a||"").trim(),l=/^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)(?:[\s,/]+([\d.%]+))?\s*\)$/i.exec(r);if(l){let s=l[4],o=s===void 0?1:s.endsWith("%")?parseFloat(s)/100:parseFloat(s);return{r:+l[1],g:+l[2],b:+l[3],a:isNaN(o)?1:o}}let d=/^#?([a-f\d]{3}|[a-f\d]{6})$/i.exec(r);if(d){let s=d[1].length===3?d[1].split("").map(o=>o+o).join(""):d[1];return{r:parseInt(s.substr(0,2),16),g:parseInt(s.substr(2,2),16),b:parseInt(s.substr(4,2),16),a:1}}return null}function Yi(a,r){if(!a||!r)return a;let l=a.a;return{r:a.r*l+r.r*(1-l),g:a.g*l+r.g*(1-l),b:a.b*l+r.b*(1-l),a:1}}function Ki(a){let r=a/255;return r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4)}function Ql(a){return .2126*Ki(a.r)+.7152*Ki(a.g)+.0722*Ki(a.b)}function Jl(a,r){if(!a||!r)return null;let l=Ql(Yi(a,r)),d=Ql(r);return l>d?(l+.05)/(d+.05):(d+.05)/(l+.05)}function Qi(a){if(!a)return"";let r=l=>Math.round(l).toString(16).padStart(2,"0");return`#${r(a.r)}${r(a.g)}${r(a.b)}`}var cp=["editableSample"],pp=["namelessSample"],xp=["scaleSample"],hp=["pairingSample"],Xn=(a,r)=>
5633r.kind,Yn=(a,r)=>r.reach,Qn=(a,r)=>r.name,Zl=(a,r)=>r.title,up=(a,r)=>r.what;function gp(a,r){if(a&1&&(e(0,`
5634            `),n(1,"div"),e(2,`
5635                `),c(3,"app-pill",65),e(4,`
5636                `),n(5,"span",66),e(6),t(),e(7,`
5637            `),t(),e(8,`
5638        `)),a&2){let l=r.$implicit;i(3),m("status",l.status)("text",l.label),i(3),p(l.count)}}function fp(a,r){if(a&1&&(e(0,`
5639                    `),n(1,"tr"),e(2,`
5640                        `),n(3,"td"),c(4,"app-pill",65),t(),e(5,`
5641                        `),n(6,"td",4),e(7),t(),e(8,`
5642                        `),n(9,"td",67),e(10),t(),e(11,`
5643                        `),n(12,"td",67),e(13),t(),e(14,`
5644                        `),n(15,"td",67),e(16),t(),e(17,`
5645                    `),t(),e(18,`
5646                `)),a&2){let l=r.$implicit,d=u();i(4),m("status",l.status)("text",l.label),i(3),p(l.means),i(3),p(l.verify),i(3),p(d.countFixed(l.kind)),i(3),p(d.countOpen(l.kind))}}function bp(a,r){if(a&1&&(e(0,`
5647            `),n(1,"div"),e(2,`
5648                `),c(3,"app-pill",65),e(4,`
5649                `),n(5,"span",66),e(6),t(),e(7,`
5650            `),t(),e(8,`
5651        `)),a&2){let l=r.$implicit;i(3),m("status",l.status)("text",l.label),i(3),p(l.count)}}function Sp(a,r){if(a&1&&(e(0,`
5652                    `),n(1,"tr"),e(2,`
5653                        `),n(3,"td"),c(4,"app-pill",65),t(),e(5,`
5654                        `),n(6,"td",4),e(7),t(),e(8,`
5655                        `),n(9,"td",67),e(10),t(),e(11,`
5656                        `),n(12,"td",67),e(13),t(),e(14,`
5657                        `),n(15,"td",67),e(16),t(),e(17,`
5658                    `),t(),e(18,`
5659                `)),a&2){let l=r.$implicit,d=u();i(4),m("status",l.status)("text",l.label),i(3),p(l.means),i(3),p(l.verify),i(3),p(d.countFixedReach(l.reach)),i(3),p(d.countOpenReach(l.reach))}}function Ep(a,r){if(a&1&&(e(0,`
5660            `),n(1,"div",35),e(2,`
5661                `),c(3,"app-user-initials",68,3),e(5,`
5662                `),n(6,"div",47),e(7),t(),e(8,`
5663            `),t(),e(9,`
5664        `)),a&2){let l=r.$implicit;i(3),m("id",9)("size",l.name),i(4),p(l.name)}}function vp(a,r){if(a&1&&(e(0,`
5665            `),n(1,"div",35),e(2,`
5666                `),c(3,"app-user-initials",69),e(4,`
5667                `),n(5,"div",47),e(6),t(),e(7,`
5668            `),t(),e(8,`
5669        `)),a&2){let l=r.$implicit;i(3),m("id",9)("size",l.name)("showCircle",!1),i(3),p(l.name)}}function yp(a,r){if(a&1&&(e(0,`
5670                    `),n(1,"tr"),e(2,`
5671                        `),n(3,"td")(4,"code",67),e(5),t()(),e(6,`
5672                        `),n(7,"td")(8,"code",67),e(9),t()(),e(10,`
5673                        `),n(11,"td")(12,"code",67),e(13),t()(),e(14,`
5674                        `),n(15,"td")(16,"code",67),e(17),t()(),e(18,`
5675                        `),n(19,"td")(20,"code",67),e(21),t()(),e(22,`
5676                        `),n(23,"td",67),e(24),t(),e(25,`
5677                    `),t(),e(26,`
5678                `)),a&2){let l=r.$implicit;i(5),p(l.sizeInput),i(4),p(l.cssClass),i(4),p(l.box),i(4),p(l.fontSize),i(4),p(l.lineHeight),i(3),p(l.uses)}}function wp(a,r){a&1&&(e(0,`
5679                                `),c(1,"app-pill",71),e(2,`
5680                            `))}function Cp(a,r){a&1&&(e(0,`
5681                                `),c(1,"app-pill",72),e(2,`
5682                            `))}function _p(a,r){if(a&1&&(e(0,`
5683                    `),n(1,"tr"),e(2,`
5684                        `),n(3,"td")(4,"code",67),e(5),t()(),e(6,`
5685                        `),n(7,"td",67),e(8),L(9,"number"),t(),e(10,`
5686                        `),n(11,"td",67),e(12),L(13,"number"),n(14,"span",70),e(15),L(16,"number"),t(),e(17,`
5687                        `),t(),e(18,`
5688                        `),n(19,"td",67),e(20),L(21,"number"),t(),e(22,`
5689                        `),n(23,"td",67),e(24),L(25,"number"),n(26,"span",70),e(27),L(28,"number"),t(),e(29,`
5690                        `),t(),e(30,`
5691                        `),n(31,"td"),e(32,`
5692                            `),v(33,wp,3,0)(34,Cp,3,0),t(),e(35,`
5693                    `),t(),e(36,`
5694                `)),a&2){let l=r.$implicit;i(5),p(l.name),i(3),f("",G(9,8,l.box16,"1.0-1"),"px"),i(4),f(`
5695                            `,G(13,11,l.box24,"1.0-1"),`px
5696                            `),i(3),f("\xD7",G(16,14,l.boxFactor,"1.2-2")),i(5),f("",G(21,17,l.glyph16,"1.0-1"),"px"),i(4),f(`
5697                            `,G(25,20,l.glyph24,"1.0-1"),`px
5698                            `),i(3),f("\xD7",G(28,23,l.glyphFactor,"1.2-2")),i(6),y(l.holds?33:34)}}function kp(a,r){if(a&1&&(e(0,`
5699            `),n(1,"div"),e(2,`
5700                `),c(3,"app-pill",65),e(4,`
5701                `),n(5,"span",66),e(6),t(),e(7,`
5702            `),t(),e(8,`
5703        `)),a&2){let l=r.$implicit;i(3),m("status",l.status)("text",l.label),i(3),p(l.count)}}function Tp(a,r){if(a&1&&(e(0,`
5704                `),n(1,"div"),e(2,`
5705                    `),c(3,"app-pill",65),e(4,`
5706                    `),n(5,"span",66),e(6),t(),e(7,`
5707                `),t(),e(8,`
5708            `)),a&2){let l=u().$implicit;i(3),m("status",l.status)("text",l.label),i(3),p(l.count)}}function Ip(a,r){if(a&1&&(e(0,`
5709            `),v(1,Tp,9,3)),a&2){let l=r.$implicit;i(),y(l.reach!=="none"?1:-1)}}function Mp(a,r){a&1&&(e(0,`
5710                                `),n(1,"span",43),e(2,"\u2014"),t(),e(3,`
5711                            `))}function Dp(a,r){if(a&1&&(e(0,`
5712                                `),c(1,"app-pill",65),e(2,`
5713                            `)),a&2){let l=u().$implicit,d=u();i(),m("status",d.reachStatus(l.a11y))("text",d.reachLabel(l.a11y))}}function Fp(a,r){a&1&&(e(0,`
5714                                `),n(1,"span",76),e(2,"introduced"),t(),e(3,`
5715                                `),n(4,"span",39),e(5,"by this change, fixed in it"),t(),e(6,`
5716                            `))}function Pp(a,r){a&1&&(e(0,`
5717                                `),n(1,"span",77),e(2,"pre-existing"),t(),e(3,`
5718                            `))}function Ap(a,r){a&1&&(e(0," "),n(1,"a",78),e(2,"\xA71 probe"),t(),e(3," "))}function Op(a,r){a&1&&(e(0," "),n(1,"a",79),e(2,"below"),t(),e(3," "))}function Np(a,r){a&1&&(e(0," "),n(1,"a",79),e(2,"below"),t(),e(3," "))}function Bp(a,r){a&1&&(e(0," "),n(1,"a",80),e(2,"\xA73 probe"),t(),e(3," "))}function Wp(a,r){a&1&&(e(0," "),n(1,"span",81),e(2,"\u2014"),t(),e(3," "))}function Rp(a,r){if(a&1&&(e(0,`
5719                    `),n(1,"tr"),e(2,`
5720                        `),n(3,"td",73),e(4),n(5,"span",74),e(6),t(),e(7,`
5721                        `),t(),e(8,`
5722                        `),n(9,"td"),e(10,`
5723                            `),c(11,"app-pill",65),e(12,`
5724                        `),t(),e(13,`
5725                        `),n(14,"td"),e(15,`
5726                            `),v(16,Mp,4,0)(17,Dp,3,2),t(),e(18,`
5727                        `),n(19,"td",75),e(20,`
5728                            `),v(21,Fp,7,0)(22,Pp,4,0),t(),e(23,`
5729                        `),n(24,"td",4),e(25),t(),e(26,`
5730                        `),n(27,"td",67),e(28),t(),e(29,`
5731                        `),n(30,"td",75),e(31,`
5732                            `),v(32,Ap,4,0)(33,Op,4,0)(34,Np,4,0)(35,Bp,4,0)(36,Wp,4,0),e(37,`
5733                        `),t(),e(38,`
5734                    `),t(),e(39,`
5735                `)),a&2){let l,d=r.$implicit,s=u();i(4),f(`
5736                            `,d.title,`
5737                            `),i(2),p(d.where),i(5),m("status",s.kindStatus(d.kind))("text",s.kindLabel(d.kind)),i(5),y(d.a11y==="none"?16:17),i(5),y(d.origin==="introduced"?21:22),i(4),p(d.wrong),i(3),p(d.resolution),i(4),y((l=d.demo)==="scale"?32:l==="palette-copy"?33:l==="no-id"?34:l==="probe"?35:36)}}function Lp(a,r){a&1&&(e(0,`
5738                                `),c(1,"app-pill",82),e(2,`
5739                            `))}function qp(a,r){a&1&&(e(0,`
5740                                `),c(1,"app-pill",83),e(2,`
5741                            `))}function Vp(a,r){a&1&&(e(0,`
5742                                `),c(1,"app-pill",84),e(2,`
5743                            `))}function zp(a,r){if(a&1&&(e(0,`
5744                    `),n(1,"tr"),e(2,`
5745                        `),n(3,"td",67),e(4),t(),e(5,`
5746                        `),n(6,"td",4),e(7),t(),e(8,`
5747                        `),n(9,"td")(10,"code",67),e(11),t()(),e(12,`
5748                        `),n(13,"td"),e(14,`
5749                            `),v(15,Lp,3,0)(16,qp,3,0)(17,Vp,3,0),t(),e(18,`
5750                        `),n(19,"td",4),e(20),t(),e(21,`
5751                    `),t(),e(22,`
5752                `)),a&2){let l=r.$implicit;i(4),p(l.what),i(3),p(l.expected),i(4),p(l.actual),i(4),y(l.openBug?15:l.ok?16:17),i(5),p(l.why)}}function Up(a,r){a&1&&(e(0,`
5753                    `),n(1,"tr"),e(2,`
5754                        `),n(3,"td",85),e(4,`
5755                            The editable control did not render. That is itself the open
5756                            `),n(5,"code"),e(6,"playerID"),t(),e(7,` bug in \xA74 \u2014 check the sample above is
5757                            not a blank gap.
5758                        `),t(),e(8,`
5759                    `),t(),e(9,`
5760                `))}function Hp(a,r){if(a&1&&(e(0,`
5761            `),n(1,"div"),e(2,`
5762                `),c(3,"app-pill",65),e(4,`
5763                `),n(5,"span",66),e(6),t(),e(7,`
5764            `),t(),e(8,`
5765        `)),a&2){let l=r.$implicit;i(3),m("status",l.status)("text",l.label),i(3),p(l.count)}}function jp(a,r){if(a&1&&(e(0,`
5766                `),n(1,"div"),e(2,`
5767                    `),c(3,"app-pill",65),e(4,`
5768                    `),n(5,"span",66),e(6),t(),e(7,`
5769                `),t(),e(8,`
5770            `)),a&2){let l=u().$implicit;i(3),m("status",l.status)("text",l.label),i(3),p(l.count)}}function Gp(a,r){if(a&1&&(e(0,`
5771            `),v(1,jp,9,3)),a&2){let l=r.$implicit;i(),y(l.reach!=="none"?1:-1)}}function $p(a,r){a&1&&(e(0,`
5772                                `),n(1,"span",43),e(2,"\u2014"),t(),e(3,`
5773                            `))}function Kp(a,r){if(a&1&&(e(0,`
5774                                `),c(1,"app-pill",65),e(2,`
5775                            `)),a&2){let l=u().$implicit,d=u();i(),m("status",d.reachStatus(l.a11y))("text",d.reachLabel(l.a11y))}}function Xp(a,r){a&1&&(e(0," "),n(1,"a",86),e(2,"below"),t(),e(3," "))}function Yp(a,r){a&1&&(e(0," "),n(1,"a",20),e(2,"below"),t(),e(3," "))}function Qp(a,r){a&1&&(e(0," "),n(1,"a",80),e(2,"\xA73 probe"),t(),e(3," "))}function Jp(a,r){a&1&&(e(0," "),n(1,"span",81),e(2,"\u2014"),t(),e(3," "))}function Zp(a,r){if(a&1&&(e(0,`
5776                    `),n(1,"tr"),e(2,`
5777                        `),n(3,"td",73),e(4),n(5,"span",74),e(6),t(),e(7,`
5778                        `),t(),e(8,`
5779                        `),n(9,"td"),e(10,`
5780                            `),c(11,"app-pill",65),e(12,`
5781                        `),t(),e(13,`
5782                        `),n(14,"td"),e(15,`
5783                            `),v(16,$p,4,0)(17,Kp,3,2),t(),e(18,`
5784                        `),n(19,"td",4),e(20),t(),e(21,`
5785                        `),n(22,"td",67),e(23),t(),e(24,`
5786                        `),n(25,"td",75),e(26,`
5787                            `),v(27,Xp,4,0)(28,Yp,4,0)(29,Qp,4,0)(30,Jp,4,0),e(31,`
5788                        `),t(),e(32,`
5789                    `),t(),e(33,`
5790                `)),a&2){let l,d=r.$implicit,s=u();i(4),f(`
5791                            `,d.title,`
5792                            `),i(2),p(d.where),i(5),m("status",s.kindStatus(d.kind))("text",s.kindLabel(d.kind)),i(5),y(d.a11y==="none"?16:17),i(4),p(d.wrong),i(3),p(d.resolution),i(4),y((l=d.demo)==="no-player-id"?27:l==="square"?28:l==="probe"?29:30)}}var vt={functional:{status:"error",label:"functional",means:"Something does not work \u2014 a throw, a control no keyboard can reach, an element that renders nothing.",verify:"Operate it. Looking at a screen will not find these."},visual:{status:"warning",label:"visual",means:"Pixels only. Wrong at worst looks wrong \u2014 a size, a fill, a radius, a fill that swallows its own initials.",verify:"Look at it."},copy:{status:"secondary",label:"copy",means:"Real text that says the wrong thing.",verify:"Read it."},hygiene:{status:"disabled",label:"hygiene",means:"No runtime effect in either direction \u2014 dead CSS, a duplicate DOM id nothing selects, a comment that lies.",verify:"grep. There is nothing to see."}},yt={only:{status:"error",label:"assistive only",means:"Nothing on screen changes either way. A mouse user could not tell the difference \u2014 the defect exists entirely in what gets announced or what a keyboard can reach.",verify:"A screen reader, or Tab. \xA73 reads the emitted attributes off a live component, which is as far as a probe gets."},affected:{status:"warning",label:"also assistive",means:"Visible or operable on screen, and carries an accessibility consequence on top \u2014 a duplicate id, an accessible name, a box that stops holding together when the root font size moves.",verify:"Whatever its kind asks for, plus the assistive path."}
5792,none:{status:"disabled",label:"none",means:"No accessibility dimension. Note that the initials themselves are decorative and aria-hidden, so a fill that swallows them is a look defect, not a contrast one.",verify:"Nothing extra."}},e0=(()=>{let r=class r{constructor(d,s){this.changeDetector=d,this.siteDataService=s,this.snapshotDate="2026-09-02",this.initialsCallSites=41,this.photoCallSites=42,this.sizes=[{name:"tiny",sizeInput:'size="tiny"',cssClass:".tiny-circle",box:"1.25rem",fontSize:"0.65rem",lineHeight:"1.25rem",uses:"1 \u2014 the message-pin sender"},{name:"small",sizeInput:'size="small"',cssClass:".small-circle",box:"2rem",fontSize:"0.65rem",lineHeight:"2rem",uses:"12"},{name:"default",sizeInput:'size="default"',cssClass:".default-circle",box:"2.5rem",fontSize:"0.875rem",lineHeight:"2.5rem",uses:"15 implicit + 2 explicit"},{name:"large",sizeInput:'size="large"',cssClass:".large-circle",box:"6.25rem",fontSize:"1.5rem",lineHeight:"6.25rem",uses:"11"},{name:"banner",sizeInput:'size="banner"',cssClass:".banner-circle",box:"7rem + 4px border",fontSize:"2.5rem",lineHeight:"7rem",uses:"1 \u2014 the player banner"}],this.kindOrder=["functional","visual","copy","hygiene"],this.kindLegend=this.kindOrder.map(o=>bt({kind:o},vt[o])),this.reachOrder=["only","affected","none"],this.reachLegend=this.reachOrder.map(o=>bt({reach:o},yt[o])),this.fixed=[{title:"Four sizes across three unit systems",kind:"visual",origin:"pre-existing",a11y:"affected",where:"player-profile-photo.scss",wrong:"The boxes were 20px, 2rem, 40px and 100px; the type inside them was 0.65rem, 0.65rem, 14px and 1.5rem. Half the scale tracked the root font size and half did not, so a box grew while its glyphs held still and the initials shrank into an emptier circle.",resolution:"The whole scale is rem, at the same rendered pixels for a 16px root. Probed above at two root sizes \u2014 both factors must read 1.50.",demo:"scale"},{title:"The fifth size existed only as a page override",kind:"visual",origin:"pre-existing",a11y:"none",where:"was player-banner.component.scss:17",wrong:"The banner avatar was a ::ng-deep block reaching into the component from a page stylesheet, because the component only offered four sizes.",resolution:"banner is a real size and the override is gone. p-skeleton reads the same scale through AVATAR_SIZE_BOX rather than hardcoding two pixel values, so the loading placeholder matches whichever size was asked for.",demo:"scale"},{title:"The palette existed twice, and the second copy got no foreground",kind:"visual",origin:"pre-existing",a11y:"none",where:"was message-avatar-group.component.scss:67-97",wrong:"The ten .userN fills were declared globally on span.user-initials and again privately on div.userN. Every global rule is element-qualified, so none of them reached the div \u2014 including the foreground, which fell through to the inherited --base-text. Dark text on the dark half of the palette, live in the staff-messaging header.",resolution:"The group renders app-user-initials for each slot and its thirty lines of .userN CSS are deleted, so it picks up the shared foreground automatically. Only the pie-slice geometry is still local, because that clipping is genuinely unique to it.",demo:"palette-copy"},{title:"The no-id avatar was invisible to everyone",kind:"visual",origin:"introduced",a11y:"none",where:"variables.scss \u2014 --user-avatar-none",wrong:"A user with no usable id got --grey-200, a near-white, under the shared translucent white foreground. Not low contrast \u2014 the initials were not there.",resolution:"--user-avatar-none is #D1D1D1, matched to the mobile client. Deliberately neutral rather than an eleventh person colour, and it takes --user-avatar-text-on-light rather than the shared white \u2014 dark type on that grey measures 9.42:1, where the white it replaced measured 1.41:1.",demo:"no-id"},{title:"The editable avatar was a click-only div",kind:"functional",origin:"pre-existing",a11y:"only",where:"player-profile-photo.component.html:35",wrong:"A div with a (click) handler \u2014 no role, no tabindex, no key handler \u2014 and a camera glyph drawn by a ::before with no text. Uploading, downloading and removing a profile photo was unreachable by keyboard and silent to a screen reader.",resolution:'A real <button type="button"> with an aria-label naming the action and the person. The p-menu it opens already handles its own keyboard once open.',demo:"probe"},{title:"Avatars read their initials out loud",kind:"functional",origin:"pre-existing",a11y:"only",
5792where:"user-initials.component.html \xB7 player-profile-photo.component.html",wrong:'Every avatar announced its two letters on top of whatever the host already said, and the photo divs carried an alt="" that was inert \u2014 alt is not a div attribute.',resolution:"The initials span and all three photo divs are aria-hidden. Avatars are decoration; every surface that shows one also shows the person's name in real text. A host that needs the person announced supplies that text itself.",demo:"probe"},{title:"A literal id was emitted once per editable avatar",kind:"hygiene",origin:"pre-existing",a11y:"affected",where:"player-profile-photo.component.html",wrong:'id="player-profile-image" was hardcoded inside a component that can appear more than once on a page, so two editable avatars produced duplicate ids.',resolution:"Dropped. Nothing selected it.",demo:"probe"},{title:"An unnamed avatar emitted a title containing one space",kind:"visual",origin:"pre-existing",a11y:"affected",where:"user-initials.component.html",wrong:'title="{{firstName}} {{lastName}}" interpolated both parts unconditionally, so an avatar with neither produced title=" " \u2014 a tooltip of nothing.',resolution:"The title is built from the parts that exist and bound as null when there are none, so the attribute is absent rather than empty.",demo:"probe"},{title:".no-bg was declared where it could not reach its callers",kind:"visual",origin:"pre-existing",a11y:"none",where:"was player-profile-photo.component.scss:11",wrong:"The class that strips the fill behind a transparent club logo lived in a component stylesheet, so emulated encapsulation scoped it to that component. Two other templates applied .no-bg to hand-rolled avatar divs and got nothing \u2014 those logos sat on a grey fill.",resolution:"Moved into the global partial beside .user-image, which it modifies. The !important went with it, since nothing needs to outrank now, and the editable branch gained the binding it was missing.",demo:"none"},{title:"An unguarded dereference after an optional chain",kind:"functional",origin:"pre-existing",a11y:"none",where:"message-avatar-group.component.html",wrong:"recipient?.clubUserID.toString() \u2014 the optional chain guards the recipient and then calls .toString() on the id regardless, which throws on a null id.",resolution:"Guarded when the group was converted to app-user-initials.",demo:"none"},{title:"The editable container lost its block formatting context",where:"player-profile-photo.component.scss",kind:"visual",origin:"introduced",a11y:"none",wrong:"Making the container a <button> handed it a UA-default inline-block, because .btn-a11y resets border, padding, margin, background and width but not display. Inside .player-profile-header the page rule centres the 100px box with margin: 0px auto, which computes to zero on an inline-block, and the box gained baseline descender space under it.",resolution:"display: block on the component's own .profile-image-container, restoring what the div had. Nothing else declares display on that element, so the rule cannot lose. Probed in \xA73.",demo:"probe"},{title:"Five override rules matched nothing",kind:"hygiene",origin:"pre-existing",a11y:"none",where:"templates.scss:421, :434, :476 \xB7 player-basic-info.component.scss:16 \xB7 player-profile-photo.component.scss:1",wrong:"A 70px avatar whose only call site passed a different size; an img rule for a class that only ever lands on a div; a .no-image circle no template asks for; a .player-profile-image-container that misspells the real class; and an icon rule whose <i> is commented out. Between them they carried a third foreground colour and a size for an element type that does not exist here.",resolution:"All five deleted. No rendered pixel moves.",demo:"none"}],this.open=[{title:"An editable avatar with no playerID renders nothing at all",kind:"functional",origin:"pre-existing",a11y:"none",where:"player-profile-photo.component.html:34",wrong:"The outer @if (player && !loading) passes, then @if (player && player.playerID) inside the editable branch drops the whole avatar. The @else skeleton belongs to the outer condition, so it does not fire either. A blank gap with no loading state and no fallback.",resolution:"The inner guard should gate the upload affordance, not the avatar. This is the only open bug that is visible on screen today \u2014 demoed beside this table.",demo:"no-player-id"},{title:"Square is 4px on the component and square-cornered in a roster card",kind:"visual",origin:"pre-existing",a11y:"none",where:"player-profile-photo.scss vs templates.scss:444",wrong:'[showCircle]="false" sets border-radius: 4px, and a .player-profile-header page rule resets it to unset. The same input produces two different shapes depen
5792ding on where the avatar is mounted.',resolution:"Pick one. Neither is obviously right, which is why it is here rather than fixed.",demo:"square"},{title:"Lazy loading guards on a different id than the loader resolves",kind:"functional",origin:"pre-existing",a11y:"none",where:"player-profile-photo.component.ts",wrong:'setupLazyLoading tests this.player?.userID. loadPhoto resolves player?.user?.userID || player?.userID || this.userID. A player carrying only user.userID with [lazy]="true" gets no observer and no eager load, so loading stays true and the skeleton never resolves.',resolution:"Resolve the id once, in a getter both paths read. Latent rather than live \u2014 all three current lazy call sites pass player.userID.",demo:"none"},{title:"playerNumber is computed, passed by ten call sites, and rendered nowhere",kind:"hygiene",origin:"pre-existing",a11y:"none",where:"both components \xB7 10 templates",wrong:"Both components seed playerNumber with a random 1-6 in ngOnInit and the shared template never reads it. Ten call sites compute (i + 1).toString() to feed it.",resolution:"Delete the input and the ten bindings. The probe below passes a value and confirms nothing in the rendered DOM carries it.",demo:"probe"},{title:"Two of the three photo-loading branches ignore clubImageUrl",kind:"functional",origin:"pre-existing",a11y:"none",where:"player-profile-photo.component.ts loadPhoto()",wrong:"Only the individual-access branch sets isClubLogo and falls back to the club logo. The teamID and registrationID branches never do, even when clubImageUrl is bound, so the same person shows initials on a team roster and a club logo elsewhere.",resolution:"Lift the fallback out of the one branch. The CSS half of this is fixed \u2014 the editable branch now binds .no-bg \u2014 but the loader asymmetry is not.",demo:"none"},{title:'The tryout cropper is titled "Player Photo Preview"',kind:"copy",origin:"pre-existing",a11y:"affected",where:"player-profile-photo.component.html",wrong:`One template serves both components and the cropper dialog header is a literal. The tryout flow's own menu labels say "Tryout Photo", so the two disagree inside one flow.`,resolution:"Make the header an input with the player wording as its default.",demo:"none"},{title:".icon-badge-camera declares no positioning context of its own",kind:"visual",origin:"pre-existing",a11y:"none",where:"modifiers.scss:2864",wrong:"The camera badge is absolutely positioned and relies on whichever container it lands in being positioned. It works because two separate rules happen to supply position: relative \u2014 one in the component stylesheet, one scoped to a .player-profile-header page selector.",resolution:"Give the badge its own context. Held back because the same badge class is used by the team-banner logo control, which is also a click-handling div with no keyboard path \u2014 a separate component and a separate change.",demo:"none"},{title:"A comment points at a mixin that does not exist",kind:"hygiene",origin:"pre-existing",a11y:"none",where:"modifiers.scss:2863",wrong:'"Uses the icon-badge mixin from variables.scss." There is no icon-badge mixin in variables.scss.',resolution:"Delete the sentence.",demo:"none"}],this.samplePlayer={playerID:1,userID:7},this.playerWithoutId={userID:7},this.scaleProbe=[],this.probes=[],this.paletteCopy=[],this.noId=[]}ngOnInit(){this.siteDataService.hideSiteLoader()}ngAfterViewInit(){this.remeasure()}remeasure(){this.scaleProbe=this.probeScale();let d=this.measurePairings();this.paletteCopy=d.filter(s=>s.label?.startsWith("group")),this.noId=d.filter(s=>s.label?.startsWith("no-id")),this.probes=this.probeLiveComponent(),this.changeDetector.detectChanges()}probeScale(){let d=document.documentElement,s=d.style.fontSize;d.style.fontSize="16px";let o=this.readScale();d.style.fontSize="24px";let x=this.readScale();return d.style.fontSize=s,this.sizes.map((h,_)=>{let se=o[_]?.box?x[_].box/o[_].box:0,qe=o[_]?.glyph?x[_].glyph/o[_].glyph:0;return{name:h.name,box16:o[_]?.box,box24:x[_]?.box,glyph16:o[_]?.glyph,glyph24:x[_]?.glyph,boxFactor:se,glyphFactor:qe,holds:!!se&&Math.abs(se-qe)<.02}})}readScale(){return(this.scaleSamples?.toArray()||[]).map(d=>{let s=d.nativeElement.querySelector(".user-initials")||d.nativeElement,o=getComputedStyle(s);return{box:this.declaredWidth(o),glyph:parseFloat(o.fontSize)}})}declaredWidth(d){let s=parseFloat(d.width);return d.boxSizing!=="border-box"?s:s+parseFloat(d.borderLeftWidth)+parseFloat(d.borderRightWidth)+parseFloat(d.paddingLeft)+parseFloat(d.paddingRight)}measurePairings(){return(this.pairingSamples?.toArray()||[]).map(d=>{let s=d.nativeElement,o=getComputedStyle(s.querySelector(".user-initials")||s),x=Xi(o.backgroundColor),h=Xi(o.color);return{label:s.dataset.label,fill:Qi(x),text:o.color,flattened:Qi(Yi(h,x)),ratio:Jl(h,x)}})}probeLiveComponent(){let s=this.editableSample?.nativeElement?.querySelector(".profile-image-container.editable");if(!s)return[];let o=getComputedStyle(s),x=getComputedStyle(s,"::before"),h=s.getAttribute("aria-label"),_=s.querySelector(".user-initials"),se=this.namelessSample?.nativeElement?.querySelector(".user-initials");return[{what:"the control is a button",expected:"BUTTON",actual:s.tagName,ok:s.tagName==="BUTTON",why:"A div with a click handler is not focusable and claims nothing. This is the fix for the click-only div."},{what:"type",expected:"button",actual:s.getAttribute("type")||"absent",ok:s.getAttribute("type")==="button",why:"Without it a button inside a form submits it, and the photo control sits inside player edit forms."},{what:"the control has a name",expected:"an aria-label",actual:h||"absent",ok:!!h,why:"The only text in the control is a ::before glyph, which no screen reader announces. Comes from editPhotoLabel, shared with the tryout component."},{what:"keyboard reachable",expected:"tabindex 0",actual:`${s.tabIndex}`,ok:s.tabIndex===0,why:"Native on a button. Upload, download and remove had no keyboard path at all before."},{what:"the avatar is decoration",expected:'aria-hidden="true"',actual:_?.getAttribute("aria-hidden")||"absent",ok:_?.getAttribute("aria-hidden")==="true",why:"Without it the avatar reads 
5792its two letters out on top of the name the host already shows."},{what:"hiding it is safe",expected:"hidden avatar inside a named button",actual:h&&_?.getAttribute("aria-hidden")==="true"?"both hold":"one is missing",ok:!!h&&_?.getAttribute("aria-hidden")==="true",why:"The pair is load-bearing: hide the avatar without labelling the button and the control becomes nameless."},{what:"no hardcoded id",expected:"0 in the document",actual:`${document.querySelectorAll("#player-profile-image").length}`,ok:document.querySelectorAll("#player-profile-image").length===0,why:"The literal id used to be emitted once per editable avatar, so two on a page collided."},{what:"no title on an unnamed avatar",expected:"absent",actual:se?.hasAttribute("title")?`"${se.getAttribute("title")}"`:"absent",ok:!!se&&!se.hasAttribute("title"),why:"It used to interpolate both name parts unconditionally and emit a title of one space."},{what:"playerNumber reaches the DOM",expected:"no \u2014 the input is dead",actual:s.textContent?.includes("7")?"it renders":"nowhere",ok:!s.textContent?.includes("7"),why:'This sample passes playerNumber="7". Nothing renders it, which is the open bug: ten call sites compute a value the template never reads.',openBug:!0},{what:"the control still formats as a block",expected:"block",actual:o.display,ok:o.display==="block",why:"A <button> defaults to inline-block and .btn-a11y resets everything except display. Inline-block would zero the auto margins the .player-profile-header rule centres the box with, and sit it on a baseline."},{what:"the camera badge has a context",expected:"container relative, ::before absolute",actual:`${o.position}, ${x.position}`,ok:o.position==="relative"&&x.position==="absolute",why:"The badge declares no context of its own \u2014 an open bug. It works here because the component stylesheet supplies one; static would drop the glyph out of the corner.",openBug:!0}]}get scaleHolds(){return this.scaleProbe.filter(d=>d.holds).length}get probesPassing(){return this.probes.filter(d=>d.ok&&!d.openBug).length}get probesAsserted(){return this.probes.filter(d=>!d.openBug).length}get demoedFixed(){return this.fixed.filter(d=>d.demo!=="none").length}get demoedOpen(){return this.open.filter(d=>d.demo!=="none").length}get introduced(){return[...this.fixed,...this.open].filter(d=>d.origin==="introduced")}get preExisting(){return[...this.fixed,...this.open].filter(d=>d.origin==="pre-existing").length}reachStatus(d){return yt[d].status}reachLabel(d){return yt[d].label}reachTally(d){return this.reachOrder.map(s=>({reach:s,label:yt[s].label,status:yt[s].status,count:d.filter(o=>o.a11y===s).length})).filter(s=>s.count>0)}get allReachTally(){return this.reachTally([...this.fixed,...this.open])}countFixedReach(d){return this.fixed.filter(s=>s.a11y===d).length}countOpenReach(d){return this.open.filter(s=>s.a11y===d).length}countFixed(d){return this.fixed.filter(s=>s.kind===d).length}countOpen(d){return this.open.filter(s=>s.kind===d).length}kindStatus(d){return vt[d].status}kindLabel(d){return vt[d].label}tally(d){return this.kindOrder.map(s=>({kind:s,label:vt[s].label,status:vt[s].status,count:d.filter(o=>o.kind===s).length})).filter(s=>s.count>0)}get fixedTally(){return this.tally(this.fixed)}get openTally(){return this.tally(this.open)}get allTally(){return this.tally([...this.fixed,...this.open])}cannotBeSeen(d){return d.kind==="functional"||d.a11y==="only"}get needsOperating(){return[...this.fixed,...this.open].filter(d=>this.cannotBeSeen(d)).length}get fixedNeedsOperating(){return this.fixed.filter(d=>this.cannotBeSeen(d)).length}};r.\u0275fac=function(s){return new(s||r)(A(Ke),A(R))},r.\u0275cmp=b({type:r,selectors:[["app-avatars"]],viewQuery:function(s,o){if(s&1&&$e(cp,5,Ce)(pp,5,Ce)(xp,5,Ce)(hp,5,Ce),s&2){let x;xe(x=he())&&(o.editableSample=x.first),xe(x=he())&&(o.namelessSample=x.first),xe(x=he())&&(o.scaleSamples=x),xe(x=he())&&(o.pairingSamples=x)}},standalone:!1,decls:840,vars:51,consts:[["pairingSample",""],["editableSample",""],["namelessSample",""],["scaleSample",""],[1,"text-small","text-grey"],[3,"routerLink"],["type","button",1,"btn","btn-naked","btn-sm",3,"click"],["id","kinds",1,"card"],["side","shared"],[1,"text-small","fw-800","mb-1"],[1,"d-flex","flex-wrap","align-items-center","gap-3","mb-2"],[1,"overflow-x-auto","mb-4"],[1,"table","table-bordered","sg-doc-table"],[2,"width","9rem"],[2,"width","22rem"],[2,"width","5rem"],[1,"text-small","text-grey","mb-4"],["id","scale",1,"card"],[1,"d-flex","flex-wrap","align-items-end","gap-3","mb-3"],[1,"text-smallest","text-grey","mb-1"],["href","#square"],[1,"overflow-x-auto"],[1,"table","table-bordered","table-hover","sg-doc-table"],[2,"width","8rem"],[2,"width","7rem"],[1,"text-medium-large","mt-4"],[2,"width","11rem"],["id","fixed",1,"card"],["href","#kinds",1,"text-smallest"],[2,"width","17rem"],["id","palette-copy",1,"text-medium-large","mt-4"],[1,"row"],[1,"col-md-6","mb-3"],[1,"text-smallest","text-grey"],[1,"d-flex","flex-wrap","align-items-center","gap-3"],[1,"text-center"],["data-label","group-broken",1,"user-initials","default-circle",2,"background","var(--user-avatar-6)","color","var(--base-text)"],[1,"text-smallest","line-height-3","mt-1"],[1,"text-red"],[1,"text-grey-lt","d-block"],["data-label","group-fixed","firstName","Ada","lastName","Byron",3,"id"],["data-label","no-id-broken",1,"user-initials","default-circle",2,"background","var(--grey-200)","color","var(--user-avatar-text)"],["data-label","no-id-fixed","firstName","Ada","lastName","Byron",3,"id"],[1,"text-smallest","text-grey-lt"],["id","probe",1,"card"],[1,"d-flex","flex-wrap","align-items-start","gap-3","mb-3"],["firstName","Ada","lastName","Byron","size","large","playerNumber","7",3,"player","editable"],[1,"text-smallest","text-grey-lt","line-height-3","mt-1"],[1,"player-profile-header","text-center"],["firstName","Ada","lastName","Byron","size","large",3,"player","editable"],[3,"id"],[1,"text-smallest","text-grey-lt",2,"max-width","18rem"],[2,"width","13rem"],[2,"width","12rem"],[2,"width","14rem"],["id","open",1,"card"],[1,"row","mt-4"],["id","no-player-id",1,"col-md-6","mb-3"],[1,"d-flex","flex-wrap","align-items-start","gap-3"],["firstName","Ada","lastName","Byron","size","default",3,"player","editable"],[1,"sg-slot-outline","d-inline-block",2,"min-width","2.5rem","min-height","2.5rem"],[1,"text-smallest","text-red","line-height-3","mt-1"],["
5792id","square",1,"col-md-6","mb-3"],["firstName","Ada","lastName","Byron",3,"id","showCircle"],[1,"profile-image-container"],["variant","tag",3,"status","text"],[1,"text-small","fw-800","ms-1"],[1,"text-small"],["firstName","Ada","lastName","Byron",3,"id","size"],["firstName","Ada","lastName","Byron",3,"id","size","showCircle"],[1,"text-smallest","text-grey-lt","d-block"],["variant","tag","status","success","text","holds"],["variant","tag","status","error","text","split"],[1,"text-small","fw-800"],[1,"text-smallest","text-grey-lt","d-block","fw-400"],[1,"text-smallest"],[1,"text-red","fw-800"],[1,"text-grey"],["href","#scale"],["href","#palette-copy"],["href","#probe"],[1,"text-grey-lt"],["variant","tag","status","warning","text","open bug"],["variant","tag","status","success","text","pass"],["variant","tag","status","error","text","fail"],["colspan","5",1,"text-small","text-red"],["href","#no-player-id"]],template:function(s,o){s&1&&(n(0,"h2"),e(1,"Avatars"),t(),e(2,`
5793`),n(3,"p",4),e(4,`
5794    Every circle in the app that stands in for a person \u2014 the initials bubble, the profile
5795    photo, the club-logo fallback and the editable upload target. Two components render them:
5796    `),n(5,"code"),e(6,"<app-user-initials>"),t(),e(7),n(8,"code"),e(9,"id"),t(),e(10,`;
5797    `),n(11,"code"),e(12,"<app-player-profile-photo>"),t(),e(13),n(14,"code"),e(15,"<app-player-tryout-photo>"),t(),e(16,` shares its template with a different service.
5798`),t(),e(17,`
5799`),n(18,"p",4),e(19,`
5800    Neither component declares what an avatar looks like. The size scale, the circle and the
5801    fill/foreground pairing all live in the global
5802    `),n(20,"code"),e(21,"3_modules/components/player-profile-photo.scss"),t(),e(22,`, which arrives through
5803    `),n(23,"code"),e(24,"styles.scss"),t(),e(25,` \u2014 which is why a component-scoped rule cannot override it without
5804    `),n(26,"code"),e(27,"::ng-deep"),t(),e(28,`. The fill tokens are documented on
5805    `),n(29,"a",5),e(30,"color"),t(),e(31,` \xA79.
5806`),t(),e(32,`
5807`),n(33,"p",4),e(34,`
5808    `),n(35,"strong"),e(36,"Avatars are decorative."),t(),e(37,` The initials span and all three photo divs are
5809    `),n(38,"code"),e(39,"aria-hidden"),t(),e(40,`: every surface that shows an avatar also shows the person's name in
5810    real text beside it, and a host that needs the person announced supplies that text itself.
5811`),t(),e(41,`
5812`),n(42,"p",4),e(43,`
5813    Counts are a grep of `),n(44,"code"),e(45,"ClientApp/src"),t(),e(46," taken "),n(47,"strong"),e(48),t(),e(49,` with
5814    the styleguide excluded. `),n(50,"strong"),e(51,"Every number below is measured, not typed"),t(),e(52,` \u2014 the
5815    scale is probed at two root font sizes, the pairings are read off the rendered samples, and the
5816    probe table is read off a real mounted component.
5817    `),n(53,"button",6),g("click",function(){return o.remeasure()}),e(54,"Re-measure"),t(),e(55,`
5818`),t(),e(56,`
5819
5820`),n(57,"div",7),e(58,`
5821    `),n(59,"h3"),e(60,"The findings, on three axes"),t(),e(61,`
5822    `),n(62,"app-sg-caption",8),e(63),t(),e(64,`
5823    `),n(65,"p",4),e(66,`
5824        \xA72 and \xA74 carry these as columns. They classify the `),n(67,"em"),e(68,"defect"),t(),e(69,`, not whether it
5825        is fixed. `),n(70,"strong"),e(71,"Kind"),t(),e(72," is what sort of thing is wrong, "),n(73,"strong"),e(74,"accessibility"),t(),e(75,`
5826        is a separate question from it \u2014 a finding can be a plain visual defect that also
5827        breaks under a larger root font size, or carry no visible symptom at all \u2014 and
5828        `),n(76,"strong"),e(77,"origin"),t(),e(78,` says whether the defect predates this change. A pixel and a dead
5829        control are not the same risk, and neither is a pixel and a control no keyboard can reach.
5830    `),t(),e(79,`
5831
5832    `),n(80,"p",9),e(81,"Axis 1 \u2014 kind: what sort of thing is wrong"),t(),e(82,`
5833    `),n(83,"div",10),e(84,`
5834        `),S(85,gp,9,3,null,null,Xn),t(),e(87,`
5835    `),n(88,"div",11),e(89,`
5836        `),n(90,"table",12),e(91,`
5837            `),n(92,"thead"),e(93,`
5838                `),n(94,"tr"),e(95,`
5839                    `),n(96,"th",13),e(97,"Kind"),t(),e(98,`
5840                    `),n(99,"th"),e(100,"What it means"),t(),e(101,`
5841                    `),n(102,"th",14),e(103,"How it has to be verified"),t(),e(104,`
5842                    `),n(105,"th",15),e(106,"Fixed"),t(),e(107,`
5843                    `),n(108,"th",15),e(109,"Open"),t(),e(110,`
5844                `),t(),e(111,`
5845            `),t(),e(112,`
5846            `),n(113,"tbody"),e(114,`
5847                `),S(115,fp,19,6,null,null,Xn),t(),e(117,`
5848        `),t(),e(118,`
5849    `),t(),e(119,`
5850
5851    `),n(120,"p",9),e(121,"Axis 2 \u2014 accessibility: independent of kind"),t(),e(122,`
5852    `),n(123,"div",10),e(124,`
5853        `),S(125,bp,9,3,null,null,Yn),t(),e(127,`
5854    `),n(128,"div",11),e(129,`
5855        `),n(130,"table",12),e(131,`
5856            `),n(132,"thead"),e(133,`
5857                `),n(134,"tr"),e(135,`
5858                    `),n(136,"th",13),e(137,"Accessibility"),t(),e(138,`
5859                    `),n(139,"th"),e(140,"What it means"),t(),e(141,`
5860                    `),n(142,"th",14),e(143,"What it adds to the check"),t(),e(144,`
5861                    `),n(145,"th",15),e(146,"Fixed"),t(),e(147,`
5862                    `),n(148,"th",15),e(149,"Open"),t(),e(150,`
5863                `),t(),e(151,`
5864            `),t(),e(152,`
5865            `),n(153,"tbody"),e(154,`
5866                `),S(155,Sp,19,6,null,null,Yn),t(),e(157,`
5867        `),t(),e(158,`
5868    `),t(),e(159,`
5869
5870    `),n(160,"p",9),e(161,"Axis 3 \u2014 origin: whose bug it is"),t(),e(162,`
5871    `),n(163,"p",16),e(164,`
5872        `),n(165,"strong"),e(166),t(),e(167),n(168,"em"),e(169,"introduced"),t(),e(170,` in \xA72, and neither ships: the shared translucent
5873        foreground made the near-white no-id fill invisible, and the `),n(171,"code"),e(172,"<button>"),t(),e(173,`
5874        swap dropped a formatting context. Every one of the eight still open in \xA74 is
5875        inherited.
5876    `),t(),e(174,`
5877    `),n(175,"p",4),e(176,`
5878        Reading the axes together: `),n(177,"strong"),e(178),t(),e(179,` \u2014 everything
5879        `),n(180,"em"),e(181,"functional"),t(),e(182," on axis 1, plus everything "),n(183,"em"),e(184,"assistive only"),t(),e(185,` on axis 2. Those are
5880        the editable avatar's keyboard path, the `),n(186,"code"),e(187,"aria-hidden"),t(),e(188,` pass (both of which are
5881        assistive-only `),n(189,"em"),e(190,"and"),t(),e(191,` functional), and the null-id dereference in the staff-messaging
5882        cluster, which needs a recipient with no `),n(192,"code"),e(193,"clubUserID"),t(),e(194,` to exercise. The
5883        `),n(195,"em"),e(196,"also assistive"),t(),e(197,` rows are not in that count: each is visible or operable on screen
5884        and simply carries a second consequence \u2014 a duplicate DOM id, an accessible name, a
5885        box that stops holding together when the root font size moves. Everything else that shipped
5886        is pixels or dead code.
5887    `),t(),e(198,`
5888`),t(),e(199,`
5889
5890`),n(200,"div",17),e(201,`
5891    `),n(202,"h3"),e(203,"1. The scale"),t(),e(204,`
5892    `),n(205,"app-sg-caption",8),e(206,"player-profile-photo.scss \u2014 .tiny-circle / .small-circle / .default-circle / .large-circle / .banner-circle"),t(),e(207,`
5893    `),n(208,"p",4),e(209,`
5894        Five sizes, one unit. Every sample is a live `),n(210,"code"),e(211,"<app-user-initials>"),t(),e(212,`. The
5895        photo component takes the same `),n(213,"code"),e(214,"size"),t(),e(215,` input; it also still accepts the older
5896        `),n(216,"code"),e(217,"largeCircle"),t(),e(218," boolean, which decides only when "),n(219,"code"),e(220,"size"),t(),e(221,` is unset, so the
5897        forty existing callers are unaffected.
5898    `),t(),e(222,`
5899    `),n(223,"p",9),e(224,"Circle \u2014 "),n(225,"code"),e(226,'[showCircle]="true"'),t(),e(227,", the default"),t(),e(228,`
5900    `),n(229,"div",18),e(230,`
5901        `),S(231,Ep,10,3,null,null,Qn),t(),e(233,`
5902    `),n(234,"p",9),e(235,"Square \u2014 "),n(236,"code"),e(237,'[showCircle]="false"'),t()(),e(238,`
5903    `),n(239,"p",19),e(240,`
5904        Same boxes, same glyphs; `),n(241,"code"),e(242,".square"),t(),e(243,` changes only
5905        `),n(244,"code"),e(245,"border-radius"),t(),e(246," to "),n(247,"code"),e(248,"4px"),t(),e(249,`. One page rule resets that to
5906        `),n(250,"code"),e(251,"unset"),t(),e(252," \u2014 demoed in "),n(253,"a",20),e(254,"\xA74"),t(),e(255,`.
5907    `),t(),e(256,`
5908    `),n(257,"div",18),e(258,`
5909        `),S(259,vp,9,4,null,null,Qn),t(),e(261,`
5910    `),n(262,"div",21),e(263,`
5911        `),n(264,"table",22),e(265,`
5912            `),n(266,"thead"),e(267,`
5913                `),n(268,"tr"),e(269,`
5914                    `),n(270,"th",13),e(271,"Input"),t(),e(272,`
5915                    `),n(273,"th",13),e(274,"Class"),t(),e(275,`
5916                    `),n(276,"th",23),e(277,"Box"),t(),e(278,`
5917                    `),n(279,"th",24),e(280,"Font"),t(),e(281,`
5918                    `),n(282,"th",24),e(283,"Line height"),t(),e(284,`
5919                    `),n(285,"th"),e(286,"Call sites"),t(),e(287,`
5920                `),t(),e(288,`
5921            `),t(),e(289,`
5922            `),n(290,"tbody"),e(291,`
5923                `),S(292,yp,27,6,null,null,Qn),t(),e(294,`
5924        `),t(),e(295,`
5925    `),t(),e(296,`
5926
5927    `),n(297,"h4",25),e(298,"The unit invariant, probed"),t(),e(299,`
5928    `),n(300,"p",4),e(301,`
5929        A box and the glyphs inside it must share a unit, or the box scales with the reader's font
5930        size and the glyphs do not. Each size is measured twice \u2014 at a 16px root and again at
5931        24px, with the root restored before the numbers are read out, so the page never visibly
5932        resizes. `),n(302,"strong"),e(303,"Both factors must be 1.50."),t(),e(304,`
5933    `),t(),e(305,`
5934    `),n(306,"div",21),e(307,`
5935        `),n(308,"table",22),e(309,`
5936            `),n(310,"thead"),e(311,`
5937                `),n(312,"tr"),e(313,`
5938                    `),n(314,"th",24),e(315,"Size"),t(),e(316,`
5939                    `),n(317,"th",26),e(318,"Box \u2014 16px root"),t(),e(319,`
5940                    `),n(320,"th",26),e(321,"Box \u2014 24px root"),t(),e(322,`
5941                    `),n(323,"th",26),e(324,"Glyphs \u2014 16px root"),t(),e(325,`
5942                    `),n(326,"th",26),e(327,"Glyphs \u2014 24px root"),t(),e(328,`
5943                    `),n(329,"th"),e(330,"Both scale alike"),t(),e(331,`
5944                `),t(),e(332,`
5945            `),t(),e(333,`
5946            `),n(334,"tbody"),e(335,`
5947                `),S(336,_p,37,26,null,null,Qn),t(),e(338,`
5948        `),t(),e(339,`
5949    `),t(),e(340,`
5950    `),n(341,"p",4),e(342,`
5951        `),n(343,"strong"),e(344),t(),e(345,` sizes keep their proportions.
5952        The measurement is normalised to the width the stylesheet asked for: the app is border-box,
5953        so `),n(346,"code"),e(347,"getComputedStyle"),t(),e(348,` reports the content box, which is 8px short on
5954        `),n(349,"code"),e(350,"banner"),t(),e(351,` \u2014 the only size with a border, and deliberately a fixed
5955        `),n(352,"code"),e(353,"4px"),t(),e(354,` rather than a rem. Left unnormalised that fixed border reads as a broken
5956        unit ratio, which it is not.
5957    `),t(),e(355,`
5958`),t(),e(356,`
5959
5960`),n(357,"div",27),e(358,`
5961    `),n(359,"h3"),e(360,"2. Bugs fixed"),t(),e(361,`
5962    `),n(362,"app-sg-caption",8),e(363),t(),e(364,`
5963    `),n(365,"div",10),e(366,`
5964        `),S(367,kp,9,3,null,null,Xn),S(369,Ip,2,1,null,null,Yn),n(371,"a",28),e(372,"what these mean"),t(),e(373,`
5965    `),t(),e(374,`
5966    `),n(375,"p",4),e(376,`
5967        None of these is visible by eye \u2014 they are units, specificity, DOM attributes and one
5968        dereference. So the ones that can be shown are shown: the scale is probed in \xA71, the two
5969        colour findings are rendered broken beside fixed below, and the rest are read off a live
5970        component in \xA73.
5971    `),t(),e(377,`
5972    `),n(378,"div",21),e(379,`
5973        `),n(380,"table",12),e(381,`
5974            `),n(382,"thead"),e(383,`
5975                `),n(384,"tr"),e(385,`
5976                    `),n(386,"th",29),e(387,"Bug"),t(),e(388,`
5977                    `),n(389,"th",23),e(390,"Kind"),t(),e(391,`
5978                    `),n(392,"th",23),e(393,"Accessibility"),t(),e(394,`
5979                    `),n(395,"th",24),e(396,"Origin"),t(),e(397,`
5980                    `),n(398,"th"),e(399,"What was wrong"),t(),e(400,`
5981                    `),n(401,"th"),e(402,"What it is now"),t(),e(403,`
5982                    `),n(404,"th",24),e(405,"Demo"),t(),e(406,`
5983                `),t(),e(407,`
5984            `),t(),e(408,`
5985            `),n(409,"tbody"),e(410,`
5986                `),S(411,Rp,40,9,null,null,Zl),t(),e(413,`
5987        `),t(),e(414,`
5988    `),t(),e(415,`
5989
5990    `),n(416,"h4",30),e(417,"The two colour findings, rendered"),t(),e(418,`
5991    `),n(419,"p",4),e(420,`
5992        Both are cases of initials that were not merely low-contrast but absent. Each pair below is
5993        the broken pairing reconstructed inline beside the shipping one, and every ratio is read off
5994        the rendered element with `),n(421,"code"),e(422,"getComputedStyle"),t(),e(423,`.
5995    `),t(),e(424,`
5996    `),n(425,"div",31),e(426,`
5997        `),n(427,"div",32),e(428,`
5998            `),n(429,"p",9),e(430,"The second copy of the palette"),t(),e(431,`
5999            `),n(432,"p",33),e(433,`
6000                A `),n(434,"code"),e(435,"div.userN"),t(),e(436,` got the fill and no foreground, so it inherited
6001                `),n(437,"code"),e(438,"--base-text"),t(),e(439,` \u2014 dark text on the dark half of the palette. The
6002                fixed one is a real `),n(440,"code"),e(441,"<app-user-initials>"),t(),e(442,`, which reaches the global
6003                rule because that rule is written `),n(443,"code"),e(444,"span.user-initials"),t(),e(445,`.
6004            `),t(),e(446,`
6005            `),n(447,"div",34),e(448,`
6006                `),n(449,"div",35),e(450,`
6007                    `),n(451,"div",36,0),e(453,"AB"),t(),e(454,`
6008                    `),n(455,"div",37),e(456,`
6009                        `),n(457,"span",38),e(458),L(459,"number"),t(),e(460,`
6010                        `),n(461,"span",39),e(462,"was: div.userN"),t(),e(463,`
6011                    `),t(),e(464,`
6012                `),t(),e(465,`
6013                `),n(466,"div",35),e(467,`
6014                    `),c(468,"app-user-initials",40,0),e(470,`
6015                    `),n(471,"div",37),e(472,`
6016                        `),n(473,"span"),e(474),L(475,"number"),t(),e(476,`
6017                        `),n(477,"span",39),e(478,"now: app-user-initials"),t(),e(479,`
6018                    `),t(),e(480,`
6019                `),t(),e(481,`
6020            `),t(),e(482,`
6021        `),t(),e(483,`
6022        `),n(484,"div",32),e(485,`
6023            `),n(486,"p",9),e(487,"The no-id avatar"),t(),e(488,`
6024            `),n(489,"p",33),e(490,`
6025                A user with no usable id fell through to `),n(491,"code"),e(492,"--grey-200"),t(),e(493,`, a near-white, under
6026                the shared translucent white. `),n(494,"code"),e(495,"--user-avatar-none"),t(),e(496," is "),n(497,"code"),e(498,"#D1D1D1"),t(),e(499,`
6027                now \u2014 neutral so it does not read as an eleventh person colour, and paired with
6028                `),n(500,"code"),e(501,"--user-avatar-text-on-light"),t(),e(502,` rather than the shared white, because white
6029                on a light grey is the failure being fixed. Matched to the mobile client, which
6030                renders the same grey.
6031            `),t(),e(503,`
6032            `),n(504,"div",34),e(505,`
6033                `),n(506,"div",35),e(507,`
6034                    `),n(508,"div",41,0),e(510,"AB"),t(),e(511,`
6035                    `),n(512,"div",37),e(513,`
6036                        `),n(514,"span",38),e(515),L(516,"number"),t(),e(517,`
6037                        `),n(518,"span",39),e(519,"was: --grey-200"),t(),e(520,`
6038                    `),t(),e(521,`
6039                `),t(),e(522,`
6040                `),n(523,"div",35),e(524,`
6041                    `),c(525,"app-user-initials",42,0),e(527,`
6042                    `),n(528,"div",37),e(529,`
6043                        `),n(530,"span"),e(531),L(532,"number"),t(),e(533,`
6044                        `),n(534,"span",39),e(535,"now: --user-avatar-none"),t(),e(536,`
6045                    `),t(),e(537,`
6046                `),t(),e(538,`
6047            `),t(),e(539,`
6048        `),t(),e(540,`
6049    `),t(),e(541,`
6050    `),n(542,"p",43),e(543,`
6051        The left-hand sample in each pair carries the shipping fill and the broken foreground
6052        inline; the classes and the global CSS underneath are otherwise the real ones.
6053        `),n(544,"strong"),e(545,"Neither number on the right is a pass mark"),t(),e(546,` \u2014 contrast on decorative
6054        text has no threshold to clear, and the right-hand pairing is not trying to reach one. The
6055        comparison is `),n(547,"em"),e(548,"invisible"),t(),e(549," against "),n(550,"em"),e(551,"visible"),t(),e(552,`: what made these two bugs is that
6056        the initials could not be seen at all, which no exemption covers.
6057    `),t(),e(553,`
6058`),t(),e(554,`
6059
6060`),n(555,"div",44),e(556,`
6061    `),n(557,"h3"),e(558,"3. Probed off a live component"),t(),e(559,`
6062    `),n(560,"app-sg-caption",8),e(561,"a real app-player-profile-photo, mounted on this page"),t(),e(562,`
6063    `),n(563,"p",4),e(564,`
6064        The avatar below is a real
6065        `),n(565,"code"),e(566,'<app-player-profile-photo [editable]="true">'),t(),e(567,`, not a replica of its
6066        markup, and every row is read off it with `),n(568,"code"),e(569,"getComputedStyle"),t(),e(570,` and
6067        `),n(571,"code"),e(572,"getAttribute"),t(),e(573,". "),n(574,"strong"),e(575,"Revert any of these and a row turns red."),t(),e(576,` It is
6068        safe to mount because `),n(577,"code"),e(578,"initialsOnly"),t(),e(579,` is the default, which short-circuits
6069        `),n(580,"code"),e(581,"loadPhoto()"),t(),e(582,` before it makes a request \u2014 that is also why the sample shows
6070        initials rather than a photograph.
6071    `),t(),e(583,`
6072    `),n(584,"div",45),e(585,`
6073        `),n(586,"div",35),e(587,`
6074            `),n(588,"div",null,1),e(590,`
6075                `),c(591,"app-player-profile-photo",46),e(592,`
6076            `),t(),e(593,`
6077            `),n(594,"div",47),e(595,"the component alone"),t(),e(596,`
6078        `),t(),e(597,`
6079        `),n(598,"div",48),e(599,`
6080            `),c(600,"app-player-profile-photo",49),e(601,`
6081            `),n(602,"div",47),e(603,`
6082                inside `),n(604,"code"),e(605,".player-profile-header"),t(),e(606,`
6083            `),t(),e(607,`
6084        `),t(),e(608,`
6085        `),n(609,"div",35),e(610,`
6086            `),n(611,"span",null,2),e(613,`
6087                `),c(614,"app-user-initials",50),e(615,`
6088            `),t(),e(616,`
6089            `),n(617,"div",47),e(618,"no name, no icon"),t(),e(619,`
6090        `),t(),e(620,`
6091        `),n(621,"p",51),e(622,`
6092            The probed instance is deliberately the `),n(623,"strong"),e(624,"bare"),t(),e(625,` one. The
6093            `),n(626,"code"),e(627,".player-profile-header"),t(),e(628,` page selector supplies a centred 100px box and a
6094            `),n(629,"code"),e(630,"position: relative"),t(),e(631,` of its own, so probing the wrapped instance would pass
6095            even if the component stopped declaring its own positioning context.
6096        `),t(),e(632,`
6097    `),t(),e(633,`
6098    `),n(634,"div",21),e(635,`
6099        `),n(636,"table",22),e(637,`
6100            `),n(638,"thead"),e(639,`
6101                `),n(640,"tr"),e(641,`
6102                    `),n(642,"th",52),e(643,"What is probed"),t(),e(644,`
6103                    `),n(645,"th",53),e(646,"Must be"),t(),e(647,`
6104                    `),n(648,"th",54),e(649,"Reads"),t(),e(650,`
6105                    `),n(651,"th",15),e(652,"\xA0"),t(),e(653,`
6106                    `),n(654,"th"),e(655,"Why"),t(),e(656,`
6107                `),t(),e(657,`
6108            `),t(),e(658,`
6109            `),n(659,"tbody"),e(660,`
6110                `),S(661,zp,23,5,null,null,up),v(663,Up,10,0),t(),e(664,`
6111        `),t(),e(665,`
6112    `),t(),e(666,`
6113    `),n(667,"p",4),e(668,`
6114        `),n(669,"strong"),e(670),t(),e(671,` pass. The two rows marked
6115        `),n(672,"em"),e(673,"open bug"),t(),e(674,` are not assertions \u2014 they record the state of something still broken:
6116        `),n(675,"code"),e(676,"playerNumber"),t(),e(677," reaching nothing "),n(678,"em"),e(679,"is"),t(),e(680,` the dead input, and the camera badge
6117        holds its corner only because the component stylesheet happens to supply the positioning
6118        context the badge should declare itself. Both are in \xA74.
6119    `),t(),e(681,`
6120    `),n(682,"p",4),e(683,`
6121        Two things no probe can settle, and a person still has to: that `),n(684,"strong"),e(685,`Tab actually reaches
6122        the button`),t(),e(686,` and Enter or Space opens the options menu, and that the camera badge
6123        still looks pinned to the corner.
6124    `),t(),e(687,`
6125`),t(),e(688,`
6126
6127`),n(689,"div",55),e(690,`
6128    `),n(691,"h3"),e(692,"4. Bugs still open"),t(),e(693,`
6129    `),n(694,"app-sg-caption",8),e(695),t(),e(696,`
6130    `),n(697,"div",10),e(698,`
6131        `),S(699,Hp,9,3,null,null,Xn),S(701,Gp,2,1,null,null,Yn),n(703,"a",28),e(704,"what these mean"),t(),e(705,`
6132    `),t(),e(706,`
6133    `),n(707,"p",4),e(708,`
6134        Component-behaviour bugs rather than avatar-system ones, held for their own change. The
6135        first is the only one visible on screen today. `),n(709,"strong"),e(710,"All eight predate this change"),t(),e(711,`
6136        \u2014 none was introduced by it.
6137    `),t(),e(712,`
6138    `),n(713,"div",21),e(714,`
6139        `),n(715,"table",12),e(716,`
6140            `),n(717,"thead"),e(718,`
6141                `),n(719,"tr"),e(720,`
6142                    `),n(721,"th",29),e(722,"Bug"),t(),e(723,`
6143                    `),n(724,"th",23),e(725,"Kind"),t(),e(726,`
6144                    `),n(727,"th",23),e(728,"Accessibility"),t(),e(729,`
6145                    `),n(730,"th"),e(731,"What is wrong"),t(),e(732,`
6146                    `),n(733,"th"),e(734,"What it should be"),t(),e(735,`
6147                    `),n(736,"th",24),e(737,"Demo"),t(),e(738,`
6148                `),t(),e(739,`
6149            `),t(),e(740,`
6150            `),n(741,"tbody"),e(742,`
6151                `),S(743,Zp,34,8,null,null,Zl),t(),e(745,`
6152        `),t(),e(746,`
6153    `),t(),e(747,`
6154
6155    `),n(748,"div",56),e(749,`
6156        `),n(750,"div",57),e(751,`
6157            `),n(752,"p",9),e(753,"An editable avatar with no "),n(754,"code"),e(755,"playerID"),t()(),e(756,`
6158            `),n(757,"p",33),e(758,`
6159                Both samples are the same component with the same inputs; the right-hand one is
6160                passed a player object with no `),n(759,"code"),e(760,"playerID"),t(),e(761,". It renders "),n(762,"strong"),e(763,`nothing
6161                \u2014 not the avatar, not the skeleton`),t(),e(764,`, because the inner guard drops the
6162                avatar while the `),n(765,"code"),e(766,"@else"),t(),e(767,` skeleton belongs to the outer condition. The
6163                dashed box marks where it should be.
6164            `),t(),e(768,`
6165            `),n(769,"div",58),e(770,`
6166                `),n(771,"div",35),e(772,`
6167                    `),c(773,"app-player-profile-photo",59),e(774,`
6168                    `),n(775,"div",47),e(776,"with playerID"),t(),e(777,`
6169                `),t(),e(778,`
6170                `),n(779,"div",35),e(780,`
6171                    `),n(781,"div",60),e(782,`
6172                        `),c(783,"app-player-profile-photo",59),e(784,`
6173                    `),t(),e(785,`
6174                    `),n(786,"div",61),e(787,"without playerID"),t(),e(788,`
6175                `),t(),e(789,`
6176            `),t(),e(790,`
6177        `),t(),e(791,`
6178        `),n(792,"div",62),e(793,`
6179            `),n(794,"p",9),e(795,"Square, two ways"),t(),e(796,`
6180            `),n(797,"p",33),e(798,`
6181                `),n(799,"code"),e(800,'[showCircle]="false"'),t(),e(801," sets "),n(802,"code"),e(803,"border-radius: 4px"),t(),e(804,`. A
6182                `),n(805,"code"),e(806,".player-profile-header"),t(),e(807," page rule resets it to "),n(808,"code"),e(809,"unset"),t(),e(810,`, so
6183                the same input renders soft-cornered in most places and hard-cornered inside that
6184                container. Both below are the same component with the same input.
6185            `),t(),e(811,`
6186            `),n(812,"div",58),e(813,`
6187                `),n(814,"div",35),e(815,`
6188                    `),c(816,"app-user-initials",63),e(817,`
6189                    `),n(818,"div",47),e(819,"4px"),t(),e(820,`
6190                `),t(),e(821,`
6191                `),n(822,"div",48),e(823,`
6192                    `),n(824,"div",64),e(825,`
6193                        `),c(826,"app-user-initials",63),e(827,`
6194                    `),t(),e(828,`
6195                    `),n(829,"div",47),e(830,`
6196                        inside `),n(831,"code"),e(832,".player-profile-header"),t(),e(833,`
6197                    `),t(),e(834,`
6198                `),t(),e(835,`
6199            `),t(),e(836,`
6200        `),t(),e(837,`
6201    `),t(),e(838,`
6202`),t(),e(839,`
6203`)),s&2&&(i(7),f(" (",o.initialsCallSites,` call sites) draws initials or an
6204    icon and picks its fill from the last digit of `),i(6),f(" (",o.photoCallSites,`) loads a photo, falls back
6205    to a club logo, falls back to the first one, and owns upload, cropping and the skeleton.
6206    `),i(16),m("routerLink","/admin/styleguide/global/color"),i(19),p(o.snapshotDate),i(15),q("",o.fixed.length+o.open.length," findings \xB7 ",o.needsOperating," that cannot be verified by looking"),i(22),E(o.allTally),i(30),E(o.kindLegend),i(10),E(o.allReachTally),i(30),E(o.reachLegend),i(11),q("",o.preExisting," of the ",o.fixed.length+o.open.length,` findings predate this
6207        change.`),i(),f(" ",o.introduced.length,` were created by it and fixed inside it \u2014
6208        both are marked `),i(11),q("",o.fixedNeedsOperating," of the ",o.fixed.length,` fixed
6209        findings need operating rather than looking at`),i(53),E(o.sizes),i(28),E(o.sizes),i(33),E(o.sizes),i(44),E(o.scaleProbe),i(8),q("",o.scaleHolds," of ",o.scaleProbe.length),i(19),q("",o.fixed.length," findings \xB7 ",o.demoedFixed," demonstrated on this page"),i(4),E(o.fixedTally),i(2),E(o.reachTally(o.fixed)),i(42),E(o.fixed),i(47),f("",G(459,39,o.paletteCopy[0]==null?null:o.paletteCopy[0].ratio,"1.2-2"),":1"),i(10),m("id",6),i(6),f("",G(475,42,o.paletteCopy[1]==null?null:o.paletteCopy[1].ratio,"1.2-2"),":1"),i(41),f("",G(516,45,o.noId[0]==null?null:o.noId[0].ratio,"1.2-2"),":1"),i(10),m("id",0),i(6),f("",G(532,48,o.noId[1]==null?null:o.noId[1].ratio,"1.2-2"),":1"),i(60),m("player",o.samplePlayer)("editable",!0),i(9),m("player",o.samplePlayer)("editable",!0),i(14),m("id",4),i(47),E(o.probes),i(2),y(o.probes.length?-1:663),i(7),q("",o.probesPassing," of ",o.probesAsserted),i(25),q("",o.open.length," findings \xB7 ",o.demoedOpen," demonstrated on this page"),i(4),E(o.openTally),i(2),E(o.reachTally(o.open)),i(42),E(o.open),i(30),m("player",o.samplePlayer)("editable",!0),i(10),m("player",o.playerWithoutId)("editable",!0),i(33),m("id",7)("showCircle",!1),i(10),m("id",7)("showCircle",!1))},dependencies:[$,J,We,Co,X,Ye],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var _e=a=>({$implicit:a}),sx=()=>["/admin/styleguide/components/cards"],dx=(a,r)=>r.cls,t0=(a,r)=>r.where,wt=(a,r)=>r.name,mx=(a,r)=>
6209r.src,Ji=(a,r)=>r.ratio,n0=(a,r)=>r.team;function cx(a,r){a&1&&(e(0," "),n(1,"strong"),e(2,"yes"),t(),e(3," \u2014 compound "))}function px(a,r){a&1&&(e(0," "),n(1,"em"),e(2,"it is the base"),t(),e(3," "))}function xx(a,r){a&1&&e(0," no \u2014 standalone ")}function hx(a,r){if(a&1&&(e(0,`
6210                            `),n(1,"strong",13),e(2),t(),e(3,`
6211                            `),n(4,"div",28),e(5),t(),e(6,`
6212                        `)),a&2){let l=u().$implicit;i(2),f("",l.withoutCard,"\xD7"),i(3),f("vs ",l.withCard,"\xD7 with")}}function ux(a,r){if(a&1&&(e(0,`
6213                            never
6214                            `),n(1,"div",28),e(2),t(),e(3,`
6215                        `)),a&2){let l=u().$implicit;i(2),f("",l.withCard,"\xD7, all with")}}function gx(a,r){if(a&1&&(e(0,`
6216                `),n(1,"tr"),e(2,`
6217                    `),n(3,"td"),e(4,`
6218                        `),n(5,"code"),e(6),t(),e(7,`
6219                        `),n(8,"div",28),e(9),t(),e(10,`
6220                    `),t(),e(11,`
6221                    `),n(12,"td"),e(13,`
6222                        `),v(14,cx,4,0)(15,px,4,0)(16,xx,1,0),e(17,`
6223                    `),t(),e(18,`
6224                    `),n(19,"td"),e(20,`
6225                        `),v(21,hx,7,2)(22,ux,4,1),t(),e(23,`
6226                    `),n(24,"td")(25,"code"),e(26),t()(),e(27,`
6227                    `),n(28,"td"),e(29),t(),e(30,`
6228                `),t(),e(31,`
6229            `)),a&2){let l,d=r.$implicit;i(6),p(d.cls),i(3),f("",d.files," files"),i(5),y((l=d.needsCard)==="yes"?14:l==="base"?15:16),i(7),y(d.withoutCard?21:22),i(5),p(d.scss),i(3),p(d.effect)}}function fx(a,r){if(a&1&&(e(0,`
6230                        `),n(1,"li"),e(2),t(),e(3,`
6231                    `)),a&2){let l=r.$implicit;i(2),p(l)}}function bx(a,r){if(a&1&&(e(0,`
6232                        `),n(1,"li"),e(2),t(),e(3,`
6233                    `)),a&2){let l=r.$implicit;i(2),p(l)}}function Sx(a,r){if(a&1&&(e(0,`
6234                `),n(1,"tr"),e(2,`
6235                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
6236                    `),n(7,"td")(8,"code"),e(9),t()(),e(10,`
6237                    `),n(11,"td")(12,"code"),e(13),t()(),e(14,`
6238                    `),n(15,"td"),e(16),t(),e(17,`
6239                `),t(),e(18,`
6240            `)),a&2){let l=r.$implicit;i(5),p(l.name),i(4),p(l.type),i(4),p(l.fallback),i(3),p(l.note)}}function Ex(a,r){if(a&1&&(e(0,`
6241                `),n(1,"tr"),e(2,`
6242                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
6243                    `),n(7,"td")(8,"code"),e(9),t()(),e(10,`
6244                    `),n(11,"td")(12,"code"),e(13),t()(),e(14,`
6245                    `),n(15,"td"),e(16),t(),e(17,`
6246                `),t(),e(18,`
6247            `)),a&2){let l=r.$implicit;i(5),f("(",l.name,")"),i(4),p(l.type),i(4),p(l.fallback),i(3),p(l.note)}}function vx(a,r){a&1&&(e(0,`
6248                `),n(1,"tr"),e(2,`
6249                    `),n(3,"td",136),e(4,"No outputs."),t(),e(5,`
6250                `),t(),e(6,`
6251            `))}function yx(a,r){if(a&1&&(e(0,`
6252    `),n(1,"h4",128),e(2),t(),e(3,`
6253    `),n(4,"div",129),e(5,`
6254        `),c(6,"app-pill",130),e(7,`
6255        `),n(8,"span"),e(9),t(),e(10,`
6256        \xB7
6257        `),n(11,"span"),e(12),t(),e(13,`
6258        \xB7
6259        `),n(14,"span"),e(15,"root "),n(16,"code"),e(17),t()(),e(18,`
6260        \xB7
6261        `),n(19,"span")(20,"code"),e(21),t()(),e(22,`
6262    `),t(),e(23,`
6263    `),n(24,"p",131),e(25),t(),e(26,`
6264
6265    `),n(27,"div",5),e(28,`
6266        `),n(29,"div",6),e(30,`
6267            `),n(31,"div",3),e(32,`
6268                `),n(33,"strong",132),e(34,"Reach for it when"),t(),e(35,`
6269                `),n(36,"ul",133),e(37,`
6270                    `),S(38,fx,4,1,null,null,K),t(),e(40,`
6271            `),t(),e(41,`
6272        `),t(),e(42,`
6273        `),n(43,"div",6),e(44,`
6274            `),n(45,"div",3),e(46,`
6275                `),n(47,"strong",13),e(48,"Reach for something else when"),t(),e(49,`
6276                `),n(50,"ul",133),e(51,`
6277                    `),S(52,bx,4,1,null,null,K),t(),e(54,`
6278            `),t(),e(55,`
6279        `),t(),e(56,`
6280    `),t(),e(57,`
6281
6282    `),n(58,"table",134),e(59,`
6283        `),n(60,"thead"),e(61,`
6284            `),n(62,"tr"),e(63,`
6285                `),n(64,"th",12),e(65,"Input"),t(),e(66,`
6286                `),n(67,"th",12),e(68,"Type"),t(),e(69,`
6287                `),n(70,"th",135),e(71,"Default"),t(),e(72,`
6288                `),n(73,"th"),e(74,"Notes"),t(),e(75,`
6289            `),t(),e(76,`
6290        `),t(),e(77,`
6291        `),n(78,"tbody"),e(79,`
6292            `),S(80,Sx,19,4,null,null,wt),S(82,Ex,19,4,null,null,wt),v(84,vx,7,0),t(),e(85,`
6293    `),t(),e(86,`
6294`)),a&2){let l=r.$implicit;i(2),f("<",l.selector,">"),i(4),m("status",l.side==="admin"?"secondary":l.side==="member"?"primary":"black")("text",l.side),i(3),q("",l.files," ",l.files===1?"file":"files"),i(3),p(l.kind==="complete"?"complete card":l.kind==="content"?"card content":"not a card"),i(5),p(l.root),i(4),p(l.location),i(4),p(l.what),i(13),E(l.reachFor),i(14),E(l.avoid),i(28),E(l.inputs),i(2),E(l.outputs),i(2),y(l.outputs.length?-1:84)}}function wx(a,r){a&1&&de(0)}function Cx(a,r){if(a&1&&(e(0,`
6295                `),n(1,"div",137),e(2,`
6296                    `),c(3,"app-null-card",138),e(4,`
6297                `),t(),e(5,`
6298            `)),a&2){let l=r.$implicit;i(3),m("image",l)("text",l)}}function _x(a,r){a&1&&de(0)}function kx(a,r){a&1&&de(0)}function Tx(a,r){a&1&&de(0)}function Ix(a,r){a&1&&de(0)}function Mx(a,r){a&1&&de(0)}function Dx(a,r){a&1&&de(0)}function Fx(a,r){a&1&&de(0)}function Px(a,r){if(a&1&&(e(0,`
6299                `),n(1,"tr"),e(2,`
6300                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
6301                    `),n(7,"td")(8,"code"),e(9),t()(),e(10,`
6302                `),t(),e(11,`
6303            `)),a&2){let l=r.$implicit;i(5),p(l.where),i(2),j("text-red",!l.ok),i(2),p(l.value)}}function Ax(a,r){if(a&1&&(e(0,`
6304                `),n(1,"tr"),e(2,`
6305                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
6306                    `),n(7,"td")(8,"code"),e(9),t()(),e(10,`
6307                `),t(),e(11,`
6308            `)),a&2){let l=r.$implicit;i(5),p(l.where),i(2),j("text-red",!l.ok),i(2),p(l.value)}}function Ox(a,r){a&1&&de(0)}function Nx(a,r){a&1&&(e(0,`
6309                                `),c(1,"app-pill",153),e(2,`
6310                            `))}function Bx(a,r){if(a&1&&(e(0,`
6311                                `),c(1,"i",154),e(2)),a&2){let l=u().$implicit;i(2),f("",l.teams,`
6312                            `)}}function Wx(a,r){if(a&1){let l=B();e(0,`
6313            `),n(1,"app-teaser-card",139),e(2,`
6314                `),n(3,"div",140),e(4,`
6315                    `),n(5,"div",141),e(6,`
6316                        `),n(7,"div",142),e(8),v(9,Nx,3,0),t(),e(10,`
6317                        `),n(11,"div",143),e(12,`
6318                            `),n(13,"a",85),e(14),t(),e(15,`
6319                        `),t(),e(16,`
6320                    `),t(),e(17,`
6321                    `),n(18,"div",144),e(19,`
6322                        `),n(20,"span",145),e(21,`
6323                            `),c(22,"i",146),e(23),t(),e(24,`
6324                        `),n(25,"span",147),e(26,`
6325                            `),v(27,Bx,3,1),t(),e(28,`
6326                        `),n(29,"div",148),e(30,`
6327                            `),c(31,"i",149),e(32),t(),e(33,`
6328                        `),n(34,"div",148),e(35,`
6329                            `),n(36,"button",150),g("click",function(){w(l);let s=u();return C(s.onAction("teaser-card row options"))}),e(37,`
6330                                `),c(38,"i",151),e(39,`
6331                                `),n(40,"div",152),e(41,"Options"),t(),e(42,`
6332                            `),t(),e(43,`
6333                        `),t(),e(44,`
6334                    `),t(),e(45,`
6335                `),t(),e(46,`
6336            `),t(),e(47,`
6337        `)}if(a&2){let l=r.$implicit;i(),m("image",l.image),i(7),f(`
6338                            `,l.meta,`
6339                            `),i(),y(l.image?-1:9),i(4),m("routerLink","/admin/styleguide/components/cards"),i(),p(l.name),i(9),f("",l.dates,`
6340                        `),i(4),y(l.teams!==null?27:-1),i(5),f("",l.registrations,`
6341                        `)}}function Rx(a,r){if(a&1&&(e(0,`
6342            `),n(1,"app-teaser-card",139),e(2,`
6343                `),n(3,"div",3),e(4),t(),e(5,`
6344            `),t(),e(6,`
6345        `)),a&2){let l=r.$implicit;i(),m("image",l.src),i(3),p(l.label)}}function Lx(a,r){if(a&1&&(e(0,`
6346                    `),n(1,"tr")(2,"td")(3,"code"),e(4),t()(),n(5,"td")(6,"code"),e(7),t()(),n(8,"td"),e(9),t()(),e(10,`
6347                `)),a&2){let l=r.$implicit;i(4),p(l.ratio),i(3),p(l.floor),i(2),p(l.note)}}function qx(a,r){if(a&1&&(e(0,`
6348            `),n(1,"app-sg-caption",7),e(2),t(),e(3,`
6349            `),n(4,"app-teaser-card",155),e(5,`
6350                `),n(6,"div",3),e(7,"One line of body \u2014 well under every floor."),t(),e(8,`
6351            `),t(),e(9,`
6352        `)),a&2){let l=r.$implicit,d=u();i(2),q('aspectRatio="',l.ratio,'" \u2192 floor ',l.floor),i(2),m("image",d.teaserImg.fourThree)("aspectRatio",l.ratio)}}function Vx(a,r){if(a&1&&(e(0,`
6353            `),n(1,"app-teaser-card",155),e(2,`
6354                `),n(3,"div",3),e(4),c(5,"br"),e(6,`
6355                    Three lines of body content.`),c(7,"br"),e(8,`
6356                    All three cards should now be the `),n(9,"em"),e(10,"same"),t(),e(11,` height as each other \u2014 the floor stopped mattering.
6357                `),t(),e(12,`
6358            `),t(),e(13,`
6359        `)),a&2){let l=r.$implicit,d=u();i(),m("image",d.teaserImg.fourThree)("aspectRatio",l.ratio),i(3),q(`
6360                    aspectRatio="`,l.ratio,'", floor ',l.floor,".")}}function zx(a,r){if(a&1&&(e(0,`
6361            `),n(1,"app-sg-caption",7),e(2),t(),e(3,`
6362            `),n(4,"app-teaser-card",156),e(5,`
6363                `),n(6,"div",3),e(7),t(),e(8,`
6364            `),t(),e(9,`
6365        `)),a&2){let l=r.$implicit,d=u();i(2),f('imageWidth="',l,'"'),i(2),m("image",d.teaserImg.fourThree)("imageWidth",l),i(3),f("Rail ",l," wide.")}}function Ux(a,r){if(a&1){let l=B();e(0,`
6366                                    `),n(1,"app-pill",163),g("onIconClick",function(){w(l);let s=u(3);return C(s.onAction("list-row-item-fluid chip remove"))}),e(2),n(3,"span",164),e(4),t(),e(5,`
6367                                    `),t(),e(6,`
6368                                `)}if(a&2){let l=r.$implicit,d=u(2).$implicit;i(),m("status",l.head?"black":"secondary")("nowrap",!0)("iconClickable",!0)("iconAriaLabel","Remove "+l.team+" from "+d.name),i(),f("",l.head?"Head Coach":"Assistant Coach",`
6369                                        \u2022 `),i(2),p(l.team)}}function Hx(a,r){if(a&1&&(e(0,`
6370                                `),S(1,Ux,7,6,null,null,n0)),a&2){let l=u().$implicit;i(),E(l.chips)}}function jx(a,r){a&1&&(e(0,`
6371                                `),n(1,"em",165),e(2,"Not assigned to any team"),t(),e(3,`
6372                            `))}function Gx(a,r){if(a&1){let l=B();e(0,`
6373            `),n(1,"div",157),e(2,`
6374                `),n(3,"div",140),e(4,`
6375                    `),n(5,"div",141),e(6,`
6376                        `),n(7,"div",158),e(8),t(),e(9,`
6377                        `),n(10,"div",142),e(11),t(),e(12,`
6378                    `),t(),e(13,`
6379                    `),n(14,"div",159),e(15,`
6380                        `),n(16,"div",160),e(17,`
6381                            `),v(18,Hx,3,0)(19,jx,4,0),t(),e(20,`
6382                        `),n(21,"div",161),e(22,`
6383                            `),n(23,"button",101),g("click",function(){w(l);let s=u();return C(s.onAction("list-row-item-fluid row action"))}),e(24,`
6384                                `),c(25,"i",162),e(26,`Assign to team
6385                            `),t(),e(27,`
6386                        `),t(),e(28,`
6387                    `),t(),e(29,`
6388                `),t(),e(30,`
6389            `),t(),e(31,`
6390        `)}if(a&2){let l=r.$implicit;i(8),p(l.name),i(3),p(l.role),i(7),y(l.chips.length?18:19)}}function $x(a,r){if(a&1){let l=B();e(0,`
6391                                    `),n(1,"app-pill",163),g("onIconClick",function(){w(l);let s=u(3);return C(s.onAction("list-row-item-fluid chip remove"))}),e(2),n(3,"span",164),e(4),t(),e(5,`
6392                                    `),t(),e(6,`
6393                                `)}if(a&2){let l=r.$implicit,d=u(2).$implicit;i(),m("status",l.head?"black":"secondary")("nowrap",!0)("iconClickable",!0)("iconAriaLabel","Remove "+l.team+" from "+d.name),i(),f("",l.head?"Head Coach":"Assistant Coach",`
6394                                        \u2022 `),i(2),p(l.team)}}function Kx(a,r){if(a&1&&(e(0,`
6395                                `),S(1,$x,7,6,null,null,n0)),a&2){let l=u().$implicit;i(),E(l.chips)}}function Xx(a,r){a&1&&(e(0,`
6396                                `),n(1,"em",165),e(2,"Not assigned to any team"),t(),e(3,`
6397                            `))}function Yx(a,r){if(a&1){let l=B();e(0,`
6398            `),n(1,"div",157),e(2,`
6399                `),n(3,"div",166),e(4,`
6400                    `),n(5,"div",141),e(6,`
6401                        `),n(7,"div",158),e(8),t(),e(9,`
6402                        `),n(10,"div",142),e(11),t(),e(12,`
6403                    `),t(),e(13,`
6404                    `),n(14,"div",159),e(15,`
6405                        `),n(16,"div",167),e(17,`
6406                            `),v(18,Kx,3,0)(19,Xx,4,0),t(),e(20,`
6407                        `),n(21,"div",161),e(22,`
6408                            `),n(23,"button",101),g("click",function(){w(l);let s=u();return C(s.onAction("list-row--fixed-body row action"))}),e(24,`
6409                                `),c(25,"i",162),e(26,`Assign to team
6410                            `),t(),e(27,`
6411                        `),t(),e(28,`
6412                    `),t(),e(29,`
6413                `),t(),e(30,`
6414            `),t(),e(31,`
6415        `)}if(a&2){let l=r.$implicit;i(8),p(l.name),i(3),p(l.role),i(7),y(l.chips.length?18:19)}}var i0=(()=>{let r=class r{onSettingsClick(){this.lastAction="settings"}onAction(d){this.lastAction=d}constructor(d){this.siteDataService=d,this.snapshotDate="2026-08-20",this.liveLoading=!1,this.liveError=!1,this.lastAction="none yet",this.imageType=Vi,this.imageTypeList=Object.values(Vi),this.calendarEventType=Ma,this.flavors=[{cls:"horizontal-form",files:77,scss:"2_layout/forms.scss:345",needsCard:"no",withCard:41,withoutCard:75,effect:"Labels flex to 30% so form rows read side-by-side. NOT A CARD CLASS \u2014 it is form layout, used off-card more often than on it. It is listed here only because 41 cards do carry it."},{cls:"edit-card",files:47,scss:"3_modules/components.scss:163",needsCard:"no",withCard:75,withoutCard:3,effect:"6px grey accent bar on top; flex card-header; styles field-view-only-row children."},{cls:"settings-card",files:37,scss:"3_modules/components.scss:233",needsCard:"no",withCard:62,withoutCard:0,effect:"Same 6px accent bar as edit-card, without the field-row styling."},{cls:"team-card",files:13,scss:"3_modules/admin.scss:700",needsCard:"no",withCard:15,withoutCard:0,effect:"padding: 0, grey filled header, tighter slot padding. Hardcodes an 8px header radius."},{cls:"table-card",files:12,scss:"3_modules/components.scss:66",needsCard:"base",withCard:18,withoutCard:0,effect:"Sibling of .card, not a modifier \u2014 see section 6. Works standalone."},{cls:"admin-card",files:6,scss:"3_modules/admin.scss:485",needsCard:"no",withCard:13,withoutCard:0,effect:"Bordered, full-bleed flex header with a smaller uppercase heading."}
6415,{cls:"dashboard-card",files:5,scss:"3_modules/components.scss:78",needsCard:"yes",withCard:6,withoutCard:0,effect:"1.5rem bottom margin, larger labels, and a hardcoded shadow \u2014 see section 7."},{cls:"clickable-card",files:4,scss:"3_modules/components.scss:99",needsCard:"yes",withCard:7,withoutCard:0,effect:"cursor: pointer plus a grey hover fill. The sanctioned click affordance."},{cls:"blog-card",files:3,scss:"3_modules/components.scss:225",needsCard:"no",withCard:5,withoutCard:0,effect:"padding: 0 and a hardcoded 4px radius."},{cls:"video-card",files:2,scss:"3_modules/components.scss:229",needsCard:"no",withCard:1,withoutCard:1,effect:"padding: 0, keeps the base overflow: hidden for embed clipping."},{cls:"filters-card",files:1,scss:"3_modules/components.scss:242",needsCard:"no",withCard:1,withoutCard:0,effect:"max-width: 325px. Nothing else."},{cls:"card-print",files:1,scss:"3_modules/components.scss:89",needsCard:"yes",withCard:3,withoutCard:0,effect:"Print-only: drops border, radius and padding; break-inside: avoid."}],this.nullCardDoc={selector:"app-null-card",kind:"complete",files:28,root:"<div [class.card]>",location:"components/cards/null-card/",side:"shared",what:"The standard empty state: an illustration, a message, and an optional call to action.",reachFor:["a list, table or panel has no rows yet","a filter returned nothing","a feature is not configured yet and you want to point at the thing that configures it"],avoid:['the emptiness is an error \u2014 use app-inline-alert. An empty state reads as "normal, nothing here yet".','you only need one line of grey text inside a card you already have \u2014 set [showCard]="false", or skip the component.'],inputs:[{name:"text",type:"string",fallback:"\u2014",note:"The message. Runs through the safeHtml pipe, so inline markup is allowed."},{name:"image",type:"ImageType | string",fallback:"FLAG",note:"Named illustration. Anything unrecognized silently falls back to the flag."},{name:"showCard",type:"boolean",fallback:"true",note:"false drops the .card wrapper, leaving illustration and text bare for nesting inside a card you already have."},{name:"showButton",type:"boolean",fallback:"false",note:"Reveals the CTA button. Nothing else renders it."},{name:"buttonText",type:"string",fallback:"'New'",note:"CTA label."},{name:"buttonIcon",type:"string",fallback:"''",note:"Font Awesome classes, e.g. fa-regular fa-plus. Omit for a text-only button."},{name:"styleClass",type:"string",fallback:"''",note:"Extra classes on the root element."}],outputs:[{name:"buttonClicked",type:"EventEmitter<void>",fallback:"\u2014",note:"Fires on the CTA. Only reachable while showButton is true."}]},this.userInfoCardDoc={selector:"app-user-info-view-only-card",kind:"complete",files:2,root:'<div class="card edit-card">',location:"components/cards/user-info-view-only-card/",side:"shared",what:"Renders dynamic-form field metadata as read-only label/value rows, with an optional Edit affordance in the header.",reachFor:["you already have DynamicFormField[] metadata plus an entity, and want the read view of it","a profile summary panel that hands off to a real form elsewhere"],avoid:['you are hand-writing the rows anyway \u2014 use class="card edit-card" with app-field-view-only-row directly.',"the values should be editable in place. This card never edits; it only emits (edit)."],inputs:[{name:"entity",type:"any",fallback:"\u2014",note:"The object values are read from. Each row reads entity[field.controlName]."},{name:"fields",type:"DynamicFormField[]",fallback:"\u2014",note:"Metadata. controlName and label are enough for a plain text row; required drives the missing-info highlight."},{name:"headerText",type:"string",fallback:"\u2014",note:"Card header heading."},{name:"isEditable",type:"boolean",fallback:"false",note:"Shows the Edit link in the header."}],outputs:[{name:"edit",type:"EventEmitter<any>",fallback:"\u2014",note:"Fires on the Edit link. The card does not change state \u2014 the host opens the form."}]},this.staffCardDoc={selector:"app-staff-card",kind:"complete",files:5,root:'<div class="staff-entry card">',location:"components/cards/staff-card/",side:"member",what:"A staff member: photo with club-logo fallback, name, title, and a contact block of profile-page, email, phone and bio-download links.",reachFor:["a public staff directory or coach listing"],avoid:["an admin-side people list \u2014 that is a table, not a card.","you have a bare user with no staffProfile. Everything below the name hangs off that object."],inputs:[{name:"clubUser",type:"ClubUser",fallback:"\u2014",note:"Required. Reads user.firstName / user.lastName, staffProgramAssignments, and the whole staffProfile sub-object \u2014 all unguarded."},{name:"clubLogoURL",type:"string",fallback:"\u2014",note:"Image fallback when staffProfile.profileImage is absent. Without it the photo column renders empty."}],outputs:[]},this.blogCardDoc={selector:"app-blog-card",kind:"complete",files:5,root:'<a class="card blog-card">',location:"components/cards/blog-card/",side:"member",what:"A blog post teaser for a grid: image, date, heading, excerpt.",reachFor:["a page-builder blog roll or a latest-news grid"],avoid:["anywhere keyboard access matters, until 7d is fixed \u2014 the root is an anchor with no href"],inputs:[{name:"blogTitle",type:"string",fallback:"\u2014",note:"Heading. Always rendered, even when empty."},{name:"blogExcerpt",type:"string",fallback:"\u2014",note:"Teaser text. Omitted entirely when falsy."},{name:"blogSavedOn",type:"Date | string",fallback:"\u2014",note:"Rendered MM.DD.YY. Omitted when falsy."},{name:"blogImage",type:"string",fallback:"\u2014",note:"Bound to [style.background-image], so it needs a full CSS value \u2014 url('\u2026'), not a bare path. A bare path silently renders nothing."},{name:"showClubLogo",type:"boolean",fallback:"false",note:"Pads and contains the image instead of cropping it \u2014 for a logo standing in for a missing hero."},{name:"fourByThreeRatio",type:"boolean",fallback:"false",note:"Forces a 3.97/3 aspect ratio on the image."},{name:"backgroundSize",type:"string",fallback:"\u2014",note:"CSS background-size override. Ignored while showClubLogo is true."}],outputs:[{name:"blogCardClick",type:"EventEmitter<void>",fallback:"\u2014",note:"The only way to navigate from this card. See 7d."}]},this.promoCardDoc={selector:"app-promo-card",kind:"not-a-card",files:12,root:'<div class="sprocket-promo-card">',location:"components/cards/promo-card/",side:"admin",what:"A full-width upsell interstitial: Premium Feature eyebrow, title, description, a checkbox feature list beside an optional screenshot, and a fixed contact-your-CSM footer.",reachFor:["a club navigated to a feature its plan does not include"],avoid:["anything inline \u2014 this is a whole-page takeover, not a panel.","you need a different call to action. The footer copy is hardcoded in the template."],inputs:[{name:"features",type:"string[]",fallback:"\u2014",note:"Required in practice \u2014 the template reads features.length unguarded, so omitting it throws. Pass [] for none. Each entry runs through safeHtml."},{name:"title",type:"string",fallback:"\u2014",note:"Heading plus the rule under it. Both omitted when falsy."},{name:"description",type:"string",fallback:"\u2014",note:"Centered lead paragraph, safeHtml."},{name:"image",type:"string",fallback:"\u2014",note:"Screenshot beside the feature list. Without it the list runs full width."},{name:"showPremiumFeature",type:"boolean",fallback:"true",note:"The Premium Feature eyebrow. On by default."}],outputs:[]},this.calendarCardDoc={selector:"app-calendar-card",kind:"not-a-card",files:8,root:'<div class="calendar-card"> \u2014 no .card',location:"components/cards/calendar-card/",side:"shared",what:"A date badge \u2014 weekday, day number, month \u2014 colour-coded by event type, stacking into two badges for a multi-day event.",reachFor:["the leading date column of an event, schedule or sign-up row"],avoid:["you expected card chrome. There is none \u2014 no border, shadow or padding from .card. It is a badge that happens to be named card."],inputs:[{name:"startDate",type:"Date",fallback:"\u2014",note:"Required. The date on the first badge."},{name:"endDate",type:"Date",fallback:"\u2014",note:"Required in practice \u2014 see the gotcha below. Equal to startDate for a single-day event; a later date adds the second badge and the connecting arrow."},{name:"clubEventTypeID",type:"CalendarEventType",fallback:"\u2014",note:"Drives the colour: GAME, PRACTICE, CLUB. Anything else renders the uncoloured default."},{name:"isDraft",type:"boolean",fallback:"false",note:"Adds the DRAFT r
6415ibbon and the muted treatment."}],outputs:[]},this.rosterCardDoc={selector:"app-roster-card-content",kind:"content",files:2,root:'<div class="row"> \u2014 no .card',location:"components/cards/roster-card-content/",side:"member",what:"The inside of a college-recruiting roster card: photo slot, name, committed badge, and a label/value row per enabled roster field. The consumer supplies the card.",reachFor:['a college-profile or recruiting roster grid \u2014 and wrap it yourself in <div class="roster-card card">, which is what both live consumers do'],avoid:["you expected it to be a card. It is not \u2014 it renders a bare .row and has no chrome of its own.","any other roster. Every row it renders is gated on CollegeProfileSettings.rosterFields, so it is specific to the college-profile feature."],inputs:[{name:"player",type:"RosterPlayer",fallback:"\u2014",note:"Required. The whole template is behind @if (player && collegeProfileSettings), so omitting it renders nothing rather than throwing \u2014 the best-guarded card component."},{name:"collegeProfileSettings",type:"CollegeProfileSettings",fallback:"\u2014",note:"Required. Its rosterFields drive which rows appear, via isColumnEnabled. No settings means no rows."},{name:"clubLogoURL",type:"string",fallback:"\u2014",note:"Photo-slot fallback when the player has no photo."},{name:"bgColor",type:"string",fallback:"'#003261'",note:"Committed-badge fill, fed from theme.colorPrimary. Format is #rrggbb \u2014 the # is part of the value. See defect 7g."},{name:"showProfileButton",type:"boolean",fallback:"false",note:"Reveals the View Profile button."},{name:"hideHeight",type:"boolean",fallback:"false",note:"DEAD \u2014 zero template references. Only the commented-out call site passes it."},{name:"hidePlayerCellPhone",type:"boolean",fallback:"false",note:"DEAD \u2014 zero template references; the cell-phone row is commented out. Only the commented-out call site passes it."}],outputs:[{name:"viewProfileButton",type:"EventEmitter<void>",fallback:"\u2014",note:"Fires from the View Profile button."}]},this.demoRosterPlayer={hasPhoto:!1,user:{firstName:"Priya",lastName:"Raghunathan"},playerClubData:{number:14,position:{name:"Midfielder"}},playerCollegeData:{school:"State University",gpa:3.82,height:68}},this.demoRosterSettings={rosterFields:[st.JERSEY_NUMBER,st.PRIMARY_POSITION,st.GPA,st.SCHOOL_COMMITTED_TO].map(s=>({rosterFieldID:s,zCollegeProfilePageRosterFieldID:s,displayValueForTeamPage:!0,displayValueForPlayerPage:!0,isDisabledInFieldOptions:!1,zCollegeProfilePageRosterField:{description:st[s].replace(/_/g," ")}}))},this.facilityCardDoc={selector:"app-facility-card",kind:"complete",files:1,root:"feature-local",location:"admin/club/practice-facility/facility-card/ \u2014 the only card component outside shared/",side:"admin",what:"A practice facility with its fields, statuses, and restore actions for soft-deleted rows.",reachFor:["nothing new \u2014 it is bound to the practice-facility feature and is not a general-purpose card"],avoid:["reuse. It takes a PracticeFacilityClubAssign and is declared in its own feature module, not ComponentsModule. Left in place by decision; listed here only so the inventory is complete."],inputs:[{name:"facility",type:"PracticeFacilityClubAssign",fallback:"\u2014",note:"Required."},{name:"isOpponentField",type:"boolean",fallback:"false",note:"Opponent-venue variant."},{name:"locationType",type:"string",fallback:"\u2014",note:"Label for the kind of location."},{name:"showRemovedFields",type:"boolean",fallback:"false",note:"Reveals soft-deleted fields with their restore affordance."}],outputs:[{name:"restoreEvent",type:"EventEmitter<void>",fallback:"\u2014",note:"Restore the whole facility."},{name:"restoreFieldEvent",type:"EventEmitter<{ practiceFacilityID, facilityFieldID }>",fallback:"\u2014",note:"Restore one field."}]},this.teaserCardDoc={selector:"app-teaser-card",kind:"complete",files:1,root:'<div class="card p-0">',location:"components/cards/teaser-card/",side:"shared",what:"A list row with a flush image rail down its left edge and whatever you project beside it. The chrome only \u2014 the row inside it is a separate CSS contract (list-row).",reachFor:["a scannable list of records where each row wants a thumbnail \u2014 programs, facilities, rosters","you want every row the same height regardless of what image was uploaded","the row content is yours to compose; this owns the card and the image, nothing else"],avoid:["the list wants column headers, sorting or frozen columns \u2014 that is p-table, and this contract deliberately has no headers.","there is no image. You get an empty grey rail; use a plain .card instead.","you need the image somewhere other than a left rail or a top banner \u2014 those are the only two shapes."],inputs:[{name:"image",type:"string | null",fallback:"\u2014",note:"Thumbn
6415ail src. Omit or pass null and the rail shows the --grey-200 placeholder rather than a broken image."},{name:"imageAlt",type:"string",fallback:"''",note:"Empty by default, which marks the image decorative and hides it from screen readers. Set it only when the image carries meaning the row text does not."},{name:"imageFit",type:"'cover' | 'contain'",fallback:"'cover'",note:"object-fit on the image. cover crops to fill the rail; contain letterboxes inside it."},{name:"aspectRatio",type:"string",fallback:"'4 / 3'",note:"Ratio of the rail, not of the file. With a rail width this sets a MINIMUM row height, which is what makes rows uniform. In banner mode it governs strictly."},{name:"imageWidth",type:"string",fallback:"'80px'",note:"Rail width at 768px and up. Any CSS length."},{name:"imageWidthMobile",type:"string",fallback:"'120px'",note:"Rail width below 768px. Ignored entirely when mobileFull is on."},{name:"mobileFull",type:"boolean",fallback:"false",note:"Below 768px, stack the card and run the image full width as a banner. UNVERIFIED \u2014 nothing in the app sets this."},{name:"styleClass",type:"string",fallback:"''",note:"Extra classes on the root .card."},{name:"link",type:"unknown[] | string | null",fallback:"\u2014",note:"Interactive mode. Covers the card with an <a [routerLink]> overlay. Wins over clickable. UNVERIFIED."},{name:"clickable",type:"boolean",fallback:"false",note:"Interactive mode. Covers the card with a <button> overlay that emits cardClick. UNVERIFIED."},{name:"(either mode)",type:"\u2014",fallback:"\u2014",note:"Setting link or clickable also adds .clickable-card to the root, for cursor: pointer and the grey hover fill. Overlay supplies semantics, class supplies look."},{name:"ariaLabel",type:"string",fallback:"''",note:"Accessible name for the overlay. REQUIRED whenever link or clickable is set \u2014 the overlay has no text of its own."}],outputs:[{name:"cardClick",type:"EventEmitter<void>",fallback:"\u2014",note:"Fires from the button overlay. Only reachable while clickable is true and link is unset."}]},this.teaserImg={square:"/assets/img/fpo-player-1.png",fourThree:"/assets/img/fpo-blog.png",wide:"/assets/img/fpo-box.png",veryWide:"/assets/img/team-snap-logo.png"},this.teaserNaturalRatios=[{src:"/assets/img/fpo-player-1.png",label:"203\xD7201 \u2014 natural 1.01"},{src:"/assets/img/fpo-box.png",label:"600\xD7300 \u2014 natural 2.00"},{src:"/assets/img/team-snap-logo.png",label:"1024\xD7225 \u2014 natural 4.55"}],this.teaserRatios=[{ratio:"16 / 9",floor:"45px",note:"shortest \u2014 body content decides the height here"},{ratio:"4 / 3",floor:"60px",note:"the default; ~8px of headroom over a two-line body"},{ratio:"1 / 1",floor:"80px",note:"roomiest \u2014 uniform even if a title wraps"}],this.teaserWidths=["80px","120px","10rem"],this.teaserRows=[{name:"U10 Spring Rec",meta:"League \u2022 Youth Rec",image:"/assets/img/fpo-blog.png",dates:"03/01/2026\u201305/30/2026",teams:12,registrations:148},{name:"Summer Skills Academy \u2014 Advanced Track for Returning Players and Alumni",meta:"Camp \u2022 Player Development",image:"/assets/img/fpo-box.png",dates:"06/15/2026\u201308/07/2026",teams:null,registrations:36},{name:"Fall Classic",meta:"Tournament \u2022 Open",image:null,dates:"09/12/2026\u201309/14/2026",teams:3,registrations:0}],this.fluidRows=[{name:"Al Ng",role:"Coach",chips:[{team:"Thunder U10",head:!0}]},{name:"Bartholomew Fitzgerald-Smythe",role:"Club Administrator",chips:[{team:"Wildcats Green U12 Travel Squad",head:!0},{team:"Rockets",head:!1},{team:"Comets U8",head:!1},{team:"Blue Jays Academy Elite",head:!0}]},{name:"Jo Ray",role:"Team Manager",chips:[]},{name:"Wu Li",role:"Assistant Coach",chips:[{team:"Northside Metropolitan Selects 2014 Boys White Travel",head:!0}]},{name:"Ten Teams",role:"Coach",chips:[{team:"Aces",head:!0},{team:"Bolts",head:!1},{team:"Comets",head:!1},{team:"Dynamo",head:!1},{team:"Eagles",head:!1},{team:"Falcons",head:!1},{team:"Gators",head:!1},{team:"Hawks",head:!1},{team:"Ipswich Rangers 2013 Girls Blue",head:!1},{team:"Jets",head:!1}]}],this.demoBlogImage="url('/assets/img/icon-empty-programs.png')",this.radiusSources=[{where:".card / .table-card base",value:"var(--theme-card-radius)",ok:!0},{where:".blog-card",value:"4px",ok:!1},{where:".team-card .card-header",value:"8px 8px 0 0",ok:!1}],this.shadowSources=[{where:".card / .table-card base",value:"var(--box-sha
6415dow)",ok:!0},{where:"public-site card scope",value:"var(--theme-card-shadow)",ok:!0},{where:".dashboard-card",value:"0 2px 8px rgba(0, 0, 0, 0.08)",ok:!1}],this.demoUser={firstName:"Dana",lastName:"Whitfield",email:"[email protected]",phone:"(503) 555-0142"},this.demoUserFields=[{controlName:"firstName",label:"First Name"},{controlName:"lastName",label:"Last Name"},{controlName:"email",label:"Email",required:!0},{controlName:"phone",label:"Phone"}],this.demoStaff={user:{firstName:"Marcus ",lastName:"Ortega"},staffProfile:{title:"Director of Coaching",email:"[email protected]",phone:"(503) 555-0188"},staffProgramAssignments:[{program:{name:"Fall Travel"}}]},this.demoStaffBare={user:{firstName:"Priya ",lastName:"Raghunathan"},staffProgramAssignments:[]},this.demoEventStart=new Date(2026,8,12),this.demoEventEnd=new Date(2026,8,14),this.promoFeatures=["Automated waitlists","Per-division pricing","Coach assignment rules"]}ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-sg-cards"]],standalone:!1,decls:3319,vars:131,consts:[["cardDoc",""],[1,"text-small","text-grey"],[1,"card"],[1,"text-small"],[1,"mt-4"],[1,"row"],[1,"col-md-6"],["side","shared"],[1,"m-0"],[1,"table","table-bordered","text-small","mb-0"],[1,"table","table-bordered","text-small","sg-doc-table"],[2,"width","8rem"],[2,"width","12rem"],[1,"text-red"],[1,"col-md-8"],[1,"card-header","sg-slot-outline"],["variant","tag","status","primary","styleClass","font-monospaced mb-1","text",".card-header"],[1,"mb-0"],[1,"card-subheading"],[1,"card-body","sg-slot-outline"],["variant","tag","status","primary","styleClass","font-monospaced mb-1","text",".card-body"],[1,"m-0","text-small"],[1,"card-footer","sg-slot-outline"],["variant","tag","status","primary","styleClass","font-monospaced mb-1","text",".card-footer"],["routerLink","/admin/styleguide/components/cards",1,"btn","btn-naked","btn-sm"],["type","button",1,"btn","btn-naked","btn-sm",3,"click"],["alertType","note",3,"isInline"],[2,"width","11rem"],[1,"text-smallest","text-grey-lt"],[2,"width","9rem"],[2,"width","13rem"],[1,"card","edit-card"],[1,"card-header"],[1,"header-action",3,"click"],[1,"card-body"],[1,"card","settings-card"],[1,"card","horizontal-form"],[1,"form-group"],["for","sg-card-hf-name"],["id","sg-card-hf-name","type","text","value","Fall Travel",1,"form-control"],["for","sg-card-hf-season"],["id","sg-card-hf-season",1,"form-control"],[1,"text-small","text-grey","mb-0","mt-3"],[1,"card","team-card"],[1,"card-footer"],["side","admin"],[1,"card","admin-card"],[1,"card-heading"],[1,"card","table-card"],[1,"table","mb-0"],[1,"table-card"],["type","button",1,"card","clickable-card","w-100","text-left",3,"click"],[1,"d-block","text-small"],[1,"card","dashboard-card"],[1,"col-md-4"],[1,"card","video-card"],[1,"bg-grey-lt","text-center","py-5","text-small"],[1,"card","filters-card"],[1,"card","card-print"],["side","member"],[1,"card","blog-card"],[1,"p-3"],[1,"mb-1"],[1,"border-left-lg","pl-3","mb-5"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],["text","No registrations yet.",3,"image"],["text","Nothing scheduled this week.","buttonText","New Event","buttonIcon","fa-regular fa-plus",3,"buttonClicked","image","showButton"],["text",'[showCard]="false" \u2014 no wrapper, for nesting.',3,"image","showCard"],["headerText","Contact Info",3,"edit","entity","fields","isEditable"],["headerText","Contact Info, read-only",3,"entity","fields"],[3,"clubUser"],["blogTitle","Tryout results are posted","blogExcerpt","Rosters for the fall travel program are final. Coaches will reach out to each family this week.",3,"blogCardClick","blogImage","blogSavedOn"],["blogTitle","No image supplied","blogExcerpt","The image block is omitted entirely rather than leaving a gap.",3,"blogCardClick","blogSavedOn"],["blogTitle","Club logo standing in","blogExcerpt","Padded and contained instead of cropped.",3,"blogCardClick","blogImage","showClubLogo","blogSavedOn"],["alertType","warning",3,"isInline"],[1,"d-flex","flex-wrap","gap-3","align-items-start"],[3,"startDate","endDate","clubEventTypeID"],[3,"startDate","endDate"],[3,"startDate","endDate","clubEventTypeID","isDraft"],[1,"roster-card","card"],[3,"viewProfileButton","player","collegeProfileSettings","showProfileButton"],[3,"player","collegeProfileSettings"],["title","Advanced Registration","description","Waitlists, per-division pricing and coach assignment rules.",3,"features"],[1,"border-left-lg","pl-3","mb-0"],["variant","tag","status","secondary","text","admin"],[3,"routerLink"],["panelTitle","Registrations"],["panelTitle","Team Health","settingsTitle","Team Health Settings",3,"settingsClick","hasSettings"],["panelTitle","Disputes"],["slot","titleSuffix","pTooltip","Suffix content sits inside the h2, so it inherits the heading size.",1,"fa-regular","fa-circle-info","ml-2"],["panelTitle","Financial Aid",3,"settingsClick","hasSettings"],["slot","headerActions","type","button",1,"btn","btn-naked","btn-sm","mr-2",3,"click"],[1,"fa-regular","fa-rotate-right","mr-1"],["panelTitle","Program Overview"],["slot","filters",1,"d-flex","flex-wrap","gap-3","align-items-center","mb-3"],["for","sg-card-season",1,"m-0","text-small"],["id","sg-card-season",1,"form-control","w-auto"],["panelTitle","Player Retention"],["slot","footer",1,"card-footer"],["routerLink","/styleguide",1,"btn","btn-naked","btn-sm"],[1,"d-flex","flex-wrap","gap-3","align-items-center","mb-3"],["type","button",1,"btn","btn-sm",3,"click"],["panelTitle","Alerts","skeletonHeight","220px",3,"settingsClick","hasSettings","loading","error"],["panelTitle","Loading","skeletonHeight","220px",3,"loading"],["panelTitle","Error, default message",3,"error"],["panelTitle","Error, custom message","errorMessage","Retention data is unavailable for this season.",3,"error"],["panelTitle","120px","skeletonHeight","120px",3,"loading"],["panelTitle","400px (default)",3,"loading"],["panelTitle","Flush body","bodyClass",""],["panelTitle","Full height","styleClass","full-height"],[1,"text-small","text-grey","mt-3"],[1,"mt-3"],[1,"table","table-bordered","text-small","mb-2",2,"max-width","34rem"],["alertType","error",3,"isInline"],[1,"text-small","mt-3"],[1,"text-small","text-grey","mt-2"],[1,"table","table-bordered","text-small","mb-2",2,"max-width","40rem"],[1,"table","table-bordered","text-small","sg-doc-table","mb-2",2,"max-width","40rem"],[2,"width","7rem"],["imageFit","cover",3,"image"],["imageFit","contain",3,"image"],["ariaLabel","Cards styleguide page",3,"image","link"],["ariaLabel","Run the demo action",3,"cardClick","image","clickable"],[3,"cardClick","image","clickable"],[1,"text-small","text-red"],[3,"image","mobileFull","aspectRatio"],["alertType","info",3,"isInline"],[2,"width","16rem"],[1,"font-monospaced","mb-1"],[1,"text-smallest","text-grey-lt","mb-2"],["variant","tag",3,"status","text"],[1,"text-small","mb-2"],[1,"text-green"],[1,"mb-2"],[1,"table","table-bordered","text-small","sg-doc-table","mb-2"],[2,"width","6rem"],["colspan","4",1,"text-grey-lt"],[1,"col-md-3","col-6"],[3,"image","text"],[3,"image"],[1,"list-row"],[1,"list-row-body"],[1,"text-grey","text-small"],[1,"line-height-1"],[1,"list-row-meta","text-small"],[1,"list-row-item"],[1,"fa-regular","fa-calendar","mr-1"],[1,"list-row-item","list-row-item-md"],[1,"list-row-item","list-row-item-sm"],[1,"fa-regular","fa-cart-shopping","mr-1"],["type","button",1,"btn","btn-sm","btn-tertiary","mb-0",3,"click"],[1,"fa-solid","fa-ellipsis"],[1,"sr-only"],["text","no image","status","secondary",1,"ml-2"],[1,"fa-regular","fa-users","mr-1"],[3,"image","as
6415pectRatio"],[3,"image","imageWidth"],[1,"card","p-3","mb-2"],[1,"fw-600"],[1,"list-row-meta"],[1,"list-row-item","list-row-item-fluid"],[1,"list-row-item","list-row-item-lg"],[1,"fa-regular","fa-plus","mr-1"],["variant","tag","icon","fa-regular fa-times",3,"onIconClick","status","nowrap","iconClickable","iconAriaLabel"],[1,"text-overflow-ellipsis"],[1,"text-small","text-grey-lt"],[1,"list-row","list-row--fixed-body"],[1,"list-row-item","list-row-item-fluid","justify-content-between","justify-content-md-end"]],template:function(s,o){if(s&1&&(e(0," "),n(1,"h2"),e(2,"Cards"),t(),e(3,`
6416`),n(4,"p",1),e(5,`
6417    \u201CCard\u201D in this app is overwhelmingly a `),n(6,"strong"),e(7,"CSS contract"),t(),e(8,`, not a component
6418    family. `),n(9,"code"),e(10,'class="card"'),t(),e(11," and its slots appear in "),n(12,"strong"),e(13,"388 template files"),t(),e(14,`;
6419    the eight card `),n(15,"em"),e(16,"components"),t(),e(17," account for "),n(18,"strong"),e(19,"66"),t(),e(20,` between them. So this page
6420    documents the CSS first (sections 2\u20133) and the components second (sections 4\u20135) \u2014
6421    that is the order in which you will actually reach for them.
6422`),t(),e(21,`
6423`),n(22,"p",1),e(23,`
6424    Counts are a grep snapshot of `),n(24,"code"),e(25,"ClientApp/src/app"),t(),e(26,` taken
6425    `),n(27,"strong"),e(28),t(),e(29,`, styleguide excluded. They drift weekly \u2014 re-grep before
6426    trusting one for a sweep. Full write-up:
6427    `),n(30,"code"),e(31,"docs/ui-migration-and-review/**/Card-System.md"),t(),e(32,`.
6428`),t(),e(33,`
6429`),n(34,"p",1),e(35,`
6430    Everything below renders against the real partials. No harness-local rule restyles a card \u2014
6431    if a sample looks wrong, the partial is wrong.
6432`),t(),e(36,`
6433
6434`),n(37,"div",2),e(38,`
6435    `),n(39,"h3"),e(40,"1. Which card do I reach for?"),t(),e(41,`
6436    `),n(42,"ul",3),e(43,`
6437        `),n(44,"li"),e(45,`
6438            `),n(46,"strong"),e(47,"Plain container, no special behavior"),t(),e(48," \u2192 "),n(49,"code"),e(50,'class="card"'),t(),e(51,`.
6439            You get white background, 1rem padding, 1rem bottom margin, border, shadow and the token
6440            radius for free. `),n(52,"strong"),e(53,"Do not re-add spacing."),t(),e(54,`
6441        `),t(),e(55,`
6442        `),n(56,"li"),e(57,`
6443            `),n(58,"strong"),e(59,"A known flavor"),t(),e(60,` \u2014 settings form, edit form, a card wrapping a table,
6444            a clickable card \u2192 use the flavor class from section 3. There are
6445            `),n(61,"strong"),e(62),t(),e(63,`; check before inventing one.
6446        `),t(),e(64,`
6447        `),n(65,"li"),e(66,`
6448            `),n(67,"strong"),e(68,"Content structure with its own inputs"),t(),e(69,` \u2014 a calendar entry, a staff
6449            member, a blog post, an empty state \u2192 use the component from section 4.
6450        `),t(),e(70,`
6451        `),n(71,"li"),e(72,`
6452            `),n(73,"strong"),e(74,"A dashboard panel"),t(),e(75," \u2192 "),n(76,"code"),e(77,"app-admin-dashboard-card"),t(),e(78,`,
6453            section 5. It is the only sanctioned dashboard chrome.
6454        `),t(),e(79,`
6455        `),n(80,"li"),e(81,`
6456            `),n(82,"strong"),e(83,"None of the above"),t(),e(84,` \u2192 it is probably a flavor, not a new component.
6457            A component earns its place by taking typed inputs or switching template structure, not
6458            by looking different.
6459        `),t(),e(85,`
6460    `),t(),e(86,`
6461`),t(),e(87,`
6462
6463`),n(88,"div",2),e(89,`
6464    `),n(90,"h3"),e(91,"2. The CSS contract"),t(),e(92,`
6465    `),n(93,"p",1),e(94,`
6466        `),n(95,"code"),e(96,".card"),t(),e(97," and "),n(98,"code"),e(99,".table-card"),t(),e(100,` share one rule block at
6467        `),n(101,"code"),e(102,"3_modules/components.scss:65"),t(),e(103,`. This is the layer 388 files are using.
6468    `),t(),e(104,`
6469
6470    `),n(105,"h4",4),e(106,"2a. What the base gives you"),t(),e(107,`
6471    `),n(108,"div",5),e(109,`
6472        `),n(110,"div",6),e(111,`
6473            `),n(112,"app-sg-caption",7),e(113,'class="card" \u2014 nothing else'),t(),e(114,`
6474            `),n(115,"div",2),e(116,`
6475                `),n(117,"p",8),e(118,`
6476                    A bare `),n(119,"code"),e(120,".card"),t(),e(121,`. Padding, bottom margin, border, shadow, radius and
6477                    the white fill all come from the base.
6478                `),t(),e(122,`
6479            `),t(),e(123,`
6480        `),t(),e(124,`
6481        `),n(125,"div",6),e(126,`
6482            `),n(127,"app-sg-caption",7),e(128,"the declarations you inherit"),t(),e(129,`
6483            `),n(130,"table",9),e(131,`
6484                `),n(132,"tbody"),e(133,`
6485                    `),n(134,"tr")(135,"td")(136,"code"),e(137,"background-color"),t()(),n(138,"td")(139,"code"),e(140,"var(--color-white)"),t()()(),e(141,`
6486                    `),n(142,"tr")(143,"td")(144,"code"),e(145,"color"),t()(),n(146,"td")(147,"code"),e(148,"var(--base-text)"),t(),e(149," = "),n(150,"code"),e(151,"var(--grey-900)"),t()()(),e(152,`
6487                    `),n(153,"tr")(154,"td")(155,"code"),e(156,"--base-header"),t()(),n(157,"td")(158,"code"),e(159,"var(--blue-1000)"),t(),e(160," \u2014 see section 7"),t()(),e(161,`
6488                    `),n(162,"tr")(163,"td")(164,"code"),e(165,"border"),t()(),n(166,"td")(167,"code"),e(168,"var(--border)"),t()()(),e(169,`
6489                    `),n(170,"tr")(171,"td")(172,"code"),e(173,"border-radius"),t()(),n(174,"td")(175,"code"),e(176,"var(--theme-card-radius)"),t()()(),e(177,`
6490                    `),n(178,"tr")(179,"td")(180,"code"),e(181,"box-shadow"),t()(),n(182,"td")(183,"code"),e(184,"var(--box-sha
6490dow)"),t()()(),e(185,`
6491                    `),n(186,"tr")(187,"td")(188,"code"),e(189,"padding"),t()(),n(190,"td")(191,"code"),e(192,"1rem"),t(),e(193," \u2014 85 occurrences override it"),t()(),e(194,`
6492                    `),n(195,"tr")(196,"td")(197,"code"),e(198,"margin"),t()(),n(199,"td")(200,"code"),e(201,"0 0 1rem 0"),t(),e(202," \u2014 37 files re-add it"),t()(),e(203,`
6493                    `),n(204,"tr")(205,"td")(206,"code"),e(207,"position"),t()(),n(208,"td")(209,"code"),e(210,"relative"),t()()(),e(211,`
6494                    `),n(212,"tr")(213,"td")(214,"code"),e(215,"overflow"),t()(),n(216,"td")(217,"code"),e(218,"hidden"),t(),e(219," \u2014 clips overlays, see section 7"),t()(),e(220,`
6495                `),t(),e(221,`
6496            `),t(),e(222,`
6497        `),t(),e(223,`
6498    `),t(),e(224,`
6499
6500    `),n(225,"h4",4),e(226,"2b. The slots"),t(),e(227,`
6501    `),n(228,"p",1),e(229,`
6502        Slots are plain classes, not projected templates \u2014 you write them yourself inside the
6503        card. Note the `),n(230,"em"),e(231,"Has base rule"),t(),e(232,` column: several widely-used slot names have
6504        `),n(233,"strong"),e(234,"no global styles at all"),t(),e(235,` and are inert hooks outside a flavor that styles
6505        them. That is a defect, not a design \u2014 see section 7.
6506    `),t(),e(236,`
6507    `),n(237,"table",10),e(238,`
6508        `),n(239,"thead"),e(240,`
6509            `),n(241,"tr"),e(242,`
6510                `),n(243,"th"),e(244,"Slot"),t(),e(245,`
6511                `),n(246,"th",11),e(247,"Files"),t(),e(248,`
6512                `),n(249,"th",12),e(250,"Has base rule"),t(),e(251,`
6513                `),n(252,"th"),e(253,"What it does"),t(),e(254,`
6514            `),t(),e(255,`
6515        `),t(),e(256,`
6516        `),n(257,"tbody"),e(258,`
6517            `),n(259,"tr"),e(260,`
6518                `),n(261,"td")(262,"code"),e(263,".card-header"),t()(),n(264,"td"),e(265,"94"),t(),e(266,`
6519                `),n(267,"td")(268,"code"),e(269,"components.scss:124"),t()(),e(270,`
6520                `),n(271,"td"),e(272,"1rem bottom margin; "),n(273,"code"),e(274,".no-gutters"),t(),e(275," and "),n(276,"code"),e(277,".card-header--with-accent"),t(),e(278," variants."),t(),e(279,`
6521            `),t(),e(280,`
6522            `),n(281,"tr"),e(282,`
6523                `),n(283,"td")(284,"code"),e(285,".card-body"),t()(),n(286,"td"),e(287,"89"),t(),e(288,`
6524                `),n(289,"td",13)(290,"strong"),e(291,"none"),t()(),e(292,`
6525                `),n(293,"td"),e(294,"Only ever styled "),n(295,"em"),e(296,"inside"),t(),e(297," "),n(298,"code"),e(299,".edit-card"),t(),e(300,", "),n(301,"code"),e(302,".team-card"),t(),e(303," or "),n(304,"code"),e(305,".admin-card"),t(),e(306,". On a plain card it is a no-op."),t(),e(307,`
6526            `),t(),e(308,`
6527            `),n(309,"tr"),e(310,`
6528                `),n(311,"td")(312,"code"),e(313,".card-footer"),t()(),n(314,"td"),e(315,"40"),t(),e(316,`
6529                `),n(317,"td")(318,"code"),e(319,"components.scss:258"),t()(),e(320,`
6530                `),n(321,"td"),e(322,"Negative side margins so the footer runs full-bleed to the card edge."),t(),e(323,`
6531            `),t(),e(324,`
6532            `),n(325,"tr"),e(326,`
6533                `),n(327,"td")(328,"code"),e(329,".card-heading"),t()(),n(330,"td"),e(331,"12"),t(),e(332,`
6534                `),n(333,"td")(334,"code"),e(335,"global.scss:273"),t()(),e(336,`
6535                `),n(337,"td"),e(338,"Heading treatment for a card title without an "),n(339,"code"),e(340,"h*"),t(),e(341,"."),t(),e(342,`
6536            `),t(),e(343,`
6537            `),n(344,"tr"),e(345,`
6538                `),n(346,"td")(347,"code"),e(348,".card-title"),t()(),n(349,"td"),e(350,"10"),t(),e(351,`
6539                `),n(352,"td",13)(353,"strong"),e(354,"none, anywhere"),t()(),e(355,`
6540                `),n(356,"td"),e(357,"Zero rules in the whole app. Ten files write it expecting Bootstrap, which is not loaded."),t(),e(358,`
6541            `),t(),e(359,`
6542            `),n(360,"tr"),e(361,`
6543                `),n(362,"td")(363,"code"),e(364,".card-subheading"),t()(),n(365,"td"),e(366,"8"),t(),e(367,`
6544                `),n(368,"td")(369,"code"),e(370,"global.scss:278"),t()(),e(371,`
6545                `),n(372,"td"),e(373,"Secondary line under the heading."),t(),e(374,`
6546            `),t(),e(375,`
6547            `),n(376,"tr"),e(377,`
6548                `),n(378,"td")(379,"code"),e(380,".card-sub-head"),t()(),n(381,"td"),e(382,"6"),t(),e(383,`
6549                `),n(384,"td")(385,"code"),e(386,"admin.scss:398"),t()(),e(387,`
6550                `),n(388,"td"),e(389,"Admin sub-header strip; has a "),n(390,"code"),e(391,".card-sub-head-flyouts"),t(),e(392," variant."),t(),e(393,`
6551            `),t(),e(394,`
6552            `),n(395,"tr"),e(396,`
6553                `),n(397,"td")(398,"code"),e(399,".card-tabs"),t()(),n(400,"td"),e(401,"4"),t(),e(402,`
6554                `),n(403,"td")(404,"code"),e(405,"admin.scss:285"),t()(),e(406,`
6555                `),n(407,"td"),e(408,"Tab strip docked to the card header."),t(),e(409,`
6556            `),t(),e(410,`
6557            `),n(411,"tr"),e(412,`
6558                `),n(413,"td")(414,"code"),e(415,".card-filters"),t()(),n(416,"td"),e(417,"3"),t(),e(418,`
6559                `),n(419,"td")(420,"code"),e(421,"admin.scss:505"),t()(),e(422,`
6560                `),n(423,"td"),e(424,"Filter row between header and body."),t(),e(425,`
6561            `),t(),e(426,`
6562            `),n(427,"tr"),e(428,`
6563                `),n(429,"td")(430,"code"),e(431,".card-scroll-content"),t()(),n(432,"td"),e(433,"2"),t(),e(434,`
6564                `),n(435,"td")(436,"code"),e(437,"components.scss:246"),t()(),e(438,`
6565                `),n(439,"td"),e(440,"200\u2013400px scroll region, full-bleed via negative margins."),t(),e(441,`
6566            `),t(),e(442,`
6567            `),n(443,"tr"),e(444,`
6568                `),n(445,"td")(446,"code"),e(447,".card-header-only"),t()(),n(448,"td"),e(449,"1"),t(),e(450,`
6569                `),n(451,"td")(452,"code"),e(453,"components.scss:136"),t()(),e(454,`
6570                `),n(455,"td"),e(456,"Used once, and only via "),n(457,"code"),e(458,"[ngClass]"),t(),e(459," in "),n(460,"code"),e(461,"facility-card"),t(),e(462,` \u2014 which is
6571                    why a `),n(463,"code"),e(464,'class="\u2026"'),t(),e(465," grep reports it dead. Bindings hide usage; check both forms."),t(),e(466,`
6572            `),t(),e(467,`
6573        `),t(),e(468,`
6574    `),t(),e(469,`
6575
6576    `),n(470,"app-sg-caption",7),e(471,"header \xB7 body \xB7 footer, live \u2014 dashed outlines are harness-only"),t(),e(472,`
6577    `),n(473,"div",5),e(474,`
6578        `),n(475,"div",14),e(476,`
6579            `),n(477,"div",2),e(478,`
6580                `),n(479,"div",15),e(480,`
6581                    `),c(481,"app-pill",16),e(482,`
6582                    `),n(483,"h4",17),e(484,"Season Settings"),t(),e(485,`
6583                    `),n(486,"div",18),e(487,".card-subheading sits under the heading"),t(),e(488,`
6584                `),t(),e(489,`
6585                `),n(490,"div",19),e(491,`
6586                    `),c(492,"app-pill",20),e(493,`
6587                    `),n(494,"p",21),e(495,`
6588                        This body has no padding of its own \u2014 the 1rem you see is the
6589                        `),n(496,"code"),e(497,".card"),t(),e(498,` base. That is the point of the table above.
6590                    `),t(),e(499,`
6591                `),t(),e(500,`
6592                `),n(501,"div",22),e(502,`
6593                    `),c(503,"app-pill",23),e(504,`
6594                    `),n(505,"a",24),e(506,"View details"),t(),e(507,`
6595                    `),n(508,"button",25),g("click",function(){return o.onAction("contract footer")}),e(509,`
6596                        Recalculate
6597                    `),t(),e(510,`
6598                `),t(),e(511,`
6599            `),t(),e(512,`
6600        `),t(),e(513,`
6601    `),t(),e(514,`
6602`),t(),e(515,`
6603
6604`),n(516,"div",2),e(517,`
6605    `),n(518,"h3"),e(519,"3. Modifiers & flavors"),t(),e(520,`
6606    `),n(521,"p",1),e(522),t(),e(523,`
6607
6608    `),n(524,"app-inline-alert",26),e(525,`
6609        `),n(526,"strong"),e(527,"Read the two middle columns together \u2014 the gap between them is the finding."),t(),e(528,`
6610        `),n(529,"em"),e(530,"Needs "),n(531,"code"),e(532,".card"),t()(),e(533,` is what the CSS enforces: three flavors are written nested
6611        inside the base rule, so they compile to `),n(534,"code"),e(535,".card.dashboard-card"),t(),e(536,` and do nothing
6612        without `),n(537,"code"),e(538,".card"),t(),e(539,`. The other nine are standalone rules that will apply to any element.
6613        `),n(540,"em"),e(541,"Used without it"),t(),e(542,` is what templates actually do. Where a standalone class is never used
6614        without `),n(543,"code"),e(544,".card"),t(),e(545,`, it is a card flavor that the CSS simply fails to say so \u2014
6615        and where it `),n(546,"strong"),e(547,"is"),t(),e(548,` used without, it is not really a card class at all.
6616    `),t(),e(549,`
6617    `),n(550,"p",1),e(551,`
6618        Worth knowing why the name cannot tell you: the family briefly had one class with BEM modifier
6619        naming, `),n(552,"code"),e(553,".card--accented"),t(),e(554,", and it was written "),n(555,"em"),e(556,"standalone"),t(),e(557,` \u2014 so the
6620        `),n(558,"code"),e(559,"--"),t(),e(560,' that implies "modifier of '),n(561,"code"),e(562,".card"),t(),e(563,`" was attached to the one class
6621        that did not require `),n(564,"code"),e(565,".card"),t(),e(566,`, while co-class-named ones like
6622        `),n(567,"code"),e(568,".card.image-header"),t(),e(569),n(570,"code"),e(571,"--"),t(),e(572,` naming believing it carries meaning here.
6623    `),t(),e(573,`
6624
6625    `),n(574,"h4",4),e(575,"3a. The census"),t(),e(576,`
6626    `),n(577,"table",10),e(578,`
6627        `),n(579,"thead"),e(580,`
6628            `),n(581,"tr"),e(582,`
6629                `),n(583,"th",27),e(584,"Class"),t(),e(585,`
6630                `),n(586,"th",11),e(587,"Needs "),n(588,"code"),e(589,".card"),t(),e(590,"?"),n(591,"div",28),e(592,"what the CSS requires"),t()(),e(593,`
6631                `),n(594,"th",29),e(595,"Used without it"),n(596,"div",28),e(597,"what templates do"),t()(),e(598,`
6632                `),n(599,"th",30),e(600,"Defined"),t(),e(601,`
6633                `),n(602,"th"),e(603,"Effect"),t(),e(604,`
6634            `),t(),e(605,`
6635        `),t(),e(606,`
6636        `),n(607,"tbody"),e(608,`
6637            `),S(609,gx,32,6,null,null,dx),t(),e(611,`
6638    `),t(),e(612,`
6639    `),n(613,"p",1),e(614,`
6640        `),n(615,"code"),e(616,"admin-card"),t(),e(617," and "),n(618,"code"),e(619,"team-card"),t(),e(620,` are real, SCSS-defined card flavors that
6641        the original census missed \u2014 between them they cover 19 files, more than
6642        `),n(621,"code"),e(622,"table-card"),t(),e(623,`.
6643    `),t(),e(624,`
6644
6645    `),n(625,"app-inline-alert",26),e(626,`
6646        `),n(627,"strong"),e(628,"Counting caveat that applies to every number on this page."),t(),e(629,` These counts match
6647        the class name inside a `),n(630,"code"),e(631,'class="\u2026"'),t(),e(632,` attribute. A class applied through
6648        `),n(633,"code"),e(634,"[ngClass]"),t(),e(635," or "),n(636,"code"),e(637,"[class.x]"),t(),e(638," does "),n(639,"em"),e(640,"not"),t(),e(641,` match \u2014
6649        `),n(642,"code"),e(643,".card-header-only"),t(),e(644,` read as dead for exactly that reason until
6650        `),n(645,"code"),e(646,"facility-card"),t(),e(647," turned up applying it via "),n(648,"code"),e(649,"[ngClass]"),t(),e(650),n(651,"code"),e(652,".html"),t(),e(653," "),n(654,"em"),e(655,"and"),t(),e(656," "),n(657,"code"),e(658,".ts"),t(),e(659,` before acting on one.
6651    `),t(),e(660,`
6652
6653    `),n(661,"h4",4),e(662,"3b. Live"),t(),e(663,`
6654
6655    `),n(664,"app-sg-caption",7),e(665,'class="card edit-card" \u2014 47 files'),t(),e(666,`
6656    `),n(667,"div",5),e(668,`
6657        `),n(669,"div",6),e(670,`
6658            `),n(671,"div",31),e(672,`
6659                `),n(673,"div",32),e(674,`
6660                    `),n(675,"h4",17),e(676,"Contact Info"),t(),e(677,`
6661                    `),n(678,"a",33),g("click",function(){return o.onAction("edit-card header action")}),e(679,"Edit"),t(),e(680,`
6662                `),t(),e(681,`
6663                `),n(682,"div",34),e(683,`
6664                    `),n(684,"p",21),e(685,`6px grey accent bar on top; flex header with a trailing
6665                        `),n(686,"code"),e(687,".header-action"),t(),e(688,"."),t(),e(689,`
6666                `),t(),e(690,`
6667            `),t(),e(691,`
6668        `),t(),e(692,`
6669        `),n(693,"div",6),e(694,`
6670            `),n(695,"app-sg-caption",7),e(696,'class="card settings-card" \u2014 37 files'),t(),e(697,`
6671            `),n(698,"div",35),e(699,`
6672                `),n(700,"h2"),e(701,"Notifications"),t(),e(702,`
6673                `),n(703,"p",21),e(704,`
6674                    Same accent bar as `),n(705,"code"),e(706,"edit-card"),t(),e(707,`, without the field-row styling.
6675                    `),n(708,"code"),e(709,"admin.scss"),t(),e(710," also restyles its "),n(711,"code"),e(712,"h2"),t(),e(713,`.
6676                `),t(),e(714,`
6677            `),t(),e(715,`
6678        `),t(),e(716,`
6679    `),t(),e(717,`
6680
6681    `),n(718,"app-sg-caption",7),e(719,'class="card horizontal-form" \u2014 77 files, the most-used flavor of all'),t(),e(720,`
6682    `),n(721,"div",5),e(722,`
6683        `),n(723,"div",14),e(724,`
6684            `),n(725,"div",36),e(726,`
6685                `),n(727,"div",37),e(728,`
6686                    `),n(729,"label",38),e(730,"Program Name"),t(),e(731,`
6687                    `),c(732,"input",39),e(733,`
6688                `),t(),e(734,`
6689                `),n(735,"div",37),e(736,`
6690                    `),n(737,"label",40),e(738,"Season"),t(),e(739,`
6691                    `),n(740,"select",41),e(741,`
6692                        `),n(742,"option"),e(743,"Fall 2026"),t(),e(744,`
6693                        `),n(745,"option"),e(746,"Spring 2027"),t(),e(747,`
6694                    `),t(),e(748,`
6695                `),t(),e(749,`
6696                `),n(750,"p",42),e(751,`
6697                    The flavor is what puts labels beside their controls at 30% width. Without it
6698                    these stack.
6699                `),t(),e(752,`
6700            `),t(),e(753,`
6701        `),t(),e(754,`
6702    `),t(),e(755,`
6703
6704    `),n(756,"app-sg-caption",7),e(757,'class="card team-card" \u2014 13 files'),t(),e(758,`
6705    `),n(759,"div",5),e(760,`
6706        `),n(761,"div",6),e(762,`
6707            `),n(763,"div",43),e(764,`
6708                `),n(765,"div",32),e(766,`
6709                    `),n(767,"h4",17),e(768,"U14 Boys Red"),t(),e(769,`
6710                `),t(),e(770,`
6711                `),n(771,"div",34),e(772,`
6712                    `),n(773,"p",21),e(774,`Grey filled header, tighter slot padding,
6713                        `),n(775,"code"),e(776,"padding: 0"),t(),e(777," on the card itself."),t(),e(778,`
6714                `),t(),e(779,`
6715                `),n(780,"div",44),e(781,`
6716                    `),n(782,"a",24),e(783,"Roster"),t(),e(784,`
6717                `),t(),e(785,`
6718            `),t(),e(786,`
6719        `),t(),e(787,`
6720        `),n(788,"div",6),e(789,`
6721            `),n(790,"app-sg-caption",45),e(791,'class="card admin-card" \u2014 6 files'),t(),e(792,`
6722            `),n(793,"div",46),e(794,`
6723                `),n(795,"div",32),e(796,`
6724                    `),n(797,"div",47),e(798,"Registration Summary"),t(),e(799,`
6725                `),t(),e(800,`
6726                `),n(801,"div",34),e(802,`
6727                    `),n(803,"p",21),e(804,"Bordered full-bleed header, smaller uppercase heading."),t(),e(805,`
6728                `),t(),e(806,`
6729            `),t(),e(807,`
6730        `),t(),e(808,`
6731    `),t(),e(809,`
6732
6733    `),n(810,"app-sg-caption",7),e(811,'class="card table-card" \u2014 12 files. See section 6: this is a sibling, not a modifier.'),t(),e(812,`
6734    `),n(813,"div",5),e(814,`
6735        `),n(815,"div",6),e(816,`
6736            `),n(817,"div",48),e(818,`
6737                `),n(819,"table",49),e(820,`
6738                    `),n(821,"thead")(822,"tr")(823,"th"),e(824,"Player"),t(),n(825,"th"),e(826,"Status"),t()()(),e(827,`
6739                    `),n(828,"tbody"),e(829,`
6740                        `),n(830,"tr")(831,"td"),e(832,"Dana Whitfield"),t(),n(833,"td"),e(834,"Registered"),t()(),e(835,`
6741                        `),n(836,"tr")(837,"td"),e(838,"Marcus Ortega"),t(),n(839,"td"),e(840,"Waitlisted"),t()(),e(841,`
6742                    `),t(),e(842,`
6743                `),t(),e(843,`
6744            `),t(),e(844,`
6745        `),t(),e(845,`
6746        `),n(846,"div",6),e(847,`
6747            `),n(848,"app-sg-caption",7),e(849,'class="table-card" alone \u2014 identical, because it is the same rule block'),t(),e(850,`
6748            `),n(851,"div",50),e(852,`
6749                `),n(853,"table",49),e(854,`
6750                    `),n(855,"thead")(856,"tr")(857,"th"),e(858,"Player"),t(),n(859,"th"),e(860,"Status"),t()()(),e(861,`
6751                    `),n(862,"tbody"),e(863,`
6752                        `),n(864,"tr")(865,"td"),e(866,"Dana Whitfield"),t(),n(867,"td"),e(868,"Registered"),t()(),e(869,`
6753                        `),n(870,"tr")(871,"td"),e(872,"Marcus Ortega"),t(),n(873,"td"),e(874,"Waitlisted"),t()(),e(875,`
6754                    `),t(),e(876,`
6755                `),t(),e(877,`
6756            `),t(),e(878,`
6757        `),t(),e(879,`
6758    `),t(),e(880,`
6759
6760    `),n(881,"app-sg-caption",7),e(882,'class="card clickable-card" \u2014 4 files. The sanctioned click affordance; hover me.'),t(),e(883,`
6761    `),n(884,"div",5),e(885,`
6762        `),n(886,"div",6),e(887,`
6763            `),n(888,"button",51),g("click",function(){return o.onAction("clickable-card")}),e(889,`
6764                `),n(890,"span",52),e(891,`
6765                    `),n(892,"code"),e(893,"cursor: pointer"),t(),e(894,` plus a grey hover fill. Put it on a
6766                    `),n(895,"code"),e(896,"<button>"),t(),e(897," for an on-screen action or an "),n(898,"code"),e(899,"<a href>"),t(),e(900,`
6767                    for navigation \u2014 the class supplies the look, not the semantics.
6768                `),t(),e(901,`
6769            `),t(),e(902,`
6770        `),t(),e(903,`
6771        `),n(904,"div",6),e(905,`
6772            `),n(906,"app-sg-caption",7),e(907,'class="card dashboard-card" \u2014 5 files. Bare class; the component is section 5.'),t(),e(908,`
6773            `),n(909,"div",53),e(910,`
6774                `),n(911,"label"),e(912,"1.5rem bottom margin and larger labels"),t(),e(913,`
6775                `),n(914,"p",21),e(915,`
6776                    Its shadow is hardcoded rather than tokenized \u2014 defect 7j.
6777                `),t(),e(916,`
6778            `),t(),e(917,`
6779        `),t(),e(918,`
6780    `),t(),e(919,`
6781
6782    `),n(920,"app-sg-caption",7),e(921,'class="card video-card" (2 files) \xB7 class="card filters-card" (1) \xB7 class="card card-print" (1)'),t(),e(922,`
6783    `),n(923,"div",5),e(924,`
6784        `),n(925,"div",54),e(926,`
6785            `),n(927,"div",55),e(928,`
6786                `),n(929,"div",56),e(930,`
6787                    `),n(931,"code"),e(932,"padding: 0"),t(),e(933,", keeps "),n(934,"code"),e(935,"overflow: hidden"),t(),e(936,` so an embed clips to
6788                    the radius.
6789                `),t(),e(937,`
6790            `),t(),e(938,`
6791        `),t(),e(939,`
6792        `),n(940,"div",54),e(941,`
6793            `),n(942,"div",57),e(943,`
6794                `),n(944,"p",21)(945,"code"),e(946,"max-width: 325px"),t(),e(947,". That is the entire rule."),t(),e(948,`
6795            `),t(),e(949,`
6796        `),t(),e(950,`
6797        `),n(951,"div",54),e(952,`
6798            `),n(953,"div",58),e(954,`
6799                `),n(955,"p",21),e(956,`
6800                    Identical on screen by design \u2014 the rule is `),n(957,"code"),e(958,"@media print"),t(),e(959,` only
6801                    (drops border, radius, padding; adds `),n(960,"code"),e(961,"break-inside: avoid"),t(),e(962,`).
6802                `),t(),e(963,`
6803            `),t(),e(964,`
6804        `),t(),e(965,`
6805    `),t(),e(966,`
6806
6807    `),n(967,"app-sg-caption",59),e(968,'class="card blog-card" \u2014 3 files. The component is section 4.'),t(),e(969,`
6808    `),n(970,"div",5),e(971,`
6809        `),n(972,"div",6),e(973,`
6810            `),n(974,"div",60),e(975,`
6811                `),n(976,"div",61),e(977,`
6812                    `),n(978,"h4",62),e(979,"Tryout results are posted"),t(),e(980,`
6813                    `),n(981,"p",21),e(982,`
6814                        `),n(983,"code"),e(984,"padding: 0"),t(),e(985," and a hardcoded "),n(986,"code"),e(987,"4px"),t(),e(988,` radius \u2014 the
6815                        third of four radius sources, section 6.
6816                    `),t(),e(989,`
6817                `),t(),e(990,`
6818            `),t(),e(991,`
6819        `),t(),e(992,`
6820    `),t(),e(993,`
6821
6822`),t(),e(994,`
6823
6824`),k(995,yx,87,10,"ng-template",null,0,fe),e(997,`
6825
6826`),n(998,"div",2),e(999,`
6827    `),n(1e3,"h3"),e(1001,"4. Component cards"),t(),e(1002,`
6828    `),n(1003,"p",1),e(1004,`
6829        Specialized content shapes layered on the same `),n(1005,"code"),e(1006,".card"),t(),e(1007,` base. Reach for one only
6830        when it takes typed inputs or switches template structure \u2014 not because it looks
6831        different. Each block below gives you the full input/output surface, when to use it, when not
6832        to, and a live sample.
6833    `),t(),e(1008,`
6834
6835    `),n(1009,"h4",4),e(1010,"Three kinds \u2014 settle this before you wrap anything"),t(),e(1011,`
6836    `),n(1012,"p",1),e(1013,`
6837        The first question is `),n(1014,"strong"),e(1015,"who renders the "),n(1016,"code"),e(1017,".card"),t()(),e(1018,`. Get it wrong and
6838        you get either no chrome at all or two nested cards. Not one of these nine tells you from its
6839        name, which is why this table is here.
6840    `),t(),e(1019,`
6841    `),n(1020,"table",10),e(1021,`
6842        `),n(1022,"thead"),e(1023,`
6843            `),n(1024,"tr"),e(1025,`
6844                `),n(1026,"th",27),e(1027,"Kind"),t(),e(1028,`
6845                `),n(1029,"th",27),e(1030,"Who renders "),n(1031,"code"),e(1032,".card"),t()(),e(1033,`
6846                `),n(1034,"th"),e(1035,"Components"),t(),e(1036,`
6847            `),t(),e(1037,`
6848        `),t(),e(1038,`
6849        `),n(1039,"tbody"),e(1040,`
6850            `),n(1041,"tr"),e(1042,`
6851                `),n(1043,"td")(1044,"strong"),e(1045,"Complete card"),t()(),e(1046,`
6852                `),n(1047,"td"),e(1048,"the component"),t(),e(1049,`
6853                `),n(1050,"td")(1051,"code"),e(1052,"admin-dashboard-card"),t(),e(1053,", "),n(1054,"code"),e(1055,"blog-card"),t(),e(1056,", "),n(1057,"code"),e(1058,"staff-card"),t(),e(1059,`,
6854                    `),n(1060,"code"),e(1061,"user-info-view-only-card"),t(),e(1062,", "),n(1063,"code"),e(1064,"facility-card"),t(),e(1065,`,
6855                    `),n(1066,"code"),e(1067,"null-card"),t(),e(1068," (by default)"),t(),e(1069,`
6856            `),t(),e(1070,`
6857            `),n(1071,"tr"),e(1072,`
6858                `),n(1073,"td")(1074,"strong"),e(1075,"Card content"),t()(),e(1076,`
6859                `),n(1077,"td")(1078,"strong"),e(1079,"you do"),t()(),e(1080,`
6860                `),n(1081,"td")(1082,"code"),e(1083,"roster-card"),t(),e(1084,", and "),n(1085,"code"),e(1086,"null-card"),t(),e(1087,` with
6861                    `),n(1088,"code"),e(1089,'[showCard]="false"'),t()(),e(1090,`
6862            `),t(),e(1091,`
6863            `),n(1092,"tr"),e(1093,`
6864                `),n(1094,"td")(1095,"strong"),e(1096,"Not a card"),t()(),e(1097,`
6865                `),n(1098,"td"),e(1099,"nobody \u2014 own unrelated chrome"),t(),e(1100,`
6866                `),n(1101,"td")(1102,"code"),e(1103,"promo-card"),t(),e(1104," (a whole page section), "),n(1105,"code"),e(1106,"calendar-card"),t(),e(1107," (a date badge)"),t(),e(1108,`
6867            `),t(),e(1109,`
6868        `),t(),e(1110,`
6869    `),t(),e(1111,`
6870    `),n(1112,"app-inline-alert",26),e(1113,`
6871        `),n(1114,"code"),e(1115,"app-null-card"),t(),e(1116," is deliberately "),n(1117,"strong"),e(1118,"both"),t(),e(1119,`, via
6872        `),n(1120,"code"),e(1121,'[class.card]="showCard"'),t(),e(1122,` on its root. That is the sanctioned way to write a
6873        component that works standalone `),n(1123,"em"),e(1124,"and"),t(),e(1125,` nested \u2014 one boolean that toggles the
6874        wrapper, not two components. Copy that pattern rather than inventing another.
6875    `),t(),e(1126,`
6876    `),n(1127,"p",1),e(1128,`
6877        `),n(1129,"code"),e(1130,"app-admin-dashboard-card"),t(),e(1131,` is a complete card, documented in section 5 where it
6878        already had its own gallery. Every block below carries its kind in the meta strip.
6879    `),t(),e(1132,`
6880    `),n(1133,"app-inline-alert",26),e(1134,`
6881        `),n(1135,"strong"),e(1136,"Naming trap."),t(),e(1137," A grep for "),n(1138,"code"),e(1139,"*card*"),t(),e(1140,` matches 23 files, but 14 of them
6882        are `),n(1141,"strong"),e(1142,"payment"),t(),e(1143," cards \u2014 "),n(1144,"code"),e(1145,"cardholder-*"),t(),e(1146,`,
6883        `),n(1147,"code"),e(1148,"cancel-card-dialog"),t(),e(1149,", "),n(1150,"code"),e(1151,"replace-card-dialog"),t(),e(1152,`,
6884        `),n(1153,"code"),e(1154,"cardholder-card-status"),t(),e(1155,`. Different domain entirely. Exclude them from any sweep
6885        over this family.
6886    `),t(),e(1156,`
6887
6888    `),c(1157,"hr",4),e(1158,`
6889
6890    `),n(1159,"div",63),e(1160,`
6891        `),k(1161,wx,1,0,"ng-container",64),e(1162,`
6892
6893        `),n(1163,"app-sg-caption",7),e(1164,"the three shapes: message only \xB7 with a CTA \xB7 without the card wrapper"),t(),e(1165,`
6894        `),n(1166,"div",5),e(1167,`
6895            `),n(1168,"div",54),e(1169,`
6896                `),c(1170,"app-null-card",65),e(1171,`
6897            `),t(),e(1172,`
6898            `),n(1173,"div",54),e(1174,`
6899                `),n(1175,"app-null-card",66),g("buttonClicked",function(){return o.onAction("null-card CTA")}),t(),e(1176,`
6900            `),t(),e(1177,`
6901            `),n(1178,"div",54),e(1179,`
6902                `),c(1180,"app-null-card",67),e(1181,`
6903            `),t(),e(1182,`
6904        `),t(),e(1183,`
6905
6906        `),n(1184,"app-sg-caption",7),e(1185,"every ImageType \u2014 pick by meaning, not by looks"),t(),e(1186,`
6907        `),n(1187,"div",5),e(1188,`
6908            `),S(1189,Cx,6,2,null,null,K),t(),e(1191,`
6909        `),n(1192,"p",1),e(1193,`
6910            `),n(1194,"code"),e(1195,"[image]"),t(),e(1196," takes the "),n(1197,"code"),e(1198,"ImageType"),t(),e(1199,` string enum, never a raw path. An
6911            unrecognized value falls back to `),n(1200,"code"),e(1201),t(),e(1202,` silently, so a typo
6912            looks like a deliberate choice. `),n(1203,"strong"),e(1204,`Any new illustration card should extend this enum
6913            rather than invent a parallel convention`),t(),e(1205,` \u2014 that is the precedent Wave B follows.
6914        `),t(),e(1206,`
6915    `),t(),e(1207,`
6916
6917    `),n(1208,"div",63),e(1209,`
6918        `),k(1210,_x,1,0,"ng-container",64),e(1211,`
6919
6920        `),n(1212,"app-sg-caption",7),e(1213,"four fields, one of them required and empty \u2014 note the missing-info highlight"),t(),e(1214,`
6921        `),n(1215,"div",5),e(1216,`
6922            `),n(1217,"div",6),e(1218,`
6923                `),n(1219,"app-user-info-view-only-card",68),g("edit",function(){return o.onAction("view-only-card edit")}),t(),e(1220,`
6924            `),t(),e(1221,`
6925            `),n(1222,"div",6),e(1223,`
6926                `),n(1224,"app-sg-caption",7),e(1225,'[isEditable]="false" \u2014 no Edit link in the header'),t(),e(1226,`
6927                `),c(1227,"app-user-info-view-only-card",69),e(1228,`
6928            `),t(),e(1229,`
6929        `),t(),e(1230,`
6930    `),t(),e(1231,`
6931
6932    `),n(1232,"div",63),e(1233,`
6933        `),k(1234,kx,1,0,"ng-container",64),e(1235,`
6934
6935        `),n(1236,"app-sg-caption",59),e(1237,"with a program assignment and a full staffProfile"),t(),e(1238,`
6936        `),n(1239,"div",5),e(1240,`
6937            `),n(1241,"div",6),e(1242,`
6938                `),c(1243,"app-staff-card",70),e(1244,`
6939            `),t(),e(1245,`
6940            `),n(1246,"div",6),e(1247,`
6941                `),n(1248,"app-sg-caption",59),e(1249,"no staffProfile \u2014 everything below the name disappears"),t(),e(1250,`
6942                `),c(1251,"app-staff-card",70),e(1252,`
6943            `),t(),e(1253,`
6944        `),t(),e(1254,`
6945    `),t(),e(1255,`
6946
6947    `),n(1256,"div",63),e(1257,`
6948        `),k(1258,Tx,1,0,"ng-container",64),e(1259,`
6949
6950        `),n(1260,"app-sg-caption",59),e(1261,'with an image \xB7 text only \xB7 [showClubLogo]="true"'),t(),e(1262,`
6951        `),n(1263,"div",5),e(1264,`
6952            `),n(1265,"div",54),e(1266,`
6953                `),n(1267,"app-blog-card",71),g("blogCardClick",function(){return o.onAction("blog-card click")}),t(),e(1268,`
6954            `),t(),e(1269,`
6955            `),n(1270,"div",54),e(1271,`
6956                `),n(1272,"app-blog-card",72),g("blogCardClick",function(){return o.onAction("blog-card click")}),t(),e(1273,`
6957            `),t(),e(1274,`
6958            `),n(1275,"div",54),e(1276,`
6959                `),n(1277,"app-blog-card",73),g("blogCardClick",function(){return o.onAction("blog-card click")}),t(),e(1278,`
6960            `),t(),e(1279,`
6961        `),t(),e(1280,`
6962        `),n(1281,"app-inline-alert",74),e(1282,`
6963            `),n(1283,"strong"),e(1284,"Two traps."),t(),e(1285," "),n(1286,"code"),e(1287,"blogImage"),t(),e(1288,` is bound straight to
6964            `),n(1289,"code"),e(1290,"[style.background-image]"),t(),e(1291,`, so it must be a full CSS value \u2014
6965            `),n(1292,"code"),e(1293,"url('/path/img.png')"),t(),e(1294,", not "),n(1295,"code"),e(1296,"/path/img.png"),t(),e(1297,`. A bare path fail
6965s
6966            silently. And the root is an `),n(1298,"code"),e(1299,"<a>"),t(),e(1300," with no "),n(1301,"code"),e(1302,"href"),t(),e(1303,` firing a
6967            `),n(1304,"code"),e(1305,"(click)"),t(),e(1306,`, so it is not keyboard-reachable \u2014 defect 7f.
6968        `),t(),e(1307,`
6969    `),t(),e(1308,`
6970
6971    `),n(1309,"div",63),e(1310,`
6972        `),k(1311,Ix,1,0,"ng-container",64),e(1312,`
6973
6974        `),n(1313,"app-sg-caption",7),e(1314,"game \xB7 practice \xB7 club \xB7 no type \xB7 multi-day \xB7 draft"),t(),e(1315,`
6975        `),n(1316,"div",75),e(1317,`
6976            `),c(1318,"app-calendar-card",76),e(1319,`
6977            `),c(1320,"app-calendar-card",76),e(1321,`
6978            `),c(1322,"app-calendar-card",76),e(1323,`
6979            `),c(1324,"app-calendar-card",77),e(1325,`
6980            `),c(1326,"app-calendar-card",76),e(1327,`
6981            `),c(1328,"app-calendar-card",78),e(1329,`
6982        `),t(),e(1330,`
6983        `),n(1331,"app-inline-alert",74),e(1332,`
6984            `),n(1333,"strong")(1334,"code"),e(1335,"endDate"),t(),e(1336," is required, despite not looking it."),t(),e(1337,`
6985            `),n(1338,"code"),e(1339,"ngOnInit"),t(),e(1340," runs it through "),n(1341,"code"),e(1342,"UtcDatePipe"),t(),e(1343,` unconditionally, and
6986            Angular's date conversion `),n(1344,"em"),e(1345,"throws"),t(),e(1346,` on an invalid date rather than returning null
6987            \u2014 so omitting `),n(1347,"code"),e(1348,"endDate"),t(),e(1349,` takes the whole view down. Pass
6988            `),n(1350,"code"),e(1351,'[endDate]="startDate"'),t(),e(1352,` for a single-day event, which is what all eight real
6989            call sites do. See defect 7d.
6990        `),t(),e(1353,`
6991        `),n(1354,"p",1),e(1355,`
6992            Also note `),n(1356,"code"),e(1357,"isMultidayEvent"),t(),e(1358," is computed once in "),n(1359,"code"),e(1360,"ngOnInit"),t(),e(1361,`, so a
6993            date that changes after init will not restack the badge.
6994        `),t(),e(1362,`
6995    `),t(),e(1363,`
6996
6997    `),n(1364,"div",63),e(1365,`
6998        `),k(1366,Mx,1,0,"ng-container",64),e(1367,`
6999
7000        `),n(1368,"app-inline-alert",26),e(1369,`
7001            `),n(1370,"strong"),e(1371,"This is the card-content case."),t(),e(1372,` The component renders a bare
7002            `),n(1373,"code"),e(1374,".row"),t(),e(1375,`. Both live consumers wrap it in
7003            `),n(1376,"code"),e(1377,'<div class="roster-card card">'),t(),e(1378,` \u2014 the two samples below are the
7004            same component with and without that wrapper, which is the whole distinction the table at
7005            the top of this section is about.
7006        `),t(),e(1379,`
7007
7008        `),n(1380,"app-sg-caption",59),e(1381,"wrapped, as both real consumers do \u2014 this is the intended look"),t(),e(1382,`
7009        `),n(1383,"div",5),e(1384,`
7010            `),n(1385,"div",6),e(1386,`
7011                `),n(1387,"div",79),e(1388,`
7012                    `),n(1389,"app-roster-card-content",80),g("viewProfileButton",function(){return o.onAction("roster view profile")}),t(),e(1390,`
7013                `),t(),e(1391,`
7014            `),t(),e(1392,`
7015            `),n(1393,"div",6),e(1394,`
7016                `),n(1395,"app-sg-caption",59),e(1396,"unwrapped \u2014 no border, no padding, no shadow. Not a bug; it has no chrome."),t(),e(1397,`
7017                `),c(1398,"app-roster-card-content",81),e(1399,`
7018            `),t(),e(1400,`
7019        `),t(),e(1401,`
7020        `),n(1402,"p",1),e(1403,`
7021            Rows are driven entirely by `),n(1404,"code"),e(1405,"collegeProfileSettings.rosterFields"),t(),e(1406,` \u2014 these
7022            samples enable four. Pass no settings and the component renders `),n(1407,"em"),e(1408,"nothing at all"),t(),e(1409,`,
7023            because the whole template sits behind
7024            `),n(1410,"code"),e(1411,"@if (player && collegeProfileSettings)"),t(),e(1412,`. That guard makes it the
7025            best-behaved card component on this page when starved of inputs, and it is also the one
7026            carrying the two worst defects \u2014 7a and 7g. Guarding quality and correctness are
7027            independent.
7028        `),t(),e(1413,`
7029    `),t(),e(1414,`
7030
7031    `),n(1415,"div",63),e(1416,`
7032        `),k(1417,Dx,1,0,"ng-container",64),e(1418,`
7033
7034        `),n(1419,"app-sg-caption",45),e(1420,"full width by design \u2014 this is a page, not a panel"),t(),e(1421,`
7035        `),c(1422,"app-promo-card",82),e(1423,`
7036    `),t(),e(1424,`
7037
7038    `),n(1425,"div",83),e(1426,`
7039        `),k(1427,Fx,1,0,"ng-container",64),e(1428,`
7040        `),n(1429,"p",1),e(1430,`
7041            Not rendered. It needs a `),n(1431,"code"),e(1432,"PracticeFacilityClubAssign"),t(),e(1433,` from its own feature and
7042            is documented here only so the inventory is complete \u2014 the point of the entry is
7043            that you should not reach for it.
7044        `),t(),e(1434,`
7045    `),t(),e(1435,`
7046`),t(),e(1436,`
7047
7048`),n(1437,"div",2),e(1438,`
7049    `),n(1439,"h3"),e(1440,"5. Dashboard cards"),t(),e(1441,`
7050    `),n(1442,"p",1),e(1443,`
7051        `),n(1444,"code"),e(1445,"app-admin-dashboard-card"),t(),e(1446,` is the chrome every admin-dashboard and
7052        analytics-dashboard panel sits inside \u2014 header, settings affordance, filters strip, body,
7053        footer, plus the loading and error states. A panel that hand-rolls any of this is a migration
7054        target.
7055    `),t(),e(1447,`
7056    `),n(1448,"p",1),e(1449,`
7057        Every sample here is marked `),c(1450,"app-pill",84),e(1451,` \u2014
7058        this component has no member-side call sites, so its styling is fixed and no club theme reaches
7059        it. See `),n(1452,"a",85),e(1453,"admin vs member"),t(),e(1454,`.
7060    `),t(),e(1455,`
7061
7062    `),n(1456,"h4",4),e(1457,"5.1 Minimum"),t(),e(1458,`
7063    `),n(1459,"p",1),e(1460,`
7064        `),n(1461,"code"),e(1462,"panelTitle"),t(),e(1463,` plus projected body content. Everything else is optional.
7065    `),t(),e(1464,`
7066
7067    `),n(1465,"app-sg-caption",45),e(1466,'<app-admin-dashboard-card [panelTitle]="\u2026">'),t(),e(1467,`
7068    `),n(1468,"div",5),e(1469,`
7069        `),n(1470,"div",6),e(1471,`
7070            `),n(1472,"app-admin-dashboard-card",86),e(1473,`
7071                `),n(1474,"p",8),e(1475,"Body content is the default content projection slot."),t(),e(1476,`
7072            `),t(),e(1477,`
7073        `),t(),e(1478,`
7074    `),t(),e(1479,`
7075
7076    `),n(1480,"h4",4),e(1481,"5.2 Header"),t(),e(1482,`
7077
7078    `),n(1483,"app-sg-caption",45),e(1484,'[hasSettings]="true" (settingsClick) \u2014 the \u22EE affordance'),t(),e(1485,`
7079    `),n(1486,"div",5),e(1487,`
7080        `),n(1488,"div",6),e(1489,`
7081            `),n(1490,"app-admin-dashboard-card",87),g("settingsClick",function(){return o.onSettingsClick()}),e(1491,`
7082                `),n(1492,"p",8),e(1493,"The settings button only appears when "),n(1494,"code"),e(1495,"hasSettings"),t(),e(1496," is set."),t(),e(1497,`
7083            `),t(),e(1498,`
7084        `),t(),e(1499,`
7085    `),t(),e(1500,`
7086
7087    `),n(1501,"app-sg-caption",45),e(1502,"slot=titleSuffix \u2014 renders immediately after the title text"),t(),e(1503,`
7088    `),n(1504,"div",5),e(1505,`
7089        `),n(1506,"div",6),e(1507,`
7090            `),n(1508,"app-admin-dashboard-card",88),e(1509,`
7091                `),c(1510,"i",89),e(1511,`
7092                `),n(1512,"p",8),e(1513,"Use this for an info icon or a count that belongs to the title."),t(),e(1514,`
7093            `),t(),e(1515,`
7094        `),t(),e(1516,`
7095    `),t(),e(1517,`
7096
7097    `),n(1518,"app-sg-caption",45),e(1519,"slot=headerActions \u2014 trailing edge, alongside the settings button"),t(),e(1520,`
7098    `),n(1521,"div",5),e(1522,`
7099        `),n(1523,"div",6),e(1524,`
7100            `),n(1525,"app-admin-dashboard-card",90),g("settingsClick",function(){return o.onSettingsClick()}),e(1526,`
7101                `),n(1527,"button",91),g("click",function(){return o.onAction("header action")}),e(1528,`
7102                    `),c(1529,"i",92),e(1530,`Refresh
7103                `),t(),e(1531,`
7104                `),n(1532,"p",8),e(1533,"Header actions render before the settings button in source order."),t(),e(1534,`
7105            `),t(),e(1535,`
7106        `),t(),e(1536,`
7107    `),t(),e(1537,`
7108
7109    `),n(1538,"h4",4),e(1539,"5.3 Filters & footer"),t(),e(1540,`
7110
7111    `),n(1541,"app-sg-caption",45),e(1542,"slot=filters \u2014 sits between the header and the body, outside bodyClass"),t(),e(1543,`
7112    `),n(1544,"div",5),e(1545,`
7113        `),n(1546,"div",6),e(1547,`
7114            `),n(1548,"app-admin-dashboard-card",93),e(1549,`
7115                `),n(1550,"div",94),e(1551,`
7116                    `),n(1552,"label",95),e(1553,"Season"),t(),e(1554,`
7117                    `),n(1555,"select",96),e(1556,`
7118                        `),n(1557,"option"),e(1558,"Fall 2026"),t(),e(1559,`
7119                        `),n(1560,"option"),e(1561,"Spring 2026"),t(),e(1562,`
7120                    `),t(),e(1563,`
7121                `),t(),e(1564,`
7122                `),n(1565,"p",8),e(1566,"The filters strip is its own slot so it is never clipped by the body padding."),t(),e(1567,`
7123            `),t(),e(1568,`
7124        `),t(),e(1569,`
7125    `),t(),e(1570,`
7126
7127    `),n(1571,"app-sg-caption",45),e(1572,"slot=footer \u2014 below the body, outside bodyClass"),t(),e(1573,`
7128    `),n(1574,"div",5),e(1575,`
7129        `),n(1576,"div",6),e(1577,`
7130            `),n(1578,"app-admin-dashboard-card",97),e(1579,`
7131                `),n(1580,"p",8),e(1581,"Footer actions are links or buttons depending on whether they navigate."),t(),e(1582,`
7132                `),n(1583,"div",98),e(1584,`
7133                    `),n(1585,"a",99),e(1586,"View details"),t(),e(1587,`
7134                    `),n(1588,"button",25),g("click",function(){return o.onAction("footer action")}),e(1589,`
7135                        Recalculate
7136                    `),t(),e(1590,`
7137                `),t(),e(1591,`
7138            `),t(),e(1592,`
7139        `),t(),e(1593,`
7140    `),t(),e(1594,`
7141
7142    `),n(1595,"h4",4),e(1596,"5.4 States"),t(),e(1597,`
7143    `),n(1598,"p",1),e(1599,`
7144        A panel is not done until all three render correctly. The live toggle drives one card through
7145        every state \u2014 that is the fastest way to catch a header that disappears under loading or a
7146        footer that survives an error.
7147    `),t(),e(1600,`
7148
7149    `),n(1601,"app-sg-caption",45),e(1602,"Live \u2014 flip the states on one card"),t(),e(1603,`
7150    `),n(1604,"div",100),e(1605,`
7151        `),n(1606,"button",101),g("click",function(){return o.liveLoading=!o.liveLoading}),e(1607),t(),e(1608,`
7152        `),n(1609,"button",101),g("click",function(){return o.liveError=!o.liveError}),e(1610),t(),e(1611,`
7153    `),t(),e(1612,`
7154    `),n(1613,"div",5),e(1614,`
7155        `),n(1615,"div",6),e(1616,`
7156            `),n(1617,"app-admin-dashboard-card",102),g("settingsClick",function(){return o.onSettingsClick()}),e(1618,`
7157                `),n(1619,"p",8),e(1620,"Loaded content."),t(),e(1621,`
7158                `),n(1622,"div",98),e(1623,`
7159                    `),n(1624,"a",99),e(1625,"View all"),t(),e(1626,`
7160                `),t(),e(1627,`
7161            `),t(),e(1628,`
7162        `),t(),e(1629,`
7163    `),t(),e(1630,`
7164
7165    `),n(1631,"app-sg-caption",45),e(1632,'[loading]="true" \u2014 the whole card is replaced by a skeleton'),t(),e(1633,`
7166    `),n(1634,"div",5),e(1635,`
7167        `),n(1636,"div",6),e(1637,`
7168            `),n(1638,"app-admin-dashboard-card",103),e(1639,`
7169                `),n(1640,"p",8),e(1641,"Never rendered while loading."),t(),e(1642,`
7170            `),t(),e(1643,`
7171        `),t(),e(1644,`
7172    `),t(),e(1645,`
7173
7174    `),n(1646,"app-sg-caption",45),e(1647,'[error]="true" \u2014 chrome stays, body is replaced by an inline alert'),t(),e(1648,`
7175    `),n(1649,"div",5),e(1650,`
7176        `),n(1651,"div",6),e(1652,`
7177            `),n(1653,"app-admin-dashboard-card",104),e(1654,`
7178                `),n(1655,"p",8),e(1656,"Never rendered while errored."),t(),e(1657,`
7179            `),t(),e(1658,`
7180        `),t(),e(1659,`
7181        `),n(1660,"div",6),e(1661,`
7182            `),n(1662,"app-admin-dashboard-card",105),e(1663,`
7183                `),n(1664,"p",8),e(1665,"Never rendered while errored."),t(),e(1666,`
7184            `),t(),e(1667,`
7185        `),t(),e(1668,`
7186    `),t(),e(1669,`
7187
7188    `),n(1670,"h4",4),e(1671,"5.5 Sizing hooks"),t(),e(1672,`
7189
7190    `),n(1673,"app-sg-caption",45),e(1674,"[skeletonHeight] \u2014 default is 400px; match it to the loaded body"),t(),e(1675,`
7191    `),n(1676,"div",5),e(1677,`
7192        `),n(1678,"div",54),e(1679,`
7193            `),n(1680,"app-admin-dashboard-card",106),e(1681,`
7194                `),c(1682,"p",8),e(1683,`
7195            `),t(),e(1684,`
7196        `),t(),e(1685,`
7197        `),n(1686,"div",54),e(1687,`
7198            `),n(1688,"app-admin-dashboard-card",107),e(1689,`
7199                `),c(1690,"p",8),e(1691,`
7200            `),t(),e(1692,`
7201        `),t(),e(1693,`
7202    `),t(),e(1694,`
7203
7204    `),n(1695,"app-sg-caption",45),e(1696,'[bodyClass] \u2014 replaces the default "card-body" wrapper class'),t(),e(1697,`
7205    `),n(1698,"div",5),e(1699,`
7206        `),n(1700,"div",6),e(1701,`
7207            `),n(1702,"app-admin-dashboard-card",108),e(1703,`
7208                `),n(1704,"p",8),e(1705,"No "),n(1706,"code"),e(1707,"card-body"),t(),e(1708," padding \u2014 for a table that should meet the card edge."),t(),e(1709,`
7209            `),t(),e(1710,`
7210        `),t(),e(1711,`
7211    `),t(),e(1712,`
7212
7213    `),n(1713,"app-sg-caption",45),e(1714,"[styleClass] \u2014 extra classes on the .card element itself"),t(),e(1715,`
7214    `),n(1716,"div",5),e(1717,`
7215        `),n(1718,"div",6),e(1719,`
7216            `),n(1720,"app-admin-dashboard-card",109),e(1721,`
7217                `),n(1722,"p",8),e(1723,"Used when a card has to match the height of its row neighbor."),t(),e(1724,`
7218            `),t(),e(1725,`
7219        `),t(),e(1726,`
7220    `),t(),e(1727,`
7221
7222    `),n(1728,"h4",4),e(1729,"5.6 Naming gotcha"),t(),e(1730,`
7223    `),n(1731,"app-inline-alert",26),e(1732,`
7224        The title input is `),n(1733,"code"),e(1734,"panelTitle"),t(),e(1735,", not "),n(1736,"code"),e(1737,"title"),t(),e(1738,`. A static
7225        `),n(1739,"code"),e(1740,'title="\u2026"'),t(),e(1741,` would also land on the host element as the native HTML attribute and
7226        the browser's own tooltip would cover any PrimeNG tooltip inside the card.
7227    `),t(),e(1742,`
7228
7229    `),n(1743,"p",110),e(1744,"Last action: "),n(1745,"strong"),e(1746),t()(),e(1747,`
7230`),t(),e(1748,`
7231
7232`),n(1749,"div",2),e(1750,`
7233    `),n(1751,"h3"),e(1752,"6. Known divergences"),t(),e(1753,`
7234    `),n(1754,"p",1),e(1755,`
7235        Where the system disagrees with itself. Cosmetic or structural \u2014 none of these is a bug.
7236        Counts are a grep snapshot taken `),n(1756,"strong"),e(1757),t(),e(1758,` and drift.
7237    `),t(),e(1759,`
7238
7239    `),n(1760,"h4",111),e(1761,"6a. Spacing fights the base"),t(),e(1762,`
7240    `),n(1763,"p",1),e(1764,`
7241        `),n(1765,"code"),e(1766,".card"),t(),e(1767," already sets "),n(1768,"code"),e(1769,"margin: 0 0 1rem 0"),t(),e(1770,", yet "),n(1771,"strong"),e(1772,"20 files"),t(),e(1773,`
7242        add `),n(1774,"code"),e(1775,"mb-4"),t(),e(1776," and "),n(1777,"strong"),e(1778,"17"),t(),e(1779," add "),n(1780,"code"),e(1781,"mb-3"),t(),e(1782,`. 37 files overriding a
7243        default that already exists.
7244    `),t(),e(1783,`
7245
7246    `),n(1784,"h4",111),e(1785,"6b. Padding fights the base"),t(),e(1786,`
7247    `),n(1787,"p",1),e(1788,`
7248        `),n(1789,"code"),e(1790,".card"),t(),e(1791," sets "),n(1792,"code"),e(1793,"padding: 1rem"),t(),e(1794,"; "),n(1795,"strong"),e(1796,"85 occurrences"),t(),e(1797,` override
7249        it \u2014 `),n(1798,"code"),e(1799,"p-0"),t(),e(1800," \xD713, plus "),n(1801,"code"),e(1802,"pb-0"),t(),e(1803,", "),n(1804,"code"),e(1805,"pt-0 pb-0"),t(),e(1806,`,
7250        `),n(1807,"code"),e(1808,"p-4"),t(),e(1809,", "),n(1810,"code"),e(1811,"py-1"),t(),e(1812,`. When that many call sites reject a default, the default
7251        is wrong for a meaningful share of uses.
7252    `),t(),e(1813,`
7253
7254    `),n(1814,"h4",111),e(1815,"6c. Three radius sources"),t(),e(1816,`
7255    `),n(1817,"table",112),e(1818,`
7256        `),n(1819,"thead")(1820,"tr")(1821,"th"),e(1822,"Where"),t(),n(1823,"th"),e(1824,"Value"),t()()(),e(1825,`
7257        `),n(1826,"tbody"),e(1827,`
7258            `),S(1828,Px,12,4,null,null,t0),t(),e(1830,`
7259    `),t(),e(1831,`
7260    `),n(1832,"p",1),e(1833,`
7261        Only the first follows the token. The other two will not move when a club theme changes
7262        `),n(1834,"code"),e(1835,"--theme-card-radius"),t(),e(1836,". A fourth source, "),n(1837,"code"),e(1838,".card-shadow"),t(),e(1839,`'s hardcoded
7263        `),n(1840,"code"),e(1841,"8px"),t(),e(1842,`, was deleted with the dead flavors \u2014 see 6f.
7264    `),t(),e(1843,`
7265
7266    `),n(1844,"h4",111),e(1845,"6d. "),n(1846,"code"),e(1847,".table-card"),t(),e(1848," is a sibling, not a modifier"),t(),e(1849,`
7267    `),n(1850,"p",1),e(1851,`
7268        It sits in the same selector list as `),n(1852,"code"),e(1853,".card"),t(),e(1854,`, so it works standalone \u2014 both
7269        samples in 3b are identical. But `),n(1855,"strong"),e(1856,"12 files"),t(),e(1857,` write
7270        `),n(1858,"code"),e(1859,'class="card table-card"'),t(),e(1860,`, which reads like a modifier and applies the same
7271        declarations twice. Harmless; conceptually wrong.
7272    `),t(),e(1861,`
7273
7274    `),n(1862,"h4",111),e(1863,"6e. The CSS does not enforce the coupling it implies"),t(),e(1864,`
7275    `),n(1865,"p",1),e(1866,`
7276        Nine flavors are standalone rules that apply to any element; three are nested inside the base
7277        rule and are inert without `),n(1867,"code"),e(1868,".card"),t(),e(1869,`. The names are shaped identically either way, so
7278        the `),n(1870,"em"),e(1871,"Needs "),n(1872,"code"),e(1873,".card"),t()(),e(1874,` column in 3a is the only place the difference is visible.
7279        Six of the nine standalone ones are `),n(1875,"strong"),e(1876,"never"),t(),e(1877," used without "),n(1878,"code"),e(1879,".card"),t(),e(1880,` in
7280        practice \u2014 they are card flavors whose CSS just does not say so.
7281    `),t(),e(1881,`
7282
7283    `),n(1882,"h5",111),e(1883,"Should the standalone ones be nested into "),n(1884,"code"),e(1885,".card"),t(),e(1886,"?"),t(),e(1887,`
7284    `),n(1888,"p",1),e(1889),n(1890,"strong"),e(1891,"not as a sweep."),t(),e(1892,` It would enforce a
7285        coupling that is already true in practice, and two separate things block 
7285it.
7286    `),t(),e(1893,`
7287    `),n(1894,"p",1),e(1895,`
7288        `),n(1896,"strong"),e(1897,"One \u2014 three of them really are used off-card,"),t(),e(1898,` so nesting breaks them
7289        outright. `),n(1899,"code"),e(1900,"horizontal-form"),t(),e(1901," (75 off-card vs 41 on), "),n(1902,"code"),e(1903,"edit-card"),t(),e(1904,`
7290        (3, all `),n(1905,"code"),e(1906,'class="message-groups edit-card p-0"'),t(),e(1907,"), "),n(1908,"code"),e(1909,"video-card"),t(),e(1910,` (1 of its 2,
7291        `),n(1911,"code"),e(1912,'class="video-card cursor-pointer"'),t(),e(1913,"). See the "),n(1914,"em"),e(1915,"Used without it"),t(),e(1916,` column.
7292    `),t(),e(1917,`
7293    `),n(1918,"p",1),e(1919,`
7294        `),n(1920,"strong"),e(1921,"Two \u2014 nesting raises specificity from "),n(1922,"code"),e(1923,"0,1,0"),t(),e(1924," to "),n(1925,"code"),e(1926,"0,2,0"),t(),e(1927,`,
7295        and existing overrides flip.`),t(),e(1928," The clearest case is a "),n(1929,"em"),e(1930,"global"),t(),e(1931,`
7296        `),n(1932,"code"),e(1933,".blog-card"),t(),e(1934," rule in "),n(1935,"code"),e(1936,"cms/pb-blog.scss:9"),t(),e(1937,` setting border, width and
7297        flex-basis: it wins on source order today and would start losing to a nested
7298        `),n(1938,"code"),e(1939,".card.blog-card"),t(),e(1940,`, silently changing blog-roll layout. Component-scoped overrides
7299        are less exposed \u2014 Angular's emulated encapsulation appends
7300        `),n(1941,"code"),e(1942,"[_ngcontent-x]"),t(),e(1943,", putting them at "),n(1944,"code"),e(1945,"0,2,0"),t(),e(1946,` already, so those stay a
7301        source-order tie.
7302    `),t(),e(1947,`
7303    `),n(1948,"p",1),e(1949,`
7304        So usage-cleanliness and specificity-safety are `),n(1950,"em"),e(1951,"different"),t(),e(1952,` tests, and
7305        `),n(1953,"code"),e(1954,"blog-card"),t(),e(1955,` passes the first while failing the second. Only
7306        `),n(1956,"code"),e(1957,"settings-card"),t(),e(1958,", "),n(1959,"code"),e(1960,"team-card"),t(),e(1961,", "),n(1962,"code"),e(1963,"admin-card"),t(),e(1964,` and
7307        `),n(1965,"code"),e(1966,"filters-card"),t(),e(1967,` clear both. If nesting is ever wanted, do it one class at a time with
7308        eyes on the affected surface \u2014 never as a batch.
7309    `),t(),e(1968,`
7310
7311    `),n(1969,"h5",111),e(1970,"Would BEM naming ("),n(1971,"code"),e(1972,".card--edit"),t(),e(1973,") be better?"),t(),e(1974,`
7312    `),n(1975,"p",1),e(1976,`
7313        In the abstract yes: `),n(1977,"code"),e(1978,'class="card card--edit"'),t(),e(1979,` states the coupling, and it
7314        namespaces generic names like `),n(1980,"code"),e(1981,".edit-card"),t(),e(1982," and "),n(1983,"code"),e(1984,".team-card"),t(),e(1985,` which
7315        currently sit in the global namespace where anything can collide with them.
7316    `),t(),e(1986,`
7317    `),n(1987,"p",1),e(1988,`
7318        `),n(1989,"strong"),e(1990,`But the useful half of BEM here is the nesting, not the name, and they are
7319        separable.`),t(),e(1991," "),n(1992,"code"),e(1993,".card--accented"),t(),e(1994,` proved it \u2014 perfect BEM naming, written
7320        standalone, modified nothing. A name that `),n(1995,"em"),e(1996,"says"),t(),e(1997,` modifier without a selector that
7321        `),n(1998,"em"),e(1999,"enforces"),t(),e(2e3,` it is decoration. Renaming would touch roughly 200 template files for zero
7322        behaviour change; nesting touches no templates and actually enforces. Since nesting is itself
7323        not recommended above, `),n(2001,"strong"),e(2002,`the standing decision is to change neither and document
7324        both`),t(),e(2003,` \u2014 which is what this section is.
7325    `),t(),e(2004,`
7326
7327    `),n(2005,"h4",111),e(2006),t(),e(2007,`
7328    `),n(2008,"p",1),e(2009,`
7329        Seven card selectors were defined in SCSS with `),n(2010,"strong"),e(2011,"zero"),t(),e(2012,` usages anywhere and have
7330        been deleted: flavors `),n(2013,"code"),e(2014,"card--accented"),t(),e(2015,", "),n(2016,"code"),e(2017,"card-shadow"),t(),e(2018,`,
7331        `),n(2019,"code"),e(2020,"image-header"),t(),e(2021,", "),n(2022,"code"),e(2023,"club-network-card"),t(),e(2024," and "),n(2025,"code"),e(2026,"view-only-card"),t(),e(2027,`, and
7332        slots `),n(2028,"code"),e(2029,"card-action"),t(),e(2030," and "),n(2031,"code"),e(2032,"card-body-head"),t(),e(2033,`.
7333    `),t(),e(2034,`
7334    `),n(2035,"p",1),e(2036,`
7335        Two things were checked first, and both are the reason this was safe rather than lucky.
7336        `),n(2037,"strong"),e(2038,"One:"),t(),e(2039," "),n(2040,"code"),e(2041,"view-only-card"),t(),e(2042,` shared its rule block with
7337        `),n(2043,"code"),e(2044,"edit-card"),t(),e(2045," and "),n(2046,"code"),e(2047,"settings-card"),t(),e(2048,", so only its "),n(2049,"em"),e(2050,"selector"),t(),e(2051,` came out
7338        \u2014 the rule is load-bearing and still applies to its two live siblings.
7339        `),n(2052,"strong"),e(2053,"Two:"),t(),e(2054," "),n(2055,"code"),e(2056,".card-shadow"),t(),e(2057,` the class is unrelated to
7340        `),n(2058,"code"),e(2059,"--theme-card-shadow"),t(),e(2060,` the token; the class is gone, the token is live and drives
7341        every card's shadow. Deleting a name that merely resembles a live one is the easy mistake here.
7342    `),t(),e(2061,`
7343    `),n(2062,"p",1),e(2063,`
7344        Searched before deleting: every `),n(2064,"code"),e(2065,".html"),t(),e(2066,", "),n(2067,"code"),e(2068,".ts"),t(),e(2069,", "),n(2070,"code"),e(2071,".cs"),t(),e(2072,`,
7345        `),n(2073,"code"),e(2074,".cshtml"),t(),e(2075,", "),n(2076,"code"),e(2077,".sql"),t(),e(2078," and "),n(2079,"code"),e(2080,".json"),t(),e(2081,` in the repo, on the bare token
7346        rather than `),n(2082,"code"),e(2083,'class="\u2026"'),t(),e(2084,", plus "),n(2085,"code"),e(2086,"@extend"),t(),e(2087,` across all SCSS. The one thing
7347        no search can reach is `),n(2088,"strong"),e(2089,"club-authored CMS content in the database"),t(),e(2090,` \u2014 if a
7348        club's saved page HTML references one of these classes, it loses that styling silently.
7349        `),n(2091,"code"),e(2092,"image-header"),t(),e(2093," and "),n(2094,"code"),e(2095,"club-net
7349work-card"),t(),e(2096,` are the two where that is even
7350        plausible.
7351    `),t(),e(2097,`
7352`),t(),e(2098,`
7353
7354`),n(2099,"div",2),e(2100,`
7355    `),n(2101,"h3"),e(2102,"7. Defects"),t(),e(2103,`
7356    `),n(2104,"p",1),e(2105,`
7357        Things that are wrong, not merely inconsistent, roughly in severity order. Counts are a grep
7358        snapshot taken `),n(2106,"strong"),e(2107),t(),e(2108,` and drift.
7359    `),t(),e(2109,`
7360
7361    `),n(2110,"h4",111),e(2111,"7a. "),n(2112,"code"),e(2113,"app-roster-card-content"),t(),e(2114," renders player-supplied HTML unsanitized, on public pages"),t(),e(2115,`
7362    `),n(2116,"app-inline-alert",113),e(2117,`
7363        `),n(2118,"strong"),e(2119,"Highest-severity defect in the card family."),t(),e(2120,` A player-entered value reaches
7364        `),n(2121,"code"),e(2122,"bypassSecurityTrustHtml"),t(),e(2123,` without escaping, on routes any visitor can load.
7365    `),t(),e(2124,`
7366    `),n(2125,"ol",114),e(2126,`
7367        `),n(2127,"li"),e(2128,`
7368            A player edits their own college profile. `),n(2129,"code"),e(2130,"Twitter"),t(),e(2131,", "),n(2132,"code"),e(2133,"Instagram"),t(),e(2134,` and
7369            `),n(2135,"code"),e(2136,"School"),t(),e(2137," are "),n(2138,"code"),e(2139,"[MaxLength(250)]"),t(),e(2140,` free text with
7370            `),n(2141,"strong"),e(2142,"no format validation"),t(),e(2143,` \u2014 no regex, no allow-list
7371            (`),n(2144,"code"),e(2145,"SprocketSports.ViewModels/Shared/PlayerCollegeData.cs"),t(),e(2146,`).
7372        `),t(),e(2147,`
7373        `),n(2148,"li"),e(2149,`
7374            `),n(2150,"code"),e(2151,"getTwitter()"),t(),e(2152,` interpolates that value into an HTML anchor string with
7375            `),n(2153,"strong"),e(2154,"no escaping"),t(),e(2155,". "),n(2156,"code"),e(2157,"getInstagram()"),t(),e(2158,` is the same shape.
7376            `),n(2159,"code"),e(2160,"getHighlightVideo()"),t(),e(2161," gates on "),n(2162,"code"),e(2163,"startsWith('http')"),t(),e(2164,` but still
7377            interpolates unescaped into an `),n(2165,"code"),e(2166,"href"),t(),e(2167,`, so an attribute break-out survives the gate.
7378        `),t(),e(2168,`
7379        `),n(2169,"li"),e(2170,`
7380            The template renders those strings through the `),n(2171,"code"),e(2172,"safeHtml"),t(),e(2173,` pipe, which is
7381            `),n(2174,"code"),e(2175,"bypassSecurityTrustHtml"),t(),e(2176,` and nothing else \u2014 a deliberate instruction to
7382            Angular to skip sanitization.
7383        `),t(),e(2177,`
7384        `),n(2178,"li"),e(2179,`
7385            `),n(2180,"code"),e(2181,"app-roster-card-content"),t(),e(2182," renders on "),n(2183,"strong"),e(2184,"public"),t(),e(2185,` routes:
7386            `),n(2186,"code"),e(2187,"team-overview/roster/"),t(),e(2188,", "),n(2189,"code"),e(2190,"college-profile/team/"),t(),e(2191,`, and the
7387            page-builder `),n(2192,"code"),e(2193,"college-recruiting-content"),t(),e(2194,`.
7388        `),t(),e(2195,`
7389    `),t(),e(2196,`
7390    `),n(2197,"p",1),e(2198,`
7391        `),n(2199,"strong"),e(2200,"The tell that this is a bug and not a policy:"),t(),e(2201,` the same component renders
7392        `),n(2202,"code"),e(2203,"School"),t(),e(2204," through plain "),n(2205,"code"),e(2206,"[innerHTML]"),t(),e(2207," "),n(2208,"em"),e(2209,"without"),t(),e(2210,`
7393        `),n(2211,"code"),e(2212,"safeHtml"),t(),e(2213,` \u2014 so Angular sanitizes that one. One component, two treatments of
7394        equally untrusted data.
7395    `),t(),e(2214,`
7396    `),n(2215,"p",1),e(2216,`
7397        `),n(2217,"strong"),e(2218,"Fix:"),t(),e(2219," stop building HTML in TypeScript. Bind "),n(2220,"code"),e(2221,"[href]"),t(),e(2222,` (which runs
7398        through Angular's URL sanitizer) and `),n(2223,"code"),e(2224),t(),e(2225,` (which escapes) in the
7399        template, and `),n(2226,"code"),e(2227,"safeHtml"),t(),e(2228," is not needed. "),n(2229,"code"),e(2230,"getTwitter(showString = false)"),t(),e(2231,`
7400        already returns the bare handle, so half the work exists. Add `),n(2232,"code"),e(2233,'rel="noopener"'),t(),e(2234,`
7401        while in there.
7402    `),t(),e(2235,`
7403
7404    `),n(2236,"h4",111),e(2237,"7b. "),n(2238,"code"),e(2239,"overflow: hidden"),t(),e(2240," on the base clips overlays"),t(),e(2241,`
7405    `),n(2242,"app-inline-alert",74),e(2243,`
7406        Any PrimeNG dropdown, datepicker or multiselect rendered inside a card is clipped at the card
7407        edge unless it appends to body. `),n(2244,"strong"),e(2245,`Do not \u201Cfix\u201D this by removing
7408        `),n(2246,"code"),e(2247,"overflow: hidden"),t()(),e(2248,` \u2014 it is load-bearing for radius clipping on
7409        image headers and video cards. The fix stays `),n(2249,"code"),e(2250,'appendTo="body"'),t(),e(2251,` at the overlay.
7410    `),t(),e(2252,`
7411    `),n(2253,"p",115),e(2254,`
7412        Same root cause as the appendTo-body audits. Stated here because the card is where the
7413        clipping originates.
7414    `),t(),e(2255,`
7415
7416    `),n(2256,"h4",111),e(2257,"7c. "),n(2258,"code"),e(2259,".card-body"),t(),e(2260," has no base rule \u2014 and 89 files write it"),t(),e(2261,`
7417    `),n(2262,"p",1),e(2263,`
7418        There is no global `),n(2264,"code"),e(2265,".card-body"),t(),e(2266,` declaration anyw
7418here. It is styled only
7419        `),n(2267,"em"),e(2268,"inside"),t(),e(2269," "),n(2270,"code"),e(2271,".edit-card"),t(),e(2272,", "),n(2273,"code"),e(2274,".team-card"),t(),e(2275,", "),n(2276,"code"),e(2277,".admin-card"),t(),e(2278,`
7420        and a dozen component stylesheets. On a plain `),n(2279,"code"),e(2280,".card"),t(),e(2281,` it does nothing, so the 89
7421        files that write it are relying on a hook that may or may not resolve. `),n(2282,"code"),e(2283,".card-title"),t(),e(2284,`
7422        is worse: `),n(2285,"strong"),e(2286,"zero rules in the entire app"),t(),e(2287,`, 10 files using it \u2014 those are
7423        expecting Bootstrap, which is not loaded.
7424    `),t(),e(2288,`
7425
7426    `),n(2289,"h4",111),e(2290,"7d. "),n(2291,"code"),e(2292,"app-calendar-card"),t(),e(2293," throws when "),n(2294,"code"),e(2295,"endDate"),t(),e(2296," is omitted"),t(),e(2297,`
7427    `),n(2298,"p",1),e(2299,`
7428        `),n(2300,"code"),e(2301,"ngOnInit"),t(),e(2302,` does
7429        `),n(2303,"code"),e(2304,"new Date(utcDatePipe.transform(new Date(this.endDate)))"),t(),e(2305,` with no guard. With
7430        `),n(2306,"code"),e(2307,"endDate"),t(),e(2308," undefined that reaches Angular's "),n(2309,"code"),e(2310,"toDate"),t(),e(2311,`, which
7431        `),n(2312,"strong"),e(2313,"throws "),n(2314,"code"),e(2315,"RuntimeError 2311"),t()(),e(2316,` rather than returning null \u2014 so
7432        the whole view fails, not just the badge. The input is not marked required and nothing in the
7433        signature warns you; all eight real call sites happen to pass it, which is why this has never
7434        been hit in the product. Either default `),n(2317,"code"),e(2318,"endDate"),t(),e(2319," to "),n(2320,"code"),e(2321,"startDate"),t(),e(2322,` or
7435        guard the pipe call. Separately, `),n(2323,"code"),e(2324,"isMultidayEvent"),t(),e(2325,` is computed once in
7436        `),n(2326,"code"),e(2327,"ngOnInit"),t(),e(2328,`, so a later date change never restacks the badge.
7437    `),t(),e(2329,`
7438
7439    `),n(2330,"h4",111),e(2331,"7e. "),n(2332,"code"),e(2333,"app-promo-card"),t(),e(2334," throws when "),n(2335,"code"),e(2336,"features"),t(),e(2337," is omitted"),t(),e(2338,`
7440    `),n(2339,"p",1),e(2340,`
7441        The template reads `),n(2341,"code"),e(2342,"features.length"),t(),e(2343,` unguarded in one place and
7442        `),n(2344,"code"),e(2345,"features?.length"),t(),e(2346,` in two others. The unguarded read wins, so omitting
7443        `),n(2347,"code"),e(2348,"[features]"),t(),e(2349," throws. Same fix either way \u2014 default it to "),n(2350,"code"),e(2351,"[]"),t(),e(2352,`.
7444    `),t(),e(2353,`
7445
7446    `),n(2354,"h4",111),e(2355,"7f. "),n(2356,"code"),e(2357,"app-blog-card"),t(),e(2358," uses an anchor as a button"),t(),e(2359,`
7447    `),n(2360,"p",1),e(2361,`
7448        Its root is `),n(2362,"code"),e(2363,"a.card.blog-card"),t(),e(2364," with "),n(2365,"strong"),e(2366,"no "),n(2367,"code"),e(2368,"href"),t()(),e(2369,`, firing a
7449        `),n(2370,"code"),e(2371,"(click)"),t(),e(2372,` output. That is not keyboard-focusable and announces as a link that goes
7450        nowhere. `),n(2373,"code"),e(2374,".clickable-card"),t(),e(2375,` already exists as the sanctioned pattern \u2014
7451        semantics pick the element (navigation \u2192 anchor with an href, on-screen action \u2192
7452        button), and the class supplies only the look.
7453    `),t(),e(2376,`
7454
7455    `),n(2377,"h4",111),e(2378,"7g. "),n(2379,"code"),e(2380,"app-roster-card-content"),t(),e(2381,"'s mobile badge has an invalid background colour"),t(),e(2382,`
7456    `),n(2383,"p",1),e(2384,`
7457        The same \u201CCommitted\u201D badge is rendered twice and the two bindings disagree by a
7458        `),n(2385,"code"),e(2386,"#"),t(),e(2387,`:
7459    `),t(),e(2388,`
7460    `),n(2389,"table",116),e(2390,`
7461        `),n(2391,"thead")(2392,"tr")(2393,"th"),e(2394,"Rendering"),t(),n(2395,"th"),e(2396,"Binding"),t(),n(2397,"th"),e(2398,"Result"),t()()(),e(2399,`
7462        `),n(2400,"tbody"),e(2401,`
7463            `),n(2402,"tr"),e(2403,`
7464                `),n(2404,"td"),e(2405,"desktop ("),n(2406,"code"),e(2407,"d-none d-sm-block"),t(),e(2408,")"),t(),e(2409,`
7465                `),n(2410,"td")(2411,"code"),e(2412,'[style.backgroundColor]="bgColor"'),t()(),e(2413,`
7466                `),n(2414,"td")(2415,"code"),e(2416,"#003261"),t(),e(2417," \u2713"),t(),e(2418,`
7467            `),t(),e(2419,`
7468            `),n(2420,"tr"),e(2421,`
7469                `),n(2422,"td"),e(2423,"mobile ("),n(2424,"code"),e(2425,"d-block d-sm-none"),t(),e(2426,")"),t(),e(2427,`
7470                `),n(2428,"td")(2429,"code"),e(2430,`[style.backgroundColor]="'#' + bgColor"`),t()(),e(2431,`
7471                `),n(2432,"td",13)(2433,"code"),e(2434,"##003261"),t(),e(2435," \u2014 invalid, no background"),t(),e(2436,`
7472            `),t(),e(2437,`
7473        `),t(),e(2438,`
7474    `),t(),e(2439,`
7475    `),n(2440,"p",1),e(2441,`
7476        `),n(2442,"code"),e(2443,"bgColor"),t(),e(2444," is "),n(2445,"code"),e(2446,"#rrggbb"),t(),e(2447,": its own default is "),n(2448,"code"),e(2449,"'#003261'"),t(),e(2450,`, it is
7477        fed from `),n(2451,"code"),e(2452,"theme.colorPrimary"),t(),e(2453,` which is used elsewhere as a raw CSS value, and
7478        `),n(2454,"code"),e(2455,"contrastChecker"),t(),e(2456,` \u2014 which this component calls on it \u2014 requires
7479        `),n(2457,"code"),e(2458,"length === 7"),t(),e(2459,`. So the desktop binding is right and the mobile one is broken, which
7480        is the harder of the two to notice. One-character fix.
7481    `),t(),e(2460,`
7482
7483    `),n(2461,"h4",111),e(2462,"7h. "),n(2463,"code"),e(2464,"app-roster-card-content"),t(),e(2465," fires an HTTP request per card and discards the result"),t(),e(2466,`
7484    `),n(2467,"p",1),e(2468,`
7485        When `),n(2469,"code"),e(2470,"player.hasPhoto"),t(),e(2471," is true, "),n(2472,"code"),e(2473,"ngOnInit"),t(),e(2474,` calls
7486        `),n(2475,"code"),e(2476,"getUserPhotoBase64Data()"),t(),e(2477," and assigns the result to "),n(2478,"code"),e(2479,"imageUrl"),t(),e(2480,`.
7487        `),n(2481,"strong")(2482,"code"),e(2483,"imageUrl"),t(),e(2484," is never read"),t(),e(2485,` \u2014 the photo slot renders
7488        `),n(2486,"code"),e(2487,"<ng-content>"),t(),e(2488,` projected by the consumer instead. A 30-player roster fires 30
7489        photo fetches whose results are thrown away.
7490    `),t(),e(2489,`
7491    `),n(2490,"p",1),e(2491,`
7492        Same component, more dead weight: `),n(2492,"code"),e(2493,"hideHeight"),t(),e(2494,` and
7493        `),n(2495,"code"),e(2496,"hidePlayerCellPhone"),t(),e(2497,` are inputs with zero template references (only the
7494        commented-out call site passes them), and `),n(2498,"code"),e(2499,"playerHe
7494ight()"),t(),e(2500,`,
7495        `),n(2501,"code"),e(2502,"getEmail()"),t(),e(2503,", "),n(2504,"code"),e(2505,"viewProfile()"),t(),e(2506,", "),n(2507,"code"),e(2508,"loading"),t(),e(2509,`,
7496        `),n(2510,"code"),e(2511,"showProfileModal"),t(),e(2512," and "),n(2513,"code"),e(2514,"selectedPlayer"),t(),e(2515,` are all unreferenced by the
7497        template.
7498    `),t(),e(2516,`
7499
7500    `),n(2517,"h4",111),e(2518,"7i. "),n(2519,"code"),e(2520,"app-roster-card-content"),t(),e(2521," is card content, not a card \u2014 "),n(2522,"strong"),e(2523,"resolved"),t()(),e(2524,`
7501    `),n(2525,"p",1),e(2526,`
7502        Its root element is a bare `),n(2527,"code"),e(2528,".row"),t(),e(2529,`. That is not itself wrong \u2014 see the
7503        three-kinds table in section 4 \u2014 but the old name, `),n(2530,"code"),e(2531,"app-roster-card"),t(),e(2532,`, said
7504        card, so consumers had to discover the distinction by reading the template. Renamed to
7505        `),n(2533,"strong")(2534,"code"),e(2535,"app-roster-card-content"),t()(),e(2536,` with the component-library
7506        reorganization. Both live consumers already wrapped it correctly, so no call-site behaviour
7507        changed. The `),n(2537,"code"),e(2538,".roster-card"),t(),e(2539,` CSS class is untouched \u2014 it belongs to the
7508        consumer's wrapper, not the component.
7509    `),t(),e(2540,`
7510
7511    `),n(2541,"h4",111),e(2542,"7j. Three competing shadows, one of them hardcoded"),t(),e(2543,`
7512    `),n(2544,"table",112),e(2545,`
7513        `),n(2546,"thead")(2547,"tr")(2548,"th"),e(2549,"Where"),t(),n(2550,"th"),e(2551,"Value"),t()()(),e(2552,`
7514        `),n(2553,"tbody"),e(2554,`
7515            `),S(2555,Ax,12,4,null,null,t0),t(),e(2557,`
7516    `),t(),e(2558,`
7517    `),n(2559,"p",1),e(2560,`
7518        The `),n(2561,"code"),e(2562,".dashboard-card"),t(),e(2563,` value bypasses the token layer entirely and will not follow
7519        a theme change.
7520    `),t(),e(2564,`
7521
7522    `),n(2565,"h4",111),e(2566,"7k. "),n(2567,"code"),e(2568,"--base-header: var(--blue-1000)"),t(),e(2569," on every card"),t(),e(2570,`
7523    `),n(2571,"p",1),e(2572,`
7524        Declared on the base for every card in the app. Whether that is the intended blue is studied
7525        in `),n(2573,"a",85),e(2574,"blues & links"),t(),e(2575,`, where
7526        it turns out to be one of several unrelated blues.
7527    `),t(),e(2576,`
7528`),t(),e(2577,`
7529
7530`),n(2578,"div",2),e(2579,`
7531    `),n(2580,"h3"),e(2581,"8. "),n(2582,"code"),e(2583,"app-teaser-card"),t(),e(2584," \u2014 the list-row card"),t(),e(2585,`
7532    `),n(2586,"p",1),e(2587,`
7533        The newest card, and the only one that is `),n(2588,"strong"),e(2589,"deliberately half a thing"),t(),e(2590,`. It owns
7534        the `),n(2591,"code"),e(2592,".card"),t(),e(2593,` chrome and a flush image rail; the row that sits beside the rail is a
7535        separate CSS contract called `),n(2594,"strong")(2595,"code"),e(2596,"list-row"),t()(),e(2597,`
7536        (`),n(2598,"code"),e(2599,"3_modules/components/list-row.scss"),t(),e(2600,`). Two pieces because the row has to work
7537        inside a raw `),n(2601,"code"),e(2602,".card"),t(),e(2603,` too \u2014 the roster pages use it without any card component.
7538        Full write-up: `),n(2604,"code"),e(2605,"docs/ui-migration-and-review/**/Result-Row-CSS-Contract.md"),t(),e(2606,`.
7539    `),t(),e(2607,`
7540    `),n(2608,"app-inline-alert",74),e(2609,`
7541        `),n(2610,"strong"),e(2611,"One live consumer, nothing eyeballed."),t(),e(2612,` Only the programs search page uses this,
7542        and no permutation below has been visually confirmed by a human. Three inputs
7543        (`),n(2613,"code"),e(2614,"mobileFull"),t(),e(2615,", "),n(2616,"code"),e(2617,"link"),t(),e(2618,", "),n(2619,"code"),e(2620,"clickable"),t(),e(2621,") have "),n(2622,"strong"),e(2623,"zero"),t(),e(2624,`
7544        call sites anywhere in the app \u2014 8f and 8g are the first time they have ever rendered.
7545    `),t(),e(2625,`
7546
7547    `),n(2626,"div",63),e(2627,`
7548        `),k(2628,Ox,1,0,"ng-container",64),e(2629,`
7549
7550        `),n(2630,"h4",4),e(2631,"8a. The real shape \u2014 rail + "),n(2632,"code"),e(2633,"list-row"),t(),e(2634," content"),t(),e(2635,`
7551        `),n(2636,"p",1),e(2637,`
7552            What programs search renders. Three rows chosen to stress the three things most likely to
7553            be wrong: a `),n(2638,"strong"),e(2639,"short"),t(),e(2640," title next to a "),n(2641,"strong"),e(2642,"wrapping"),t(),e(2643,` one (do the
7554            meta columns still line up?), a row whose team cell is `),n(2644,"strong"),e(2645,"empty"),t(),e(2646,`, and a row
7555            with `),n(2647,"strong"),e(2648,"no image"),t(),e(2649,`.
7556        `),t(),e(2650,`
7557        `),n(2651,"app-sg-caption",7),e(2652,"rail 80px \xB7 ratio 4/3 \xB7 body absorbs the leftover width"),t(),e(2653,`
7558        `),S(2654,Wx,48,8,null,null,wt),n(2656,"p",1),e(2657,`
7559            `),n(2658,"strong"),e(2659,"The size scale."),t(),e(2660," A bare "),n(2661,"code"),e(2662,"list-row-item"),t(),e(2663,` takes its content
7560            width; the four modifiers pin a cell to a fixed track above 768px, which is what actually
7561            holds a column when the cell's content varies row to row:
7562            `),n(2664,"code"),e(2665,"list-row-item-sm"),t(),e(2666," 3rem, "),n(2667,"code"),e(2668,"list-row-item-md"),t(),e(2669,` 5rem,
7563            `),n(2670,"code"),e(2671,"list-row-item-lg"),t(),e(2672," 7rem, "),n(2673,"code"),e(2674,"list-row-item-xl"),t(),e(2675,` 10rem. The fifth,
7564            `),n(2676,"code"),e(2677,"list-row-item-fluid"),t(),e(2678,`, is a definite 24rem like the others but wraps its
7565            contents instead of clipping them, and a row-level opt-in lets it stretch (8h). Below
7566            768px all of them flow to content \u2014 there are no columns to hold.
7567            `),c(2679,"br"),e(2680,`
7568            The steps are `),n(2681,"strong"),e(2682,"not"),t(),e(2683,` an arithmetic progression, deliberately. Each one was
7569            added to fit a real cell rather than to continue a pattern \u2014 `),n(2684,"code"),e(2685,"-xl"),t(),e(2686,` is 10rem
7570            because that is what active-teams' \u201CRoster Visible\u201D toggle needs, and cells are
7571            `),n(2687,"code"),e(2688,"min-width: 0; white-space: nowrap"),t(),e(2689,`, so an undersized step overflows visibly
7572            instead of widening. Add the next step when a cell needs it, at the width it needs.
7573        `),t(),e(2690,`
7574        `),n(2691,"p",1),e(2692,`
7575            `),n(2693,"strong"),e(2694,"What to check."),t(),e(2695,` The calendar, team, cart and options cells should form four
7576            straight columns down the three rows. If the short-title row's cells sit left of the
7577            long-title row's, the rail is not resolving to the same width on every row \u2014 that is
7578            the entire reason this contract exists. Row\xA02's empty team cell must still
7579            `),n(2696,"em"),e(2697,"hold"),t(),e(2698,` its 5rem column, or every cell after it shifts. The rail sits against the
7580            right edge; the body takes whatever is left.
7581        `),t(),e(2699,`
7582
7583        `),n(2700,"h4",4),e(2701,"8b. Uniform height regardless of what was uploaded"),t(),e(2702,`
7584        `),n(2703,"p",1),e(2704,`
7585            `),n(2705,"code"),e(2706,"aspect-ratio"),t(),e(2707," lives on the "),n(2708,"strong"),e(2709,"rail"),t(),e(2710,`, not on the
7586            `),n(2711,"code"),e(2712,"<img>"),t(),e(2713,`. So these three cards are the same height even though their source
7587            files range from square to 4.55:1. If the ratio were on the image, each row would take its
7588            height from the upload and the list would look ragged.
7589        `),t(),e(2714,`
7590        `),n(2715,"app-sg-caption",7),e(2716,"identical "),n(2717,"code"),e(2718,"aspectRatio"),t(),e(2719,", wildly different source files"),t(),e(2720,`
7591        `),S(2721,Rx,7,2,null,null,mx),n(2723,"h4",4),e(2724,"8c. "),n(2725,"code"),e(2726,"aspectRatio"),t(),e(2727," sets a floor, not a fixed height"),t(),e(2728,`
7592        `),n(2729,"p",1),e(2730,`
7593            In rail mode the rail's width is definite and its height is stretched to the row, so the
7594            ratio's real job is to give the row a `),n(2731,"strong"),e(2732,"minimum"),t(),e(2733,` height \u2014
7595            `),n(2734,"code"),e(2735,"width \xF7 ratio"),t(),e(2736,`. Content taller than the floor wins and the rail stretches
7596            past its ratio (the crop absorbs it). That is why uniformity holds only while every body is
7597            shorter than the floor.
7598        `),t(),e(2737,`
7599        `),n(2738,"table",117),e(2739,`
7600            `),n(2740,"thead")(2741,"tr")(2742,"th",118),e(2743,"ratio"),t(),n(2744,"th",29),e(2745,"floor at 80px"),t(),n(2746,"th"),e(2747,"effect"),t()()(),e(2748,`
7601            `),n(2749,"tbody"),e(2750,`
7602                `),S(2751,Lx,11,3,null,null,Ji),t(),e(2753,`
7603        `),t(),e(2754,`
7604        `),S(2755,qx,10,4,null,null,Ji),n(2757,"app-sg-caption",7),e(2758,"same ratios, but a body tall enough to beat the floor"),t(),e(2759,`
7605        `),S(2760,Vx,14,4,null,null,Ji),n(2762,"h4",4),e(2763,"8d. "),n(2764,"code"),e(2765,"imageWidth"),t()(),e(2766,`
7606        `),n(2767,"p",1),e(2768,`
7607            Desktop rail width. Reaches the CSS as `),n(2769,"code"),e(2770,"--teaser-card-thumb-width"),t(),e(2771,`, set with
7608            `),n(2772,"code"),e(2773,"style.setProperty"),t(),e(2774," on the host rather than "),n(2775,"code"),e(2776,"ngStyle"),t(),e(2777,` \u2014 the
7609            app's established pattern for custom properties. Changing this also moves the height floor,
7610            since the floor is `),n(2778,"code"),e(2779,"width \xF7 ratio"),t(),e(2780,`.
7611        `),t(),e(2781,`
7612        `),S(2782,zx,10,4,null,null,K),n(2784,"h4",4),e(2785,"8e. "),n(2786,"code"),e(2787,"imageFit"),t(),e(2788," and the empty rail"),t(),e(2789,`
7613        `),n(2790,"app-sg-caption",7),e(2791,"cover (crops to fill) \xB7 contain (letterboxes) \xB7 no image at all"),t(),e(2792,`
7614        `),n(2793,"app-teaser-card",119),e(2794,`
7615            `),n(2795,"div",3)(2796,"code"),e(2797,"cover"),t(),e(2798," \u2014 a 4.55:1 logo cropped hard to fill an 80\xD760 rail."),t(),e(2799,`
7616        `),t(),e(2800,`
7617        `),n(2801,"app-teaser-card",120),e(2802,`
7618            `),n(2803,"div",3)(2804,"code"),e(2805,"contain"),t(),e(2806," \u2014 whole logo visible, letterboxed against "),n(2807,"code"),e(2808,"--grey-200"),t(),e(2809,"."),t(),e(2810,`
7619        `),t(),e(2811,`
7620        `),n(2812,"app-teaser-card"),e(2813,`
7621            `),n(2814,"div",3),e(2815,"No "),n(2816,"code"),e(2817,"image"),t(),e(2818," \u2014 the rail is the bare "),n(2819,"code"),e(2820,"--grey-200"),t(),e(2821," placeholder, not a broken-image icon."),t(),e(2822,`
7622        `),t(),e(2823,`
7623
7624        `),n(2824,"h4",4),e(2825,"8f. Interactive mode \u2014 never used in the app"),t(),e(2826,`
7625        `),n(2827,"app-inline-alert",26),e(2828,`
7626            `),n(2829,"strong"),e(2830,"The two modes are mutually exclusive by contract."),t(),e(2831,` A passive card (every
7627            other sample on this page) lets the projected content own its links and buttons. An
7628            interactive card covers itself with an overlay, so `),n(2832,"strong"),e(2833,`projected content must hold no
7629            controls at all`),t(),e(2834,` \u2014 the overlay sits on top of them and they stop being
7630            reachable. Nothing enforces this; it is on you at review time.
7631        `),t(),e(2835,`
7632        `),n(2836,"p",1),e(2837,`
7633            Either mode also puts `),n(2838,"code"),e(2839,".clickable-card"),t(),e(2840,` on the root, so the card picks up the
7634            app's sanctioned click affordance \u2014 `),n(2841,"code"),e(2842,"cursor: pointer"),t(),e(2843,` and the
7635            `),n(2844,"code"),e(2845,"--grey-75"),t(),e(2846,` hover fill from section\xA03. This is the split 7f argues for:
7636            the overlay supplies the `),n(2847,"em"),e(2848,"semantics"),t(),e(2849,", the class supplies only the "),n(2850,"em"),e(2851,"look"),t(),e(2852,`.
7637            Hover any card in this group.
7638        `),t(),e(2853,`
7639        `),n(2854,"app-sg-caption",7)(2855,"code"),e(2856,"[link]"),t(),e(2857," \u2192 an "),n(2858,"code"),e(2859,"<a>"),t(),e(2860," overlay: real href, so Enter, ctrl+click and middle-click all work"),t(),e(2861,`
7640        `),n(2862,"app-teaser-card",121),e(2863,`
7641            `),n(2864,"div",3),e(2865,`
7642                Whole card navigates. Tab to it \u2014 focus should ring the `),n(2866,"em"),e(2867,"entire"),t(),e(2868,` card, not the image.
7643            `),t(),e(2869,`
7644        `),t(),e(2870,`
7645        `),n(2871,"app-sg-caption",7)(2872,"code"),e(2873,"[clickable]"),t(),e(2874," \u2192 a "),n(2875,"code"),e(2876,"<button>"),t(),e(2877," overlay: Enter "),n(2878,"em"),e(2879,"and"),t(),e(2880," Space"),t(),e(2881,`
7646        `),n(2882,"app-teaser-card",122),g("cardClick",function(){return o.onAction("teaser-card clickable overlay")}),e(2883,`
7647            `),n(2884,"div",3),e(2885,"Whole card is a button. Last action fired: "),n(2886,"code"),e(2887),t()(),e(2888,`
7648        `),t(),e(2889,`
7649        `),n(2890,"app-sg-caption",7),e(2891,"the defect: interactive with no "),n(2892,"code"),e(2893,"ariaLabel"),t()(),e(2894,`
7650        `),n(2895,"app-teaser-card",123),g("cardClick",function(){return o.onAction("teaser-card unnamed overlay")}),e(2896,`
7651            `),n(2897,"div",124),e(2898,`
7652                No `),n(2899,"code"),e(2900,"ariaLabel"),t(),e(2901,`. The overlay has no text of its own, so this is a
7653                `),n(2902,"strong"),e(2903,"button with no accessible name"),t(),e(2904,` \u2014 WCAG 4.1.2. A screen reader announces
7654                "button" and nothing else. `),n(2905,"code"),e(2906,"ariaLabel"),t(),e(2907,` is required, not optional, and the
7655                component does not make you supply it.
7656            `),t(),e(2908,`
7657        `),t(),e(2909,`
7658
7659        `),n(2910,"h4",4),e(2911,"8g. "),n(2912,"code"),e(2913,"mobileFull"),t(),e(2914," \u2014 banner mode"),t(),e(2915,`
7660        `),n(2916,"p",1),e(2917,`
7661            Below 768px the wrapper flips to a column and the image runs full width. This is also the
7662            only mode where `),n(2918,"code"),e(2919,"aspectRatio"),t(),e(2920," governs "),n(2921,"em"),e(2922,"strictly"),t(),e(2923,` rather than as a floor,
7663            because the width becomes definite and the height auto.
7664        `),t(),e(2924,`
7665        `),n(2925,"app-inline-alert",74),e(2926,`
7666            `),n(2927,"strong"),e(2928,"You cannot see this side-by-side."),t(),e(2929,` The switch is a
7667            `),n(2930,"code"),e(2931,"@media"),t(),e(2932," query on the "),n(2933,"em"),e(2934,"viewport"),t(),e(2935,`, not a container query, so narrowing
7668            this column does nothing \u2014 you have to narrow the browser window past 768px. That is
7669            worth knowing on its own: any future container-relative variant of this card needs
7670            `),n(2936,"code"),e(2937,"@container"),t(),e(2938,`, not a media query.
7671        `),t(),e(2939,`
7672        `),n(2940,"app-sg-caption",7),e(2941,'[mobileFull]="true" \u2014 narrow the window below 768px to see it change'),t(),e(2942,`
7673        `),n(2943,"app-teaser-card",125),e(2944,`
7674            `),n(2945,"div",3),e(2946,`
7675                Wide rail at desktop. Under 768px this should become a 3:1 banner with the text stacked
7676                beneath it.
7677            `),t(),e(2947,`
7678        `),t(),e(2948,`
7679
7680        `),n(2949,"h4",4),e(2950,"8h. "),n(2951,"code"),e(2952,"list-row-item-fluid"),t(),e(2953,` \u2014 the step for a collection, and the row
7681            variant that lets it stretch`),t(),e(2954,`
7682        `),n(2955,"p",1),e(2956,`
7683            For a cell holding a `),n(2957,"strong"),e(2958,"variable-length collection"),t(),e(2959,` rather than one value
7684            \u2014 assign-staff's team chips, where one person carries one chip and the next carries
7685            ten. Above 768px it is a `),n(2960,"strong"),e(2961,"definite 24rem"),t(),e(2962,`, exactly like the four size steps,
7686            which is how it holds its column. What makes it different is that it keeps the mobile
7687            layer's behaviour at desktop: the cell is itself a wrapping flex container with
7688            `),n(2963,"code"),e(2964,"white-space: normal"),t(),e(2965,`, so a collection with no upper bound makes the row
7689            `),n(2966,"em"),e(2967,"taller"),t(),e(2968,` instead of wider. 24rem was measured, not designed \u2014 it clears the
7690            widest chip on that page (17.6rem: a long team name plus its role) and fits two short
7691            chips side by side.
7692        `),t(),e(2969,`
7693        `),n(2970,"p",1),e(2971,`
7694            `),n(2972,"strong"),e(2973,"Two shapes, and they are not the same layout."),t(),e(2974,` On its own the cell is fixed
7695            at 24rem and the body absorbs all the slack. Add
7696            `),n(2975,"code"),e(2976,"list-row--fixed-body"),t(),e(2977," "),n(2978,"em"),e(2979,"to the row"),t(),e(2980,` and the definite half moves: the body
7697            pins to 12rem, the rail grows, and the fluid cell is released to
7698            `),n(2981,"code"),e(2982,"flex: 1 1 auto"),t(),e(2983,` so it takes every remaining pixel. Reach for the variant when
7699            the collection deserves the leftover width more than the identity does. Both are below,
7700            same five rows.
7701        `),t(),e(2984,`
7702        `),n(2985,"app-inline-alert",126),e(2986,`
7703            `),n(2987,"strong"),e(2988,"Exactly one half of the row must have a content-independent basis"),t(),e(2989,` \u2014
7704            the cell's 24rem in the first shape, the body's 12rem in the second. Give both halves
7705            `),n(2990,"code"),e(2991,"auto"),t(),e(2992,` and the cell starts at a different x on every row (measured 509 / 230 /
7706            526 / 396px across four rows); give both a length and the slack is thrown away. Adjust the
7707            rem values, not the structure. An earlier cut of this put the number on the rail with
7708            `),n(2993,"code"),e(2994,":has()"),t(),e(2995,` \u2014 that is gone, and n
7708o rule here needs it.
7709        `),t(),e(2996,`
7710        `),n(2997,"app-sg-caption",7),e(2998,"cell fixed 24rem \xB7 body absorbs the slack \xB7 content wraps"),t(),e(2999,`
7711        `),S(3e3,Gx,32,3,null,null,wt),n(3002,"app-sg-caption",7),e(3003,"+ "),n(3004,"code"),e(3005,"list-row--fixed-body"),t(),e(3006," \xB7 body fixed 12rem \xB7 cell stretches"),t(),e(3007,`
7712        `),S(3008,Yx,32,3,null,null,wt),n(3010,"p",1),e(3011,`
7713            `),n(3012,"strong"),e(3013,"What to check."),t(),e(3014,` In both sets every chip cell starts at the same x
7714            \u2014 including the empty row's \u201CNot assigned\u201D note \u2014 and so does the
7715            \u201CAssign to team\u201D cell, which keeps its own 7rem track. In the first set the chip
7716            cell should stay the same width as you resize while the name column grows; in the second it
7717            should grow with the window instead, fitting more chips per line before it wraps. Narrow the
7718            window and rows should get taller rather than spill.
7719        `),t(),e(3015,`
7720        `),n(3016,"p",1),e(3017,`
7721            `),n(3018,"strong"),e(3019,"Two known limits, both measured 2026-09-05."),t(),e(3020,` At exactly 768px the
7722            `),n(3021,"code"),e(3022,"--fixed-body"),t(),e(3023,` variant's action column goes ragged by ~15px on a row whose single
7723            chip cannot shrink. And a chip genuinely cannot shrink: the fourth row's 53-character team
7724            name is wrapped in `),n(3024,"code"),e(3025,"text-overflow-ellipsis"),t(),e(3026,", which does "),n(3027,"em"),e(3028,"nothing"),t(),e(3029,` here
7725            \u2014 it is an inline span inside a `),n(3030,"code"),e(3031,"nowrap"),t(),e(3032,` pill, so there is no axis for
7726            `),n(3033,"code"),e(3034,"overflow: hidden"),t(),e(3035,` to act on. That chip pokes ~28px left into the name column at
7727            768px, and below ~450px it overflows the card outright (13px at 414, 52px at 375). The fix
7728            belongs to the pill, not to this layout.
7729        `),t(),e(3036,`
7730    `),t(),e(3037,`
7731
7732    `),n(3038,"h4",4),e(3039,"Invariants you cannot infer from the markup"),t(),e(3040,`
7733    `),n(3041,"p",1),e(3042,`
7734        Flex has no template, so the contract leans on the rules below, and nothing in the code
7735        enforces any of them.
7736        This list is the cost of choosing classnames over a CSS grid track list \u2014 grid would have
7737        made the first two unnecessary.
7738    `),t(),e(3043,`
7739    `),n(3044,"table",10),e(3045,`
7740        `),n(3046,"thead")(3047,"tr")(3048,"th",127),e(3049,"Rule"),t(),n(3050,"th"),e(3051,"Why, and what breaks"),t()()(),e(3052,`
7741        `),n(3053,"tbody"),e(3054,`
7742            `),n(3055,"tr"),e(3056,`
7743                `),n(3057,"td")(3058,"strong"),e(3059,"Render every cell, even when empty"),t()(),e(3060,`
7744                `),n(3061,"td"),e(3062,"Put the "),n(3063,"code"),e(3064,"@if"),t(),e(3065," "),n(3066,"em"),e(3067,"inside"),t(),e(3068,` the cell, never around it. An omitted
7745                    cell shifts every cell after it, on that row only, and the columns go ragged.
7746                    Row\xA02 of 8a is the test case.`),t(),e(3069,`
7747            `),t(),e(3070,`
7748            `),n(3071,"tr"),e(3072,`
7749                `),n(3073,"td")(3074,"strong"),e(3075,"Give every meta cell a size class"),t()(),e(3076,`
7750                `),n(3077,"td"),e(3078,`Unless its content is identical on every row. An unsized
7751                    `),n(3079,"code"),e(3080,"list-row-item"),t(),e(3081,` is content-width, so varying content \u2014 a jersey
7752                    number present on some rows and blank on others \u2014 drifts every cell after it.
7753                    The admin roster jersey cell is the one live exception: it is
7754                    `),n(3082,"code"),e(3083,"-sm"),t(),e(3084,` while displaying and unsized while editing, because edit mode
7755                    renders the same label and input on every row.`),t(),e(3085,`
7756            `),t(),e(3086,`
7757            `),n(3087,"tr"),e(3088,`
7758                `),n(3089,"td")(3090,"strong"),e(3091,"No wrapping utilities on a "),n(3092,"code"),e(3093,"list-row-item"),t()()(),e(3094,`
7759                `),n(3095,"td")(3096,"code"),e(3097,".nowrap"),t(),e(3098," ties with "),n(3099,"code"),e(3100,".list-row-item"),t(),e(3101,` on specificity and wins.
7760                    The mobile layer deliberately leaves `),n(3102,"code"),e(3103,"white-space"),t(),e(3104,` unset so cells can
7761                    wrap; a stray `),n(3105,"code"),e(3106,".nowrap"),t(),e(3107,` forces a nowrap date range to overflow a 320px
7762                    screen. Two such classes were removed from programs search for exactly this.`),t(),e(3108,`
7763            `),t(),e(3109,`
7764            `),n(3110,"tr"),e(3111,`
7765                `),n(3112,"td")(3113,"strong"),e(3114,"768px is shared across two files"),t()(),e(3115,`
7766                `),n(3116,"td")(3117,"code"),e(3118,"teaser-card.component.scss"),t(),e(3119," and "),n(3120,"code"),e(3121,"list-row.scss"),t(),e(3122,` both key off
7767                    768 and must agree. Each carries a one-line comment naming the other. Every query
7768                    in both is `),n(3123,"code"),e(3124,"min-width"),t(),e(3125,` \u2014 deliberately, since the app has three
7769                    competing conventions for this boundary (`),n(3126,"code"),e(3127,"768"),t(),e(3128,", "),n(3129,"code"),e(3130,"767"),t(),e(3131,`,
7770                    `),n(3132,"code"),e(3133,"767.98"),t(),e(3134,") and the "),n(3135,"code"),e(3136,"@include sm"),t(),e(3137,"/"),n(3138,"code"),e(3139,"sm-min"),t(),e(3140,` mixins
7771                    overlap at 767.`),t(),e(3141,`
7772            `),t(),e(3142,`
7773            `),n(3143,"tr"),e(3144,`
7774                `),n(3145,"td")(3146,"strong"),e(3147,"Interactive mode takes the whole card"),t()(),e(3148,`
7775                `),n(3149,"td"),e(3150,"Set "),n(3151,"code"),e(3152,"link"),t(),e(3153," or "),n(3154,"code"),e(3155,"clickable"),t(),e(3156,` and the projected content must
7776                    contain no links or buttons, and `),n(3157,"code"),e(3158,"ariaLabel"),t(),e(3159," becomes mandatory. See 8f."),t(),e(3160,`
7777            `),t(),e(3161,`
7778            `),n(3162,"tr"),e(3163,`
7779                `),n(3164,"td")(3165,"strong"),e(3166,"A stretching cell needs a definite body"),t()(),e(3167,`
7780                `),n(3168,"td")(3169,"code"),e(3170,"list-row-item-fluid"),t(),e(3171,` stretches only under
7781                    `),n(3172,"code"),e(3173,"list-row--fixed-body"),t(),e(3174,`, which pins the body to 12rem and releases the
7782                    cell. The two halves are coupled and neither classname says so: a row basis of
7783                    `),n(3175,"code"),e(3176,"auto"),t(),e(3177,` on both halves resolves to content width and the column goes
7784                    ragged, and a width back on the cell stops it stretching. Adjust the rem values,
7785                    not the structure. See 8h.`),t(),e(3178,`
7786            `),t(),e(3179,`
7787        `),t(),e(3180,`
7788    `),t(),e(3181,`
7789
7790    `),n(3182,"h4",4),e(3183,"Open issues"),t(),e(3184,`
7791    `),n(3185,"table",10),e(3186,`
7792        `),n(3187,"thead")(3188,"tr")(3189,"th",30),e(3190,"Issue"),t(),n(3191,"th"),e(3192,"Detail"),t()()(),e(3193,`
7793        `),n(3194,"tbody"),e(3195,`
7794            `),n(3196,"tr"),e(3197,`
7795                `),n(3198,"td"),e(3199,"Body width \u2014 "),n(3200,"strong"),e(3201,"settled"),t()(),e(3202,`
7796                `),n(3203,"td"),e(3204,"The body no longer has one. It is "),n(3205,"code"),e(3206,"flex: 1 1 0"),t(),e(3207,` and absorbs whatever the
7797                    meta rail leaves; the rail is `),n(3208,"code"),e(3209,"flex: 0 0 auto"),t(),e(3210,` and sized by its cells.
7798                    The old 45/55/65% scale was a `),n(3211,"em"),e(3212,"definite"),t(),e(3213,` width with
7799                    `),n(3214,"code"),e(3215,"flex-shrink: 0"),t(),e(3216,`, so a page whose rail needed more than the remainder
7800                    pushed it off the viewport \u2014 which is what the admin roster did at every
7801                    width. Alignment was always coming from the definite `),n(3217,"code"),e(3218,"-sm"),t(),e(3219,"/"),n(3220,"code"),e(3221,"-md"),t(),e(3222,"/"),n(3223,"code"),e(3224,"-lg"),t(),e(3225,`
7802                    cells, never from the body percentage.`),t(),e(3226,`
7803            `),t(),e(3227,`
7804            `),n(3228,"tr"),e(3229,`
7805                `),n(3230,"td"),e(3231,"Uniformity has ~8px of headroom"),t(),e(3232,`
7806                `),n(3233,"td"),e(3234,`80px at 4/3 gives a 60px floor; a two-line body is ~52px. One wrapping title pushes
7807                    that row taller and breaks the uniform look. A `),n(3235,"code"),e(3236,"min-height"),t(),e(3237,` on the row is
7808                    the direct lever; the ratio is the indirect one. Row\xA02 of 8a shows it.`),t(),e(3238,`
7809            `),t(),e(3239,`
7810            `),n(3240,"tr"),e(3241,`
7811                `),n(3242,"td"),e(3243,"Empty cells cost ~1rem on mobile"),t(),e(3244,`
7812                `),n(3245,"td"),e(3246,"Below 768 the cells flow with a "),n(3247,"code"),e(3248,"column-gap"),t(),e(3249,`, so an empty cell collapses
7813                    to zero width but still contributes a gap either side. `),n(3250,"code"),e(3251,":empty"),t(),e(3252,` cannot
7814                    collapse it because `),n(3253,"code"),e(3254,"preserveWhitespaces: true"),t(),e(3255,` is set in
7815                    `),n(3256,"code"),e(3257,"tsconfig.json"),t(),e(3258,`. Accepted: it replaced an empty cell that used to eat a
7816                    hard 50% of the mobile meta line.`),t(),e(3259,`
7817            `),t(),e(3260,`
7818            `),n(3261,"tr"),e(3262,`
7819                `),n(3263,"td"),e(3264,"Columns do not align below 768px"),t(),e(3265,`
7820                `),n(3266,"td"),e(3267,`By decision, not by accident. The size classes switch off and cells flow to content
7821                    width, so a short date range shifts what follows. The reasoning is that a stacked
7822                    card has no column for the eye to track \u2014 but it `),n(3268,"em"),e(3269,"is"),t(),e(3270,` a narrowing of a
7823                    stated requirement, so it is written down rather than assumed.`),t(),e(3271,`
7824            `),t(),e(3272,`
7825            `),n(3273,"tr"),e(3274,`
7826                `),n(3275,"td"),e(3276,"No "),n(3277,"code"),e(3278,".spec.ts"),t()(),e(3279,`
7827                `),n(3280,"td"),e(3281,"Five of the nine components on this page have one. This does not."),t(),e(3282,`
7828            `),t(),e(3283,`
7829            `),n(3284,"tr"),e(3285,`
7830                `),n(3286,"td")(3287,"code"),e(3288,"link"),t(),e(3289," is not called "),n(3290,"code"),e(3291,"routerLink"),t(),e(3292," on purpose"),t(),e(3293,`
7831                `),n(3294,"td"),e(3295,"Angular's "),n(3296,"code"),e(3297,"RouterLink"),t(),e(3298," selector is a bare "),n(3299,"code"),e(3300,"[routerLink]"),t(),e(3301,`, so
7832                    naming the input that would bind the directive to the host `),n(3302,"em"),e(3303,"as well"),t(),e(3304,` as the
7833                    input \u2014 giving the host `),n(3305,"code"),e(3306,'tabindex="0"'),t(),e(3307,` with a click-only listener,
7834                    i.e. a focusable element no keyboard can activate. `),n(3308,"code"),e(3309,"app-pill"),t(),e(3310,` and
7835                    `),n(3311,"code"),e(3312,"app-tag"),t(),e(3313,` still carry that name and that defect (19 bindings between
7836                    them); registered, not fixed.`),t(),e(3314,`
7837            `),t(),e(3315,`
7838        `),t(),e(3316,`
7839    `),t(),e(3317,`
7840`),t(),e(3318,`
7841`)),s&2){let x=ue(996);i(28),p(o.snapshotDate),i(34),p(o.flavors.length),i(460),f(`
7842        `,o.flavors.length,` classes, all of them in use. Anything defined and unused has been
7843        removed rather than documented \u2014 if it is unused, it is not worth a reader's attention.
7844    `),i(2),m("isInline",!0),i(45),f(` did. The naming was inverted from the coupling. Both were
7845        deleted as unused on `,o.snapshotDate,`, so the question is now moot in practice \u2014 it is
7846        recorded only so nobody reintroduces `),i(40),E(o.flavors),i(16),m("isInline",!0),i(25),f(`, which is the only
7847        reason it survived the `,o.snapshotDate,` scrub. Any number here can be low. Grep the bare
7848        token across `),i(462),m("isInline",!0),i(21),m("isInline",!0),i(28),m("ngTemplateOutlet",x)("ngTemplateOutletContext",ie(112,_e,o.nullCardDoc)),i(9),m("image",o.imageType.CHECKLIST),i(5),m("image",o.imageType.CALENDAR)("showButton",!0),i(5),m("image",o.imageType.RECEIPT)("showCard",!1),i(9),E(o.imageTypeList),i(12),p(o.imageType.FLAG),i(9),m("ngTemplateOutlet",x)("ngTemplateOutletContext",ie(114,_e,o.userInfoCardDoc)),i(9),m("entity",o.demoUser)("fields",o.demoUserFields)("isEditable",!0),i(8),m("entity",o.demoUser)("fields",o.demoUserFields),i(7),m("ngTemplateOutlet",x)("ngTemplateOutletContext",ie(116,_e,o.staffCardDoc)),i(9),m("clubUser",o.demoStaff),i(8),m("clubUser",o.demoStaffBare),i(7),m("ngTemplateOutlet",x)("ngTemplateOutletContext",ie(118,_e,o.blogCardDoc)),i(9),m("blogImage",o.demoBlogImage)("blogSavedOn",o.demoEventStart),i(5),m("blogSavedOn",o.demoEventStart),i(5),m("blogImage",o.demoBlogImage)("showClubLogo",!0)("blogSavedOn",o.demoEventStart),i(4),m("isInline",!0),i(30),m("ngTemplateOutlet",x)("ngTemplateOutletContext",ie(120,_e,o.calendarCardDoc)),i(7),m("startDate",o.demoEventStart)("endDate",o.demoEventStart)("clubEventTypeID",o.calendarEventType.GAME),i(2),m("startDate",o.demoEventStart)("endDate",o.demoEventStart)("clubEventTypeID",o.calendarEventType.PRACTICE),i(2),m("startDate",o.demoEventStart)("endDate",o.demoEventStart)("clubEventTypeID",o.calendarEventType.CLUB),i(2),m("startDate",o.demoEventStart)("endDate",o.demoEventStart),i(2),m("startDate",o.demoEventStart)("endDate",o.demoEventEnd)("clubEventTypeID",o.calendarEventType.GAME),i(2),m("startDate",o.demoEventStart)("endDate",o.demoEventStart)("clubEventTypeID",o.calendarEventType.CLUB)("isDraft",!0),i(3),m("isInline",!0),i(35),m("ngTemplateOutlet",x)("ngTemplateOutletContext",ie(122,_e,o.rosterCardDoc)),i(2),m("isInline",!0),i(21),m("player",o.demoRosterPlayer)("collegeProfileSettings",o.demoRosterSettings)("showProfileButton",!0),i(9),m("player",o.demoRosterPlayer)("collegeProfileSettings",o.demoRosterSettings),i(19),m("ngTemplateOutlet",x)("ngTemplateOutletContext",ie(124,_e,o.promoCardDoc)),i(5),m("features",o.promoFeatures),i(5),m("ngTemplateOutlet",x)("ngTemplateOutletContext",ie(126,_e,o.facilityCardDoc)),i(25),m("routerLink","/admin/styleguide/global/admin-vs-member"),i(38),m("hasSettings",!0),i(35),m("hasSettings",!0),i(82),f(`
7849            loading: `,o.liveLoading,`
7850        `),i(3),f(`
7851            error: `,o.liveError,`
7852        `),i(7),m("hasSettings",!0)("loading",o.liveLoading)("error",o.liveError),i(21),m("loading",!0),i(15),m("error",!0),i(9),m("error",!0),i(18),m("loading",!0),i(8),m("loading",!0),i(43),m("isInline",!0),i(15),p(o.lastAction),i(11),p(o.snapshotDate),i(71),E(o.radiusSources),i(61),f(`
7853        Asked and answered `,o.snapshotDate,": "),i(117),f("6f. Dead flavors and slots \u2014 removed ",o.snapshotDate),i(101),p(o.snapshotDate),i(9),m("isInline",!0),i(108),p("{{ }}"),i(18),m("isInline",!0),i(313),E(o.shadowSources),i(18),m("routerLink","/admin/styleguide/global/blues-and-links"),i(35),m("isInline",!0),i(20),m("ngTemplateOutlet",x)("ngTemplateOutletContext",ie(128,_e,o.teaserCardDoc)),i(26),E(o.teaserRows),i(67),E(o.teaserNaturalRatios),i(30),E(o.teaserRatios),i(4),E(o.teaserRatios),i(5),E(o.teaserRatios),i(22),E(o.teaserWidths),i(11),m("image",o.teaserImg.veryWide),i(8),m("image",o.teaserImg.veryWide),i(26),m("isInline",!0),i(35),m("image",o.teaserImg.square)("link",V(130,sx)),i(20),m("image",o.teaserImg.square)("clickable",!0),i(5),p(o.lastAction),i(8),m("image",o.teaserImg.square)("clickable",!0),i(30),m("isInline",!0),i(18),m("image",o.teaserImg.wide)("mobileFull",!0)("aspectRatio","3 / 1"),i(42),m("isInline",!0),i(15),E(o.fluidRows),i(8),E(o.fluidRows)}},dependencies:[De,Fe,Pe,$,J,le,un,ot,Sr,Sn,En,Cn,vn,yn,Mn,Oa,ut,X],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var a0=(a,r)=>
7853r.intent,Jx=(a,r)=>r.icon,Zx=(a,r)=>r.title,r0=(a,r)=>r.className;function e1(a,r){if(a&1&&(e(0,`
7854                    `),n(1,"th"),e(2),t(),e(3,`
7855                `)),a&2){let l=r.$implicit;i(2),p(l)}}function t1(a,r){if(a&1&&(e(0,`
7856                                `),c(1,"br"),e(2),L(3,"number")),a&2){let l=u().$implicit,d=u();i(2),f("",ze(3,1,d.intentUsage[l.intent].toastUses),` toasts
7857                            `)}}function n1(a,r){if(a&1&&(e(0,`
7858                                `),c(1,"span",36),e(2,`
7859                                `),n(3,"div",37),e(4),t(),e(5,`
7860                                `),n(6,"div",38),e(7),t(),e(8,`
7861                            `)),a&2){let l=u().$implicit;i(),W("background-color",l.hex),i(3),p(l.hex),i(3),p(l.token)}}function i1(a,r){a&1&&(e(0,`
7862                                `),n(1,"span",39),e(2,"\u2014"),t(),e(3,`
7863                            `))}function a1(a,r){if(a&1&&(e(0,`
7864                        `),n(1,"td"),e(2,`
7865                            `),v(3,n1,9,4)(4,i1,4,0),t(),e(5,`
7866                    `)),a&2){let l=r.$implicit;i(3),y(l?3:4)}}function r1(a,r){if(a&1&&(e(0,`
7867                `),n(1,"tr"),e(2,`
7868                    `),n(3,"td"),e(4,`
7869                        `),n(5,"code"),e(6),t(),e(7,`
7870                        `),n(8,"div",34),e(9),v(10,t1,4,3),t(),e(11,`
7871                    `),t(),e(12,`
7872                    `),S(13,a1,6,1,null,null,da),n(15,"td"),e(16,`
7873                        `),c(17,"p-badge",35),e(18,`
7874                    `),t(),e(19,`
7875                `),t(),e(20,`
7876            `)),a&2){let l=r.$implicit,d=u();i(6),p(l.intent),i(3),f(`
7877                            `,d.intentUsage[l.intent].alertType,` alerts
7878                            `),i(),y(d.intentUsage[l.intent].toastUses?10:-1),i(3),E(l.cells),i(4),m("value",d.distinctToday(l))("severity",d.distinctToday(l)<=3?"success":"danger")}}function o1(a,r){if(a&1&&(e(0,`
7879                            `),c(1,"span",36),e(2,`
7880                            `),n(3,"div",37),e(4),t(),e(5,`
7881                            `),n(6,"div",38),e(7),t(),e(8,`
7882                            `),n(9,"div",42),e(10),t(),e(11,`
7883                        `)),a&2){let l=u().$implicit;i(),W("background-color",l.accentProposed.hex),i(3),p(l.accentProposed.hex),i(3),p(l.accentProposed.token),i(3),f("",l.ratioProposed,":1")}}function l1(a,r){a&1&&(e(0,`
7884                            `),n(1,"span",43),e(2,"no change"),t(),e(3,`
7885                        `))}function s1(a,r){if(a&1&&(e(0,`
7886                `),n(1,"tr"),e(2,`
7887                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
7888                    `),n(7,"td"),e(8,`
7889                        `),c(9,"span",36),e(10,`
7890                        `),n(11,"div",37),e(12),t(),e(13,`
7891                        `),n(14,"div",38),e(15),t(),e(16,`
7892                    `),t(),e(17,`
7893                    `),n(18,"td"),e(19,`
7894                        `),c(20,"span",36),e(21,`
7895                        `),n(22,"div",37),e(23),t(),e(24,`
7896                        `),n(25,"div",38),e(26),t(),e(27,`
7897                    `),t(),e(28,`
7898                    `),n(29,"td"),e(30,`
7899                        `),c(31,"span",36),e(32,`
7900                        `),n(33,"div",37),e(34),t(),e(35,`
7901                        `),n(36,"div",38),e(37),t(),e(38,`
7902                        `),n(39,"div",40),e(40),t(),e(41,`
7903                    `),t(),e(42,`
7904                    `),n(43,"td"),e(44,`
7905                        `),v(45,o1,12,5)(46,l1,4,0),t(),e(47,`
7906                    `),n(48,"td",40)(49,"code"),e(50),t()(),e(51,`
7907                    `),n(52,"td"),e(53,`
7908                        `),c(54,"p-badge",41),e(55,`
7909                    `),t(),e(56,`
7910                `),t(),e(57,`
7911            `)),a&2){let l=r.$implicit,d=u();i(5),p(l.intent),i(4),W("background-color",l.fill.hex),i(3),p(l.fill.hex),i(3),p(l.fill.token),i(5),W("background-color",l.border.hex),i(3),p(l.border.hex),i(3),p(l.border.token),i(5),W("background-color",l.accentToday.hex),i(3),p(l.accentToday.hex),i(3),p(l.accentToday.token),i(2),j("text-red",l.changes),i(),f(`
7912                            `,l.ratioToday,`:1
7913                        `),i(5),y(l.changes?45:46),i(5),p(l.textModifier),i(4),m("value",d.distinctProposed(l))}}function d1(a,r){if(a&1&&(e(0,`
7914                `),n(1,"tr"),e(2,`
7915                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
7916                    `),n(7,"td"),e(8,`
7917                        `),n(9,"app-inline-alert",44),e(10,`
7918                            The registration window closes Friday at 5:00pm.
7919                        `),t(),e(11,`
7920                    `),t(),e(12,`
7921                    `),n(13,"td"),e(14,`
7922                        `),n(15,"app-inline-alert",45),e(16,`
7923                            The registration window closes Friday at 5:00pm.
7924                        `),t(),e(17,`
7925                    `),t(),e(18,`
7926                `),t(),e(19,`
7927            `)),a&2){let l=r.$implicit;i(5),p(l),i(4),m("isInline",!0)("alertType",l),i(6),m("isInline",!0)("alertType",l)("showIcon",!1)}}function m1(a,r){if(a&1&&(e(0,`
7928                `),n(1,"tr"),e(2,`
7929                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
7930                    `),n(7,"td"),e(8,`
7931                        `),n(9,"app-inline-alert",44),e(10,`
7932                            The registration window closes Friday at 5:00pm.
7933                        `),t(),e(11,`
7934                    `),t(),e(12,`
7935                    `),n(13,"td"),e(14,`
7936                        `),n(15,"app-inline-alert",45),e(16,`
7937                            The registration window closes Friday at 5:00pm.
7938                        `),t(),e(17,`
7939                    `),t(),e(18,`
7940                `),t(),e(19,`
7941            `)),a&2){let l=r.$implicit;i(5),p(l),i(4),m("isInline",!1)("alertType",l),i(6),m("isInline",!1)("alertType",l)("showIcon",!1)}}function c1(a,r){if(a&1&&(e(0,`
7942                `),n(1,"tr"),e(2,`
7943                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
7944                    `),n(7,"td"),e(8),t(),e(9,`
7945                    `),n(10,"td"),e(11,`
7946                        `),n(12,"app-inline-alert",46),e(13,`
7947                            Custom icon sample.
7948                        `),t(),e(14,`
7949                    `),t(),e(15,`
7950                `),t(),e(16,`
7951            `)),a&2){let l=r.$implicit;i(5),p(l.icon),i(3),p(l.uses),i(4),m("isInline",!0)("iconClass",l.icon)}}function p1(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;f(`
7952                                `,l.uses,`
7953                            `)}}function x1(a,r){a&1&&(e(0,`
7954                                `),n(1,"app-pill",50),e(2,"dead"),t(),e(3,`
7955                            `))}function h1(a,r){a&1&&(e(0,`
7956                                `),n(1,"app-pill",51),e(2,"yes"),t(),e(3,`
7957                            `))}function u1(a,r){if(a&1&&(e(0,`
7958                    `),n(1,"tr"),e(2,`
7959                        `),n(3,"td"),c(4,"span",49),t(),e(5,`
7960                        `),n(6,"td")(7,"code"),e(8),t()(),e(9,`
7961                        `),n(10,"td")(11,"span"),e(12,"The quick brown fox \u2014 12 spots left"),t()(),e(13,`
7962                        `),n(14,"td",40)(15,"code"),e(16),t()(),e(17,`
7963                        `),n(18,"td",40)(19,"code"),e(20),t()(),e(21,`
7964                        `),n(22,"td"),e(23,`
7965                            `),v(24,p1,1,1)(25,x1,4,0),t(),e(26,`
7966                        `),n(27,"td"),e(28),t(),e(29,`
7967                        `),n(30,"td"),e(31,`
7968                            `),v(32,h1,4,0),t(),e(33,`
7969                    `),t(),e(34,`
7970                `)),a&2){let l=r.$implicit;i(4),W("background-color",l.hex),i(4),f(".",l.className),i(3),ne(l.className),i(5),p(l.token),i(4),p(l.hex),i(4),y(l.uses?24:25),i(4),p(l.files),i(4),y(l.important?32:-1)}}function g1(a,r){if(a&1&&(e(0,`
7971        `),n(1,"h4",3),e(2),t(),e(3,`
7972        `),n(4,"p",0),e(5),t(),e(6,`
7973        `),n(7,"table",27),e(8,`
7974            `),n(9,"thead"),e(10,`
7975                `),n(11,"tr"),e(12,`
7976                    `),c(13,"th",47),e(14,`
7977                    `),n(15,"th",48),e(16,"Class"),t(),e(17,`
7978                    `),n(18,"th"),e(19,"Sample"),t(),e(20,`
7979                    `),n(21,"th",17),e(22,"Token"),t(),e(23,`
7980                    `),n(24,"th",5),e(25,"Resolves to"),t(),e(26,`
7981                    `),n(27,"th",6),e(28,"Uses"),t(),e(29,`
7982                    `),n(30,"th",6),e(31,"Files"),t(),e(32,`
7983                    `),n(33,"th",23),e(34,"!important"),t(),e(35,`
7984                `),t(),e(36,`
7985            `),t(),e(37,`
7986            `),n(38,"tbody"),e(39,`
7987                `),S(40,u1,35,10,null,null,r0),t(),e(42,`
7988        `),t(),e(43,`
7989    `)),a&2){let l=r.$implicit;i(2),p(l.title),i(3),p(l.blurb),i(35),E(l.rows)}}function f1(a,r){if(a&1&&(e(0,`
7990                `),n(1,"tr"),e(2,`
7991                    `),n(3,"td")(4,"code"),e(5),t()(),e(6,`
7992                    `),n(7,"td")(8,"span"),e(9,"The quick brown fox \u2014 12 spots left"),t()(),e(10,`
7993                    `),n(11,"td"),e(12),t(),e(13,`
7994                    `),n(14,"td"),e(15),t(),e(16,`
7995                    `),n(17,"td",40),e(18),t(),e(19,`
7996                `),t(),e(20,`
7997            `)),a&2){let l=r.$implicit;i(5),f(".",l.className),i(3),ne(l.className),i(4),p(l.uses),i(3),p(l.files),i(3),p(l.likelyIntent)}}var o0=(()=>{let r=class r{distinctToday(d){return new Set(d.cells.filter(s=>!!s).map(s=>s.hex.toLowerCase())).size}distinctProposed(d){return new Set([d.fill.hex,d.border.hex,d.accentProposed.hex].map(s=>s.toLowerCase())).size}constructor(d){this.siteDataService=d,this.snapshotDate="2026-08-19",this.intents=["error","warning","success","info","note"],this.comparisonColumns=["Text modifier","Alert icon","Alert border","Alert fill","Toast text","Toast fill"],this.comparison=[{intent:"error",cells:[{token:".text-red \u2192 --red-700",hex:"#a11019"},{token:"--error \u2192 --red-700",hex:"#a11019"},{token:"--red-800",hex:"#7d0d14"},{token:"--red-100",hex:"#fdb5b8"},{token:"--red-700",hex:"#a11019"},{token:"--red-100",hex:"#fdb5b8"}]},{intent:"warning",cells:[{token:".text-warning \u2192 --yellow-600",hex:"#d39c36"},{token:"--yellow-700",hex:"#b0782a"},{token:"--yellow-500",hex:"#f5bf41"},{token:"--yellow-50",hex:"#ffe1b8"},{token:"--yellow-800",hex:"#8b501f"},{token:"--yellow-50",hex:"#ffe1b8"}]},{intent:"success",cells:[{token:".text-green \u2192 --green-700",hex:"#3c894d"},{token:"--success \u2192 --green-600",hex:"#4ca45a"},{token:"--success",hex:"#4ca45a"},{token:"--green-50",hex:"#ddf3d9"},{token:"--green-800",hex:"#2d6944"},{token:"--green-50",hex:"#ddf3d9"}]},{intent:"info",cells:[{token:".text-blue \u2192 --blue-900",hex:"#054584"},{token:"--blue-800",hex:"#0e58bb"},{token:"--blue-900",hex:"#054584"},{token:"--blue-50",hex:"#ebf7ff"},{token:"--blue-800",hex:"#0e58bb"},{token:"--blue-50",hex:"#ebf7ff"}]},{intent:"note",cells:[{token:".text-grey \u2192 --grey-800",hex:"#595c60"},{token:"--grey-700",hex:"#7f8489"},{token:"--grey-800",hex:"#595c60"},{token:"--grey-100",hex:"#f1f5f8"}
7997,null,null]}],this.intentUsage={error:{alertType:103,toast:"showSiteErrorAlert",toastUses:2363},warning:{alertType:246,toast:"showSiteWarnAlert",toastUses:44},success:{alertType:9,toast:"showSiteSuccessAlert",toastUses:1121},info:{alertType:141,toast:"showSiteInfoAlert",toastUses:43},note:{alertType:21,toast:"",toastUses:0}},this.modifierGroups=[{title:"Intent",blurb:"Colors that carry meaning. These are the ones that must agree with \xA71.",rows:[{className:"text-red",token:"var(--red-700)",hex:"#a11019",uses:93,files:50,important:!1},{className:"text-dark-red",token:"var(--red-800)",hex:"#7d0d14",uses:6,files:1,important:!1},{className:"text-warn",token:"var(--yellow-600)",hex:"#d39c36",uses:25,files:14,important:!1},{className:"text-warning",token:"var(--yellow-600)",hex:"#d39c36",uses:38,files:25,important:!1},{className:"text-yellow",token:"var(--yellow-300)",hex:"#ffd338",uses:1,files:1,important:!1},{className:"text-green",token:"var(--green-700)",hex:"#3c894d",uses:75,files:38,important:!1},{className:"text-green-alt",token:"var(--green-600)",hex:"#4ca45a",uses:5,files:5,important:!1},{className:"text-blue",token:"var(--blue-900)",hex:"#054584",uses:31,files:13,important:!1}]},{title:"Neutral & emphasis",blurb:'No semantic intent \u2014 these say "quieter" or "louder", not "something is wrong".',rows:[{className:"text-color-default",token:"var(--base-text)",hex:"#2e3032",uses:6,files:2,important:!1},{className:"text-grey",token:"var(--grey-800)",hex:"#595c60",uses:480,files:147,important:!1},{className:"text-grey-lt",token:"var(--grey-600)",hex:"#9ea5aa",uses:163,files:72,important:!0},{className:"text-navy",token:"var(--blue-1000)",hex:"#001537",uses:59,files:38,important:!0},{className:"text-white",token:"var(--color-white)",hex:"#ffffff",uses:28,files:11,important:!0}]},{title:"Links & headers",blurb:"Tied to a role in the page, not to a status.",rows:[{className:"text-primary-link",token:"var(--primary-link)",hex:"#1d6ae5",uses:147,files:71,important:!1},{className:"header-emphasis",token:"var(--blue-1000)",hex:"#001537",uses:0,files:0,important:!1},{className:"text-header-blue",token:"var(--blue-800) @ .8 opacity",hex:"#0e58bb",uses:1,files:1,important:!1}]},{title:"Highlight",blurb:"Sets background-color, not color \u2014 it lives in this block but is not a text color.",rows:[{className:"text-highlight",token:"var(--color-highlight)",hex:"#ffff00",uses:1,files:1,important:!0}]}],this.definedTotal=1065,this.ghostModifiers=[{className:"text-muted",uses:233,files:76,likelyIntent:"de-emphasised text \u2192 .text-grey-lt"},{className:"text-danger",uses:87,files:46,likelyIntent:"error text \u2192 .text-red"},{className:"text-primary",uses:43,files:31,likelyIntent:"link/brand text \u2192 .text-primary-link"},{className:"text-success",uses:30,files:24,likelyIntent:"success text \u2192 .text-green"},{className:"text-secondary",uses:6,files:2,likelyIntent:"de-emphasised text \u2192 .text-grey"},{className:"text-info",uses:5,files:5,likelyIntent:"info text \u2192 .text-blue"},{className:"text-black",uses:3,files:3,likelyIntent:"body text \u2192 .text-color-default"}],this.ghostTotal=this.ghostModifiers.reduce((s,o)=>s+o.uses,0),this.customIconSamples=[{icon:"fas fa-exclamation-triangle",uses:21},{icon:"far fa-info-circle",uses:5},{icon:"fa fa-exclamation-triangle",uses:5},{icon:"fa fa-exclamation-triangle text-warn",uses:5},{icon:"fa-duotone fa-gear",uses:2},{icon:"line-height-4",uses:6}],this.proposal=[{intent:"error",fill:{token:"--red-100",hex:"#fdb5b8"},border:{token:"--red-800",hex:"#7d0d14"},accentToday:{token:"--red-700",hex:"#a11019"},accentProposed:{token:"--red-700",hex:"#a11019"},ratioToday:"4.79",ratioProposed:"4.79",textModifier:".text-red",changes:!1},{intent:"warning",fill:{token:"--yellow-50",hex:"#ffe1b8"},border:{token:"--yellow-500",hex:"#f5bf41"},accentToday:{token:"--yellow-700",hex:"#b0782a"},accentProposed:{token:"--yellow-800",hex:"#8b501f"},ratioToday:"3.00",ratioProposed:"5.12",textModifier:".text-warning (--yellow-600 today)",changes:!0},{intent:"success",fill:{token:"--green-50",hex:"#ddf3d9"},border:{token:"--success",hex:"#4ca45a"},accentToday:{token:"--green-600",hex:"#4ca45a"},accentProposed:{token:"--green-800",hex:"#2d6944"},ratioToday:"2.65",ratioProposed:"5.57",textModifier:".text-green (--green-700 today)",changes:!0},{intent:"info",fill:{token:"--blue-50",hex:"#ebf7ff"},border:{token:"--blue-900",hex:"#054584"},accentToday:{token:"--blue-800",hex:"#0e58bb"},accentProposed:{token:"--blue-800",hex:"#0e58bb"},ratioToday:"6.16",ratioProposed:"6.16",textModifier:".text-blue (--blue-900 today)",changes:!0},{intent:"note",fill:{token:"--grey-100",hex:"#f1f5f8"},border:{token:"--grey-800",hex:"#595c60"},accentToday:{token:"--grey-700",hex:"#7f8489"},accentProposed:{token:"--grey-800",hex:"#595c60"},ratioToday:"3.44",ratioProposed:"6.13",textModifier:"(none \u2014 .text-grey is a neutral, not this intent)",changes:!0}]}
vendor: 4,143 bytes, lines 7997-8023
7997ngOnInit(){this.siteDataService.hideSiteLoader()}fireSuccessToast(){this.siteDataService.showSiteSuccessAlert("Your changes have been saved.")}fireErrorToast(){this.siteDataService.showSiteErrorAlert("There was a problem saving your changes.")}fireWarnToast(){this.siteDataService.showSiteWarnAlert("Some registrations were skipped.")}fireInfoToast(){this.siteDataService.showSiteInfoAlert("This program closes for registration on Friday.")}fireDefaultGetToast(){this.siteDataService.showSiteErrorAlertDefaultGET()}clearToasts(){this.siteDataService.clearAllSiteAlerts()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-sg-system-alerts"]],standalone:!1,decls:965,vars:12,consts:[[1,"text-small","text-grey"],[3,"routerLink"],[1,"card"],[1,"mt-3"],[1,"table","table-bordered","sg-doc-table"],[2,"width","7rem"],[2,"width","5rem"],[1,"mt-4"],[2,"width","16rem"],[1,"sg-swatch","sg-swatch--sm",2,"background-color","#8b501f"],[1,"sg-swatch","sg-swatch--sm",2,"background-color","#b0782a"],[1,"sg-swatch","sg-swatch--sm",2,"background-color","#2d6944"],[1,"sg-swatch","sg-swatch--sm",2,"background-color","#4ca45a"],[1,"text-small","text-grey","mb-0"],[1,"sg-swatch","sg-swatch--sm",2,"background-color","#e0222b"],["side","shared"],[1,"table","table-bordered"],[2,"width","14rem"],[1,"mb-3"],["alertType","warning",3,"isInline"],[1,"mb-0"],["alertType","error",3,"isInline"],[2,"width","20rem"],[2,"width","6rem"],["type","button",1,"btn","btn-primary","btn-sm",3,"click"],["type","button",1,"btn","btn-naked","btn-sm",3,"click"],[1,"text-red"],[1,"table","table-bordered","table-hover"],[1,"form-error-message"],[1,"form-error"],[2,"position","relative","padding-left","1rem"],[1,"required-asterisk"],[1,"text-medium"],[1,"text-green"],[1,"text-small","text-grey-lt","mt-1"],[3,"value","severity"],[1,"sg-swatch","sg-swatch--block"],[1,"font-monospaced","text-small","mt-1"],[1,"text-small","text-grey-lt"],[1,"text-grey-lt"],[1,"text-small"],["severity","success",3,"value"],[1,"text-small","text-green"],[1,"text-grey-lt","text-small"],[3,"isInline","alertType"],[3,"isInline","alertType","showIcon"],["alertType","warning",3,"isInline","iconClass"],[2,"width","3rem"],[2,"width","12rem"],[1,"sg-swatch","sg-swatch--dot"],["status","error"],["status","warning"]],template:function(s,o){s&1&&(n(0,"h2"),e(1,"System Alerts & Colored Text"),t(),e(2,`
7998`),n(3,"p",0),e(4,`
7999    Every way the app tells a user something went right, went wrong, or needs attention:
8000    the `),n(5,"code"),e(6,"app-inline-alert"),t(),e(7,` banner/inline component, the site-wide toast
8001    (`),n(8,"code"),e(9,"SiteDataService.showSite*Alert"),t(),e(10," \u2192 "),n(11,"code"),e(12,"p-toast"),t(),e(13,`), the form-validation
8002    text, and the `),n(14,"code"),e(15,".text-*"),t(),e(16,` color modifiers in
8003    `),n(17,"code"),e(18,"1_base/modifiers.scss"),t(),e(19,`. Everything renders against the real partials \u2014 no
8004    harness-local styling. If a sample looks wrong, the component or the partial is wrong.
8005`),t(),e(20,`
8006`),n(21,"p",0),e(22,`
8007    Usage counts are a grep snapshot of `),n(23,"code"),e(24,"ClientApp/src/app"),t(),e(25,` taken
8008    `),n(26,"strong"),e(27),t(),e(28,`, excluding the styleguide itself. They are static \u2014 re-grep
8009    before trusting them for a sweep. Full write-up:
8010    `),n(29,"code"),e(30,"docs/ui-migration-and-review/**/System-Alert-Normalization.md"),t(),e(31,`.
8011`),t(),e(32,`
8012`),n(33,"p",0),e(34,`
8013    The `),n(35,"code"),e(36,"info"),t(),e(37,` intent's blue is studied separately in
8014    `),n(38,"a",1),e(39,"blues & links"),t(),e(40,` \u2014 where it
8015    turns out to be one of several unrelated blues, alongside the link color, the heading color, and
8016    an emerald-green PrimeNG primary nobody overrode.
8017`),t(),e(41,`
8018
8019`),n(42,"div",2),e(43,`
8020    `),n(44,"h3"),e(45,"1. What color is an error? (and a warning, and a success\u2026)"),t(),e(46,`
8021    `),n(47,"p",0),e(48,`
8022        `),n(49,"strong"),e(50,"Read across a row."),t(),e(51,` Each row is one semantic intent; each column is one
8023        mechanism that expresses it. If the app agreed with itself, a row would be one or tw
8023o colors.
8024        The `),n(52,"em"),e(53,"distinct"),t(),e(54,` column counts how many it actually is \u2014 computed from the swatches
8025        beside it, not typed in by hand.
8026    `),t(),e(55,`
8027
8028    `),n(56,"h4",3),e(57,"1a. Today"),t(),e(58,`
8029    `),n(59,"table",4),e(60,`
8030        `),n(61,"thead"),e(62,`
8031            `),n(63,"tr"),e(64,`
8032                `),n(65,"th",5),e(66,"Intent"),t(),e(67,`
8033                `),S(68,e1,4,1,null,null,K),n(70,"th",6),e(71,"Distinct"),t(),e(72,`
8034            `),t(),e(73,`
8035        `),t(),e(74,`
8036        `),n(75,"tbody"),e(76,`
8037            `),S(77,r1,21,5,null,null,a0),t(),e(79,`
8038    `),t(),e(80,`
8039
8040    `),n(81,"p",0),e(82,`
8041        `),n(83,"strong"),e(84,"Toast columns were fixed 2026-08-19"),t(),e(85,` (Wave 4) \u2014 they were stock PrimeNG
8042        Aura (`),n(86,"code"),e(87,"#dc2626"),t(),e(88,", "),n(89,"code"),e(90,"#16a34a"),t(),e(91,`\u2026) and now read from our ramps via
8043        `),n(92,"code"),e(93,"ng-theme.scss"),t(),e(94,`. Error went 6 colors \u2192 3, info 5 \u2192 3. Fire the toasts in
8044        \xA73 next to the banners in \xA72b and they now match.
8045    `),t(),e(95,`
8046
8047    `),n(96,"h4",7),e(97,"1b. Proposed \u2014 one accent per intent (Wave 3, not yet built)"),t(),e(98,`
8048    `),n(99,"p",0),e(100,`
8049        Every row above collapses to `),n(101,"strong"),e(102,"three"),t(),e(103," colors: a "),n(104,"em"),e(105,"fill"),t(),e(106,`, a
8050        `),n(107,"em"),e(108,"border"),t(),e(109,", and one "),n(110,"em"),e(111,"accent"),t(),e(112,` shared by the alert icon, the toast summary, and the
8051        text modifier. Fill and border are already agreed \u2014 the only open value is the accent.
8052    `),t(),e(113,`
8053    `),n(114,"p",0),e(115,`
8054        The accent must clear `),n(116,"strong"),e(117,"4.5:1 on its own fill"),t(),e(118,`, because the toast summary is
8055        16px text. Three intents fail that today, which is why they move. This is not only a toast
8056        concern: `),n(119,"code"),e(120,"success"),t(),e(121,` at 2.65:1 fails even the 3:1 non-text threshold
8057        (WCAG 1.4.11) for the banner icon that ships right now.
8058    `),t(),e(122,`
8059
8060    `),n(123,"table",4),e(124,`
8061        `),n(125,"thead"),e(126,`
8062            `),n(127,"tr"),e(128,`
8063                `),n(129,"th",5),e(130,"Intent"),t(),e(131,`
8064                `),n(132,"th"),e(133,"Fill"),t(),e(134,`
8065                `),n(135,"th"),e(136,"Border"),t(),e(137,`
8066                `),n(138,"th"),e(139,"Accent today"),t(),e(140,`
8067                `),n(141,"th"),e(142,"Accent proposed"),t(),e(143,`
8068                `),n(144,"th",8),e(145,"Text modifier that adopts it"),t(),e(146,`
8069                `),n(147,"th",6),e(148,"Distinct"),t(),e(149,`
8070            `),t(),e(150,`
8071        `),t(),e(151,`
8072        `),n(152,"tbody"),e(153,`
8073            `),S(154,s1,58,19,null,null,a0),t(),e(156,`
8074    `),t(),e(157,`
8075
8076    `),n(158,"p",0),e(159,`
8077        `),n(160,"strong"),e(161,"The honest cost:"),t(),e(162,` three intents change color on 616 inline alerts and it is
8078        visible. `),n(163,"code"),e(164,"--yellow-800"),t(),e(165,`
8079        `),c(166,"span",9),e(167,` is a brown where
8080        `),n(168,"code"),e(169,"--yellow-700"),t(),e(170,`
8081        `),c(171,"span",10),e(172,` is a gold;
8082        `),n(173,"code"),e(174,"--green-800"),t(),e(175,`
8083        `),c(176,"span",11),e(177,` is a forest green
8084        against today's lighter
8085        `),c(178,"span",12),e(179,`. Darker, and more
8086        serious-looking. Compare them against the live samples in \xA72 before deciding.
8087    `),t(),e(180,`
8088    `),n(181,"p",13),e(182,`
8089        `),n(183,"code"),e(184,"note"),t(),e(185," gains no text modifier: "),n(186,"code"),e(187,".text-grey"),t(),e(188,` is a general-purpose
8090        neutral with 480 usages and does not mean "this is a note". That distinction is why the
8091        `),n(189,"code"),e(190,"modifiers.scss"),t(),e(191,` block is grouped Intent / Neutral \u2014 only the Intent group
8092        converges. Still unresolved either way: the `),n(192,"code"),e(193,"--warning"),t(),e(194,` token, read by 20
8093        component stylesheets for validation glyphs, resolves to `),n(195,"code"),e(196,"--red-500"),t(),e(197,`
8094        `),c(198,"span",14),e(199," "),n(200,"code"),e(201,"#e0222b"),t(),e(202,`
8095        \u2014 named `),n(203,"em"),e(204,"warning"),t(),e(205,", colored "),n(206,"em"),e(207,"red"),t(),e(208,`, belonging to neither row.
8096    `),t(),e(209,`
8097`),t(),e(210,`
8098
8099`),n(211,"div",2),e(212,`
8100    `),n(213,"h3"),e(214,"2. "),n(215,"code"),e(216,"app-inline-alert"),t(),e(217," \u2014 full permutation matrix"),t(),e(218,`
8101    `),n(219,"app-sg-caption",15),e(220,'<app-inline-alert [alertType]="\u2026" [isInline]="\u2026" [showIcon]="\u2026">'),t(),e(221,`
8102    `),n(222,"p",0),e(223,`
8103        `),n(224,"strong"),e(225,"616"),t(),e(226," tags across "),n(227,"strong"),e(228,"316"),t(),e(229," files. "),n(230,"code"),e(231,"isInline"),t(),e(232,` picks the
8104        shape: `),n(233,"code"),e(234,"true"),t(),e(235," (442 uses) is bare text + a small solid icon, "),n(236,"code"),e(237,"false"),t(),e(238,`
8105        (53 uses) adds the `),n(239,"code"),e(240,".form-info"),t(),e(241,` padded band with a 5px left border.
8106        `),n(242,"strong"),e(243,"89"),t(),e(244," tags set no "),n(245,"code"),e(246,"alertType"),t(),e(247,` at all and fall through to
8107        `),n(248,"code"),e(249,"info"),t(),e(250,`.
8108    `),t(),e(251,`
8109
8110    `),n(252,"h4",3),e(253,"2a. Inline form \u2014 "),n(254,"code"),e(255,'[isInline]="true"'),t(),e(256," (442 uses)"),t(),e(257,`
8111    `),n(258,"table",16),e(259,`
8112        `),n(260,"thead"),e(261,`
8113            `),n(262,"tr"),e(263,`
8114                `),n(264,"th",17),e(265,"alertType"),t(),e(266,`
8115                `),n(267,"th"),e(268,"With icon (default)"),t(),e(269,`
8116                `),n(270,"th"),e(271,'[showIcon]="false" (21 uses)'),t(),e(272,`
8117            `),t(),e(273,`
8118        `),t(),e(274,`
8119        `),n(275,"tbody"),e(276,`
8120            `),S(277,d1,20,6,null,null,K),t(),e(279,`
8121    `),t(),e(280,`
8122
8123    `),n(281,"h4",3),e(282,"2b. Banner form \u2014 "),n(283,"code"),e(284,'[isInline]="false"'),t(),e(285," (53 uses)"),t(),e(286,`
8124    `),n(287,"p",0),e(288,`
8125        This is the only shape that paints a background. The icon jumps to
8126        `),n(289,"code"),e(290,"fal text-jumbo"),t(),e(291,` (38px light-weight) and the wrapper picks up
8127        `),n(292,"code"),e(293,".form-info"),t(),e(294,`.
8128    `),t(),e(295,`
8129    `),n(296,"table",16),e(297,`
8130        `),n(298,"thead"),e(299,`
8131            `),n(300,"tr"),e(301,`
8132                `),n(302,"th",17),e(303,"alertType"),t(),e(304,`
8133                `),n(305,"th"),e(306,"With icon (default)"),t(),e(307,`
8134                `),n(308,"th"),e(309,'[showIcon]="false"'),t(),e(310,`
8135            `),t(),e(311,`
8136        `),t(),e(312,`
8137        `),n(313,"tbody"),e(314,`
8138            `),S(315,m1,20,6,null,null,K),t(),e(317,`
8139    `),t(),e(318,`
8140
8141    `),n(319,"h4",3),e(320,"2c. Long content & markup children"),t(),e(321,`
8142    `),n(322,"div",18),e(323,`
8143        `),n(324,"app-inline-alert",19),e(325,`
8144            `),n(326,"strong"),e(327,"This program is over capacity."),t(),e(328,`
8145            `),n(329,"p",20),e(330,`
8146                12 registrations are on the waitlist. Raising the cap admits them in the order they
8147                signed up; lowering it does not remove anyone already registered.
8148            `),t(),e(331,`
8149        `),t(),e(332,`
8150    `),t(),e(333,`
8151    `),n(334,"div",18),e(335,`
8152        `),n(336,"app-inline-alert",21),e(337,`
8153            A very long single-line message that has to wrap inside the flex row without pushing the
8154            icon out of alignment or letting the text collide with the icon gutter \u2014 the
8155            `),n(338,"code"),e(339,".min-width-0"),t(),e(340,` span on the content slot is what makes this behave.
8156        `),t(),e(341,`
8157    `),t(),e(342,`
8158
8159    `),n(343,"h4",3),e(344,"2d. Custom "),n(345,"code"),e(346,"iconClass"),t(),e(347," overrides (48 uses)"),t(),e(348,`
8160    `),n(349,"p",0),e(350,`
8161        Callers can replace the icon. The component `),n(351,"em"),e(352,"appends"),t(),e(353,` its own sizing classes to
8162        whatever is passed, so an override that already names a weight ends up with two
8163        (`),n(354,"code"),e(355,"fas \u2026 fal"),t(),e(356,`) \u2014 see \xA77.
8164    `),t(),e(357,`
8165    `),n(358,"table",16),e(359,`
8166        `),n(360,"thead"),e(361,`
8167            `),n(362,"tr"),e(363,`
8168                `),n(364,"th",22),e(365,"iconClass"),t(),e(366,`
8169                `),n(367,"th",23),e(368,"Uses"),t(),e(369,`
8170                `),n(370,"th"),e(371,"Rendered"),t(),e(372,`
8171            `),t(),e(373,`
8172        `),t(),e(374,`
8173        `),n(375,"tbody"),e(376,`
8174            `),S(377,c1,17,4,null,null,Jx),t(),e(379,`
8175    `),t(),e(380,`
8176`),t(),e(381,`
8177
8178`),n(382,"div",2),e(383,`
8179    `),n(384,"h3"),e(385,"3. Toasts \u2014 "),n(386,"code"),e(387,"SiteDataService.showSite*Alert"),t()(),e(388,`
8180    `),n(389,"app-sg-caption",15),e(390,"siteDataService.showSiteSuccessAlert('\u2026')"),t(),e(391,`
8181    `),n(392,"p",0),e(393,`
8182        `),n(394,"strong"),e(395,"3,571"),t(),e(396," call sites across "),n(397,"strong"),e(398,"751"),t(),e(399,` files \u2014 by volume this is the
8183        app's dominant alert surface. Every call funnels into one
8184        `),n(400,"code"),e(401,'<p-toast key="default" position="bottom-right">'),t(),e(402,` in
8185        `),n(403,"code"),e(404,"app.component.html"),t(),e(405,`. The summary line is hardcoded per method
8186        (`),n(406,"code"),e(407,"Success!"),t(),e(408," / "),n(409,"code"),e(410,"Error!"),t(),e(411," / "),n(412,"code"),e(413,"Warning!"),t(),e(414," / "),n(415,"code"),e(416,"Info"),t(),e(417,`);
8187        callers only supply the detail string.
8188    `),t(),e(418,`
8189    `),n(419,"p",0),e(420,`
8190        `),n(421,"code"),e(422,"app.module.ts"),t(),e(423,` registers the stock Aura preset, so severity colors used to be
8191        Aura's own green/blue/yellow/red. `),n(424,"code"),e(425,"ng-theme.scss"),t(),e(426,` now overrides the
8192        `),n(427,"code"),e(428),t(),e(429," tokens under "),n(430,"code"),e(431,"html:root"),t(),e(432,` \u2014
8193        fill and border match the \xA72b banner for the same intent. The summary/icon color is a
8194        `),n(433,"em"),e(434,"darker"),t(),e(435,` ramp step than the banner's icon on purpose: toast summary is 16px text and
8195        must clear 4.5:1, where an icon only needs 3:1. Copying the banner's icon color verbatim
8196        would have shipped `),n(436,"code"),e(437,"success"),t(),e(438," at 2.65:1 and "),n(439,"code"),e(440,"warn"),t(),e(441,` at 3.00:1.
8197    `),t(),e(442,`
8198
8199    `),n(443,"table",16),e(444,`
8200        `),n(445,"thead"),e(446,`
8201            `),n(447,"tr"),e(448,`
8202                `),n(449,"th"),e(450,"Method"),t(),e(451,`
8203                `),n(452,"th"),e(453,"Severity"),t(),e(454,`
8204                `),n(455,"th"),e(456,"Summary (hardcoded)"),t(),e(457,`
8205                `),n(458,"th"),e(459,"Life"),t(),e(460,`
8206                `),n(461,"th"),e(462,"Uses"),t(),e(463,`
8207                `),n(464,"th"),e(465,"Fire it"),t(),e(466,`
8208            `),t(),e(467,`
8209        `),t(),e(468,`
8210        `),n(469,"tbody"),e(470,`
8211            `),n(471,"tr"),e(472,`
8212                `),n(473,"td")(474,"code"),e(475,"showSiteSuccessAlert"),t()(),e(476,`
8213                `),n(477,"td")(478,"code"),e(479,"success"),t()(),e(480,`
8214                `),n(481,"td"),e(482,"Success!"),t(),e(483,`
8215                `),n(484,"td"),e(485,"3000ms"),t(),e(486,`
8216                `),n(487,"td"),e(488,"1,121"),t(),e(489,`
8217                `),n(490,"td")(491,"button",24),g("click",function(){return o.fireSuccessToast()}),e(492,"Fire"),t()(),e(493,`
8218            `),t(),e(494,`
8219            `),n(495,"tr"),e(496,`
8220                `),n(497,"td")(498,"code"),e(499,"showSiteErrorAlert"),t()(),e(500,`
8221                `),n(501,"td")(502,"code"),e(503,"error"),t()(),e(504,`
8222                `),n(505,"td"),e(506,"Error!"),t(),e(507,`
8223                `),n(508,"td"),e(509,"8000ms"),t(),e(510,`
8224                `),n(511,"td"),e(512,"2,363"),t(),e(513,`
8225                `),n(514,"td")(515,"button",24),g("click",function(){return o.fireErrorToast()}),e(516,"Fire"),t()(),e(517,`
8226            `),t(),e(518,`
8227            `),n(519,"tr"),e(520,`
8228                `),n(521,"td")(522,"code"),e(523,"showSiteWarnAlert"),t()(),e(524,`
8229                `),n(525,"td")(526,"code"),e(527,"warn"),t()(),e(528,`
8230                `),n(529,"td"),e(530,"Warning!"),t(),e(531,`
8231                `),n(532,"td"),e(533,"8000ms"),t(),e(534,`
8232                `),n(535,"td"),e(536,"44"),t(),e(537,`
8233                `),n(538,"td")(539,"button",24),g("click",function(){return o.fireWarnToast()}),e(540,"Fire"),t()(),e(541,`
8234            `),t(),e(542,`
8235            `),n(543,"tr"),e(544,`
8236                `),n(545,"td")(546,"code"),e(547,"showSiteInfoAlert"),t()(),e(548,`
8237                `),n(549,"td")(550,"code"),e(551,"info"),t()(),e(552,`
8238                `),n(553,"td"),e(554,"Info"),t(),e(555,`
8239                `),n(556,"td"),e(557,"8000ms"),t(),e(558,`
8240                `),n(559,"td"),e(560,"43"),t(),e(561,`
8241                `),n(562,"td")(563,"button",24),g("click",function(){return o.fireInfoToast()}),e(564,"Fire"),t()(),e(565,`
8242            `),t(),e(566,`
8243            `),n(567,"tr"),e(568,`
8244                `),n(569,"td")(570,"code"),e(571,"showSiteErrorAlertDefaultGET"),t()(),e(572,`
8245                `),n(573,"td")(574,"code"),e(575,"error"),t()(),e(576,`
8246                `),n(577,"td"),e(578,"Error! \u2014 "),n(579,"em"),e(580,'"There was a problem loading data"'),t()(),e(581,`
8247                `),n(582,"td"),e(583,"8000ms"),t(),e(584,`
8248                `),n(585,"td"),e(586,"151"),t(),e(587,`
8249                `),n(588,"td")(589,"button",24),g("click",function(){return o.fireDefaultGetToast()}),e(590,"Fire"),t()(),e(591,`
8250            `),t(),e(592,`
8251        `),t(),e(593,`
8252    `),t(),e(594,`
8253    `),n(595,"button",25),g("click",function(){return o.clearToasts()}),e(596,"clearAllSiteAlerts()"),t(),e(597,`
8254`),t(),e(598,`
8255
8256`),n(599,"div",2),e(600,`
8257    `),n(601,"h3"),e(602),L(603,"number"),t(),e(604,`
8258    `),n(605,"app-sg-caption",15),e(606,'1_base/modifiers.scss \u2014 "#region Text Colors"'),t(),e(607,`
8259    `),n(608,"p",0),e(609,`
8260        Grouped exactly as the SCSS is grouped, so this page and the partial read the same way.
8261        Sample text carries the live class \u2014 what you see is what the app renders.
8262    `),t(),e(610,`
8263
8264    `),S(611,g1,44,2,null,null,Zx),t(),e(613,`
8265
8266`),n(614,"div",2),e(615,`
8267    `),n(616,"h3"),e(617,"5. Colored text modifiers \u2014 "),n(618,"span",26),e(619,"undefined"),t(),e(620),t(),e(621,`
8268    `),n(622,"app-sg-caption",15),e(623,"no matching rule anywhere in src/"),t(),e(624,`
8269    `),n(625,"p",0),e(626,`
8270        These Bootstrap-style class names are used throughout the templates but are
8271        `),n(627,"strong"),e(628,"not defined"),t(),e(629," \u2014 not in "),n(630,"code"),e(631,"modifiers.scss"),t(),e(632,`, not in any other partial,
8272        not in PrimeNG, and PrimeFlex is not installed (it is commented out in
8273        `),n(633,"code"),e(634,"styles.scss"),t(),e(635,`). Each sample below carries the real class and inherits body color,
8274        which is the whole point: `),n(636,"strong"),e(637),t(),e(638,`
8275    `),t(),e(639,`
8276
8277    `),n(640,"table",27),e(641,`
8278        `),n(642,"thead"),e(643,`
8279            `),n(644,"tr"),e(645,`
8280                `),n(646,"th"),e(647,"Class"),t(),e(648,`
8281                `),n(649,"th"),e(650,"Sample (renders as body text)"),t(),e(651,`
8282                `),n(652,"th"),e(653,"Uses"),t(),e(654,`
8283                `),n(655,"th"),e(656,"Files"),t(),e(657,`
8284                `),n(658,"th"),e(659,"Almost certainly meant"),t(),e(660,`
8285            `),t(),e(661,`
8286        `),t(),e(662,`
8287        `),n(663,"tbody"),e(664,`
8288            `),S(665,f1,21,6,null,null,r0),t(),e(667,`
8289    `),t(),e(668,`
8290
8291    `),n(669,"p",13),e(670,`
8292        Two component stylesheets define a local `),n(671,"code"),e(672,".text-danger"),t(),e(673,`
8293        (`),n(674,"code"),e(675,"admin/report/create-scheduled-report"),t(),e(676,`,
8294        `),n(677,"code"),e(678,"shared/modules/components/message-edit-bubble"),t(),e(679,`), so the class works on those two
8295        screens and nowhere else.
8296    `),t(),e(680,`
8297`),t(),e(681,`
8298
8299`),n(682,"div",2),e(683,`
8300    `),n(684,"h3"),e(685,"6. Validation & form messaging"),t(),e(686,`
8301    `),n(687,"app-sg-caption",15),e(688,"2_layout/forms.scss"),t(),e(689,`
8302    `),n(690,"p",0),e(691,`
8303        A fourth palette. These carry their own reds and are not wired to
8304        `),n(692,"code"),e(693,"--error"),t(),e(694,", to "),n(695,"code"),e(696,".text-red"),t(),e(697,`, or to the inline-alert error color.
8305    `),t(),e(698,`
8306
8307    `),n(699,"table",16),e(700,`
8308        `),n(701,"thead"),e(702,`
8309            `),n(703,"tr"),e(704,`
8310                `),n(705,"th"),e(706,"Class"),t(),e(707,`
8311                `),n(708,"th"),e(709,"Sample"),t(),e(710,`
8312                `),n(711,"th"),e(712,"Color"),t(),e(713,`
8313                `),n(714,"th"),e(715,"Uses"),t(),e(716,`
8314            `),t(),e(717,`
8315        `),t(),e(718,`
8316        `),n(719,"tbody"),e(720,`
8317            `),n(721,"tr"),e(722,`
8318                `),n(723,"td")(724,"code"),e(725,".form-error-message"),t()(),e(726,`
8319                `),n(727,"td")(728,"span",28),e(729,"Email address is required."),t()(),e(730,`
8320                `),n(731,"td")(732,"code"),e(733,"var(--red-700)"),t(),e(734," #a11019"),t(),e(735,`
8321                `),n(736,"td"),e(737,"\u2014"),t(),e(738,`
8322            `),t(),e(739,`
8323            `),n(740,"tr"),e(741,`
8324                `),n(742,"td")(743,"code"),e(744,".form-error"),t()(),e(745,`
8325                `),n(746,"td")(747,"span",29),e(748,"Wrapper on "),n(749,"code"),e(750,".form-group"),t(),e(751,"; also the dynamic-form error slot."),t()(),e(752,`
8326                `),n(753,"td")(754,"code"),e(755,"color: var(--warning)"),t(),e(756," in ~10 component stylesheets"),t(),e(757,`
8327                `),n(758,"td"),e(759,"117"),t(),e(760,`
8328            `),t(),e(761,`
8329            `),n(762,"tr"),e(763,`
8330                `),n(764,"td")(765,"code"),e(766,".required-asterisk"),t()(),e(767,`
8331                `),n(768,"td")(769,"span",30)(770,"span",31),e(771,"*"),t(),e(772," Required field"),t()(),e(773,`
8332                `),n(774,"td")(775,"code"),e(776,"var(--orange-500)"),t(),e(777," #ff7500"),t(),e(778,`
8333                `),n(779,"td"),e(780,"\u2014"),t(),e(781,`
8334            `),t(),e(782,`
8335        `),t(),e(783,`
8336    `),t(),e(784,`
8337
8338    `),n(785,"p",13),e(786,`
8339        `),n(787,"code"),e(788,"--warning"),t(),e(789,` is declared under "Orphan Colors" as
8340        `),n(790,"code"),e(791,"var(--red-500)"),t(),e(792," \u2014 "),n(793,"strong"),e(794,"warning is red"),t(),e(795,`, not yellow. 20 stylesheets
8341        read it, mostly for validation glyphs. Meanwhile the inline alert's warning band is yellow
8342        and `),n(796,"code"),e(797,".text-warning"),t(),e(798," is "),n(799,"code"),e(800,"--yellow-600"),t(),e(801,`. Three different answers to
8343        "what color is a warning."
8344    `),t(),e(802,`
8345`),t(),e(803,`
8346
8347`),n(804,"div",2),e(805,`
8348    `),n(806,"h3"),e(807,"7. Where the mechanisms disagree"),t(),e(808,`
8349    `),n(809,"p",0),e(810,`
8350        The findings this page exists to make visible. Each is expanded in
8351        `),n(811,"code"),e(812,"docs/ui-migration-and-review/**/System-Alert-Normalization.md"),t(),e(813,`.
8352    `),t(),e(814,`
8353    `),n(815,"ol",32),e(816,`
8354        `),n(817,"li"),e(818,`
8355            `),n(819,"strong"),e(820),t(),e(821,` \u2014 \xA75. The largest single
8356            defect on the page and a pure find-replace once the mapping is agreed.
8357        `),t(),e(822,`
8358        `),n(823,"li"),e(824,`
8359            `),n(825,"strong")(826,"code"),e(827,"--warning"),t(),e(828," is red"),t(),e(829," ("),n(830,"code"),e(831,"--red-500"),t(),e(832,`) while every other
8360            warning surface is yellow \u2014 \xA76.
8361        `),t(),e(833,`
8362        `),n(834,"li"),e(835,`
8363            `),n(836,"strong",33),e(837,"Toasts used a different palette from everything else"),t(),e(838,`
8364            \u2014 stock Aura severity colors vs. our own family. `),n(839,"strong"),e(840,"Fixed 2026-08-19"),t(),e(841,` in
8365            `),n(842,"code"),e(843,"ng-theme.scss"),t(),e(844,` \u2014 \xA73.
8366        `),t(),e(845,`
8367        `),n(846,"li"),e(847,`
8368            `),n(848,"strong"),e(849,"Error red is inconsistent across mechanisms:"),t(),e(850,` inline-alert icon
8369            `),n(851,"code"),e(852,"--red-700"),t(),e(853,", inline-alert band border "),n(854,"code"),e(855,"--red-800"),t(),e(856,` on a
8370            `),n(857,"code"),e(858,"--red-100"),t(),e(859,` fill (#fdb5b8, a mid-tone pink used as a background),
8371            `),n(860,"code"),e(861,".text-red"),t(),e(862," "),n(863,"code"),e(864,"--red-700"),t(),e(865,", "),n(866,"code"),e(867,".text-dark-red"),t(),e(868,`
8372            `),n(869,"code"),e(870,"--red-800"),t(),e(871,", "),n(872,"code"),e(873,"--warning"),t(),e(874," "),n(875,"code"),e(876,"--red-500"),t(),e(877,`.
8373        `),t(),e(878,`
8374        `),n(879,"li"),e(880,`
8375            `),n(881,"strong"),e(882,"Two aliases for one thing:"),t(),e(883," "),n(884,"code"),e(885,".text-warn"),t(),e(886,` and
8376            `),n(887,"code"),e(888,".text-warning"),t(),e(889,` are the same rule (25 + 38 uses);
8377            `),n(890,"code"),e(891,".text-green"),t(),e(892," ("),n(893,"code"),e(894,"--green-700"),t(),e(895,") and "),n(896,"code"),e(897,".text-green-alt"),t(),e(898,`
8378            (`),n(899,"code"),e(900,"--green-600"),t(),e(901,`) differ by one step with no documented reason.
8379        `),t(),e(902,`
8380        `),n(903,"li"),e(904,`
8381            `),n(905,"strong")(906,"code"),e(907,"iconClass"),t(),e(908," is appended to, not replaced"),t(),e(909,` \u2014 the component does
8382            `),n(910,"code"),e(911,"this.iconClass += \u2026"),t(),e(912," inside "),n(913,"code"),e(914,"ngOnChanges"),t(),e(915,`, so a caller-supplied
8383            weight collides with the component's own, and any post-init input change appends the
8384            sizing classes a second time.
8385        `),t(),e(916,`
8386        `),n(917,"li"),e(918,`
8387            `),n(919,"strong"),e(920,"No toast equivalent for "),n(921,"code"),e(922,"note"),t()(),e(923,`, and no inline equivalent for
8388            the `),n(924,"code"),e(925,"showSiteErrorAlertDefaultGET"),t(),e(926,` convenience wrapper.
8389        `),t(),e(927,`
8390        `),n(928,"li"),e(929,`
8391            `),n(930,"strong"),e(931,"Four classes carry "),n(932,"code"),e(933,"!important"),t()(),e(934,`
8392            (`),n(935,"code"),e(936,".text-grey-lt"),t(),e(937,", "),n(938,"code"),e(939,".text-navy"),t(),e(940,", "),n(941,"code"),e(942,".text-white"),t(),e(943,`, and
8393            `),n(944,"code"),e(945,".text-highlight"),t(),e(946,`'s background) \u2014 \xA74. Nothing in the block explains why those
8394            four and not the other thirteen.
8395        `),t(),e(947,`
8396        `),n(948,"li"),e(949,`
8397            `),n(950,"strong"),e(951,"78 inline "),n(952,"code"),e(953,'style="color: \u2026"'),t(),e(954," attributes"),t(),e(955,` and
8398            `),n(956,"strong"),e(957,"194 hardcoded "),n(958,"code"),e(959,"color: #\u2026"),t(),e(960," declarations"),t(),e(961,` in component
8399            stylesheets sit outside the token system entirely.
8400        `),t(),e(962,`
8401    `),t(),e(963,`
8402`),t(),e(964,`
8403`)),s&2&&(i(27),p(o.snapshotDate),i(11),m("routerLink","/admin/styleguide/global/blues-and-links"),i(30),E(o.comparisonColumns),i(9),E(o.comparison),i(77),E(o.proposal),i(123),E(o.intents),i(38),E(o.intents),i(9),m("isInline",!1),i(12),m("isInline",!0),i(41),E(o.customIconSamples),i(51),q("--p-toast-","{","severity","}","-*"),i(174),f("4. Colored text modifiers \u2014 defined (",ze(603,10,o.definedTotal)," uses)"),i(9),E(o.modifierGroups),i(9),f(" (",o.ghostTotal," uses)"),i(17),f("",o.ghostTotal," usages render as no-ops."),i(28),E(o.ghostModifiers),i(155),f("",o.ghostTotal," colored-text usages are no-ops"))},dependencies:[$,J,le,Nt,X,Ye],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var b1=["*"];function S1(a,r){if(a&1&&(e(0,`
8404            `),c(1,"app-pill",5),e(2,`
8405        `)),a&2){let l=u();i(),m("text",l.moduleLabel)}}function E1(a,r){if(a&1&&(e(0,`
8406            `),c(1,"app-pill",6),e(2,`
8407        `)),a&2){let l=u();i(),m("text",l.note)}}var v1="shared/modules/components/",l0=(()=>
8407{let r=class r{constructor(){this.module="components",this.libraryRoot=v1}get moduleLabel(){return r.moduleLabels[this.module]}};r.moduleLabels={components:"ComponentsModule",message:"MessageModule",tooltip:"TooltipModule",standalone:"standalone"},r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-sg-specimen"]],inputs:{name:"name",path:"path",module:"module",note:"note"},standalone:!1,ngContentSelectors:b1,decls:19,vars:5,consts:[[1,"sg-specimen"],[1,"sg-specimen-head"],[1,"text-small"],[1,"text-smallest","text-grey-lt","ml-2"],[1,"sg-specimen-body"],["variant","tag","status","secondary",3,"text"],["variant","tag","status","warning",3,"text"]],template:function(s,o){s&1&&(ke(),n(0,"div",0),e(1,`
8408    `),n(2,"div",1),e(3,`
8409        `),n(4,"code",2),e(5),t(),e(6,`
8410        `),n(7,"span",3),e(8),t(),e(9,`
8411        `),v(10,S1,3,1),v(11,E1,3,1),t(),e(12,`
8412    `),n(13,"div",4),e(14,`
8413        `),Te(15),e(16,`
8414    `),t(),e(17,`
8415`),t(),e(18,`
8416`)),s&2&&(i(5),f("<",o.name,">"),i(3),q("",o.libraryRoot,"",o.path),i(2),y(o.module!=="components"?10:-1),i(),y(o.note?11:-1))},dependencies:[J],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var w1=()=>[],C1=()=>["Shared balance","Per-player ledger","Refunds"],_1=(a,r)=>r.anchor;function k1(a,r){if(a&1&&(e(0,`
8417            `),n(1,"li"),e(2,`
8418                `),n(3,"a",249)(4,"strong"),e(5),t()(),e(6,`
8419                `),n(7,"span",250),e(8),t(),e(9,`
8420            `),t(),e(10,`
8421        `)),a&2){let l=r.$implicit;i(3),m("href","#"+l.anchor,kt),i(2),p(l.title),i(3),q(" \u2014 ",l.count," \u2014 ",l.blurb)}}function T1(a,r){a&1&&(e(0,`
8422            `),c(1,"app-admin-nav-search-filter"),e(2,`
8423        `))}function I1(a,r){if(a&1){let l=B();e(0,`
8424            `),n(1,"app-roster-card-content",251),g("viewProfileButton",function(){w(l);let s=u();return C(s.noop())}),t(),e(2,`
8425        `)}if(a&2){let l=u();i(),m("player",l.rosterPlayer)("showProfileButton",!0)}}function M1(a,r){if(a&1&&(e(0,`
8426            `),n(1,"app-message-time-tag",252),e(2,`
8427            `),t(),e(3,`
8428        `)),a&2){let l=u();i(),m("start",l.calendarEvent.startDate)("end",l.calendarEvent.endDate)}}function D1(a,r){if(a&1){let l=B();e(0,`
8429            `),n(1,"app-ai-chat-window",253),g("closeChatEvent",function(){w(l);let s=u();return C(s.noop())}),t(),e(2,`
8430        `)}}function F1(a,r){if(a&1){let l=B();e(0,`
8431            `),n(1,"app-attendance-toggle",254),g("modalClosed",function(){w(l);let s=u();return C(s.noop())}),t(),e(2,`
8432        `)}if(a&2){let l=u();i(),m("calEvent",l.calendarEvent)("teamID",2228)}}function P1(a,r){if(a&1){let l=B();e(0,`
8433            `),n(1,"app-attendance-tracking-toggle",255),g("modalClosed",function(){w(l);let s=u();return C(s.noop())})("attendanceChanged",function(){w(l);let s=u();return C(s.noop())}),t(),e(2,`
8434        `)}if(a&2){let l=u();i(),m("calEvent",l.calendarEvent)}}function A1(a,r){if(a&1){let l=B();e(0,`
8435            `),n(1,"app-calendar-team-filter",256),g("toggleTeam",function(){w(l);let s=u();return C(s.noop())}),t(),e(2,`
8436        `)}if(a&2){let l=u();i(),m("team",l.team)("isAdmin",!0)}}function O1(a,r){a&1&&(e(0,`
8437            `),n(1,"app-consent-gated-third-party-content"),e(2,`
8438                `),n(3,"p",15),e(4,"Third-party content renders here once consent is given."),t(),e(5,`
8439            `),t(),e(6,`
8440        `))}function N1(a,r){if(a&1){let l=B();e(0,`
8441            `),n(1,"app-drag-drop-file-upload",257),g("filesChanged",function(){w(l);let s=u();return C(s.noop())})("onFileClick",function(){w(l);let s=u();return C(s.noop())}),t(),e(2,`
8442        `)}if(a&2){let l=u();i(),m("maxFiles",5)("existingFiles",l.existingFiles)}}function B1(a,r){if(a&1){let l=B();e(0,`
8443            `),n(1,"app-gif-picker",258),g("gifSelected",function(){w(l);let s=u();return C(s.noop())})("gifCancel",function(){w(l);let s=u();return C(s.noop())})("gifSearch",function(){w(l);let s=u();return C(s.noop())}),e(2,`
8444            `),t(),e(3,`
8445        `)}}function W1(a,r){if(a&1){let l=B();e(0,`
8446            `),n(1,"app-image-cropper",259),g("finalImage",function(){w(l);let s=u();return C(s.noop())})("onCancel",function(){w(l);let s=u();return C(s.noop())}),t(),e(2,`
8447        `)}if(a&2){let l=u();i(),m("imageURL",l.sampleImage)("icAspectRatio",1)("showCancel",!0)("showPresetDimensions",l.presetDimensions)}}function R1(a,r){if(a&1){let l=B();e(0,`
8448            `),n(1,"app-multiple-file-upload",260),g("onSelect",function(){w(l);let s=u();return C(s.noop())})("onDownload",function(){w(l);let s=u();return C(s.noop())})("onDelete",function(){w(l);let s=u();return C(s.noop())})("onChange",function(){w(l);let s=u();return C(s.noop())}),e(2,`
8449            `),t(),e(3,`
8450        `)}if(a&2){let l=u();i(),m("fGroup",l.fg)("files",l.documents)("fileLimit",5)}}function L1(a,r){if(a&1){let l=B();e(0,`
8451                `),n(1,"app-poll-details-view",261),g("close",function(){w(l);let s=u(2);return C(s.modals.pollDetails=!1)})("save",function(){w(l);let s=u(2);return C(s.noop())})("voteSubmitted",function(){w(l);let s=u(2);return C(s.noop())})("refreshPollRequested",function(){w(l);let s=u(2);return C(s.noop())})("deleteClicked",function(){w(l);let s=u(2);return C(s.noop())}),t(),e(2,`
8452            `)}if(a&2){let l=u(2);i(),m("existingPoll",l.poll)("readonly",!0)("clubUserID",1)}}function q1(a,r){if(a&1){let l=B();e(0,`
8453            `),n(1,"button",154),g("click",function(){w(l);let s=u();return C(s.open("pollDetails"))}),e(2,`
8454                Mount poll details
8455            `),t(),e(3,`
8456            `),v(4,L1,3,3)}if(a&2){let l=u();i(4),y(l.modals.pollDetails?4:-1)}}function V1(a,r){if(a&1&&(e(0,`
8457            `),n(1,"app-quick-rsvp-bubbles",262),e(2,`
8458            `),t(),e(3,`
8459            `),n(4,"app-quick-rsvp-bubbles",263),e(5,`
8460            `),t(),e(6,`
8461            `),n(7,"app-quick-rsvp-bubbles",264),e(8,`
8462            `),t(),e(9,`
8463        `)),a&2){let l=u();i(),m("event",l.calendarEvent)("teamID",2228),i(3),m("event",l.calendarEvent)("teamID",2228),i(3),m("event",l.calendarEvent)("teamID",2228)}}function z1(a,r){a&1&&(e(0,`
8464            `),c(1,"app-time-dots",265),e(2,`
8465            `),c(3,"app-time-dots",265),e(4,`
8466        `)),a&2&&(i(),m("durationInMinutes",45),i(2),m("durationInMinutes",90))}function U1(a,r){if(a&1){let l=B();e(0,`
8467            `),n(1,"app-yes-no-modal",266),g("onYesSelect",function(){w(l);let s=u();return C(s.modals.yesNo=!1)})("onNoSelect",function(){w(l);let s=u();return C(s.modals.yesNo=!1)}),e(2,`
8468            `),t(),e(3,`
8469        `)}}var s0=(()=>
8469{let r=class r{constructor(d){this.snapshotDate="2026-09-03",this.groups=[{anchor:"admin",title:"admin/",folder:"admin/",count:8,blurb:"Admin page chrome \u2014 headers, dashboard cards, filters."},{anchor:"agent-chat",title:"agent-chat/",folder:"agent-chat/",count:6,blurb:"The conversational agent surface."},{anchor:"cards",title:"cards/",folder:"cards/",count:8,blurb:"Card components. Also documented in depth on the cards page."},{anchor:"layout",title:"layout/",folder:"layout/",count:3,blurb:"Banners and sidebar tabs."},{anchor:"message",title:"message/",folder:"message/",count:10,blurb:"MessageModule \u2014 the messaging thread surface."},{anchor:"null-states",title:"null-states/",folder:"null-states/",count:2,blurb:"Empty and loading placeholders."},{anchor:"status-indicator",title:"status-indicator/",folder:"status-indicator/",count:2,blurb:"Status dots and their large variant."},{anchor:"root",title:"root-level",folder:"",count:59,blurb:"The 59 components that sit directly under the library root, alphabetical by folder."}],this.modals={yesNo:!1,fileViewer:!1,messageEdit:!1,messageEditModal:!1,messageReport:!1,messageThreadDetails:!1,pollDetails:!1,gifPicker:!1,imageCropper:!1},this.fg=new ba({specimenFile:new Wi(null),specimenFiles:new Wi(null)}),this.toggles=[{label:"Published",value:!0},{label:"Locked",value:!1}],this.navSteps=[{id:1,label:"Account",sections:[{id:1,label:"Contact"},{id:2,label:"Password"}]},{id:2,label:"Players",sections:[{id:3,label:"Roster"}]},{id:3,label:"Payment",sections:[]}],this.sidebarTabs=[{label:"Overview",icon:"fa-regular fa-chart-simple",routerLink:null,badge:null},{label:"Roster",icon:"fa-regular fa-users",routerLink:null,badge:"18"},{label:"Schedule",icon:"fa-regular fa-calendar",routerLink:null,badge:null}],this.menuItems=[{label:"Edit",icon:"fa fa-pen"},{label:"Duplicate",icon:"fa fa-copy"},{separator:!0},{label:"Delete",icon:"fa fa-trash"}],this.agentMessages=[{messageID:1,role:"user",text:"How many players still owe a balance?"},{messageID:2,role:"assistant",text:"Four players have an outstanding balance on the Fall 2026 program."}],this.agentQuestions=[{key:"season",label:"Which season?",type:"select",options:[{label:"Fall 2026",value:1},{label:"Spring 2027",value:2}]}],this.agentAnswer={summary:"Four players have an outstanding balance.",blocks:[{type:"text",text:"Balances range from $25 to $340."}]},this.rosterPlayer={user:{firstName:"Jordan",lastName:"Alvarez",email:"[email protected]",cellPhone:"(555) 010-1234"},playerClubData:{jerseyNumber:"17",position:"Midfield",height:`5' 9"`,graduationYear:2028},playerCollegeData:{gpa:"3.6",satScore:1280}},this.staffClubUser={user:{firstName:"Riley",lastName:"Chen",email:"[email protected]"},staffProfile:{title:"Director of Coaching",bio:"Fifteen seasons with the club."},staffProgramAssignments:[{programName:"Fall 2026 Travel"}]},this.gameResult={teamScore:3,opponentTeamScore:2,teamScorePeriod:[1,2],opponentTeamScorePeriod:[2,0]},this.calendarEvent={clubCalendarEventID:1,clubEventTypeID:1,title:"Practice \u2014 Field 3",startDate:new Date,endDate:new Date,rsvpGoing:12,rsvpNotGoing:2,rsvpMaybe:3},this.team={teamID:2228,teamName:"U14 Boys Blue",teamColor:"#003261"},this.weekEvents=[{title:"Practice",start:new Date,end:new Date(Date.now()+36e5)}],this.weekResources=[{id:"1",title:"Field 1"},{id:"2",title:"Field 2"}],this.trainingFocuses=[{clubTrainingFocusID:1,name:"Finishing"},{clubTrainingFocusID:2,name:"Possession"},{clubTrainingFocusID:3,name:"Set pieces"},{clubTrainingFocusID:4,name:"Pressing"}],this.viewOnlyFields=[{key:"firstName",label:"First Name",type:"textbox",required:!0,hidden:!1},{key:"email",label:"Email",type:"textbox",required:!1,hidden:!1}],this.viewOnlyEntity={firstName:"Jordan",email:"[email protected]"},this.mfaStatus={isEnrolled:!1,canEnroll:!0,methods:[]},this.pollOptions=[{pollOptionID:1,text:"Saturday morning",voteCount:7},{pollOptionID:2,text:"Saturday afternoon",voteCount:4},{pollOptionID:3,text:"Sunday morning",voteCount:2}],this.poll={pollID:1,question:"Which time works best for the makeup session?",isClosed:!1,totalVotes:13,options:this.pollOptions},this.quotedMessage={messageID:9,messageText:"Bring both jerseys on Saturday.",firstName:"Riley",lastName:"Chen"},this.pinnedMessages=[{messageID:9,messageText:"Bring both jerseys on Saturday.",firstName:"Riley",lastName:"Chen",sentDate:new Date().toISOString()}],this.reactions=[{emoji:"\u{1F44D}",count:3}],this.threadRecipients=[{clubUserID:1,firstName:"Jordan",lastName:"Alvarez"},{clubUserID:2,firstName:"Riley",lastName:"Chen"}],this.editableMessage={messageID:9,messageText:"Bring both jerseys on Saturday.",firstName:"Riley",lastName:"Chen"},this.existingFiles=[{fileName:"waiver-signed.pdf",fileSize:184320,url:null}],this.documents=[{documentID:1,fileName:"medical-release.pdf",fileSizeBytes:22e4}],this.presetDimensions=[{numerator:16,denominator:9,name:"Banner"},{numerator:1,denominator:1,name:"Square"}],this.reportReasons=[{label:"Spam",value:1},{label:"Harassment",value:2}],this.contextMenuConfig={canReply:!0,canReact:!0,canPin:!0,canEdit:!0,canDelete:!0,canReport:!0,canCopy:!0},this.sampleImage="/assets/img/sprocket-sm-circle.png",this.showLive=d.snapshot.queryParamMap.get("live")!=="0"}noop(){}open(d){this.modals[d]=!0}};r.\u0275fac=function(s){return new(s||r)(A(Ca))},r.\u0275cmp=b({type:r,selectors:[["app-sg-staging"]],standalone:!1,decls:972,vars:183,consts:[[1,"text-small","text-grey"],[1,"card"],[1,"text-small"],["variant","tag","status","warning","text","live data"],["variant","tag","status","warning","text","opens on demand"],["routerLink","../pills",1,"btn-a11y"],["routerLink","../avatars",1,"btn-a11y"],["routerLink","../cards",1,"btn-a11y"],["routerLink","../system-alerts",1,"btn-a11y"],["
8469id","admin"],["name","app-admin-header","path","admin/admin-header/admin-header.component.ts"],["pageTitle","Fall 2026 Travel","parentLinkText","Programs","parentLinkUrl","/admin/programs","primaryBtnText","Add Player","primaryBtnIcon","fa fa-plus","secondaryBtnText","Export","secondaryBtnIcon","fa fa-download",3,"backButtonClicked","primaryBtnAction","secondaryBtnAction","showBackButton","useBackButtonEmitter"],["name","app-admin-header-description","path","admin/admin-header/description/admin-header-description/admin-header-description.component.ts"],["name","app-admin-dashboard-card","path","admin/admin-dashboard-card/admin-dashboard-card.component.ts"],["panelTitle","Registrations",3,"settingsClick","hasSettings"],[1,"text-small","mb-0"],["name","app-admin-dashboard-card","path","admin/admin-dashboard-card/admin-dashboard-card.component.ts","note","loading + error states"],[1,"row"],[1,"col-md-6"],["panelTitle","Loading","skeletonHeight","120px",3,"loading"],["panelTitle","Error",3,"error"],["name","app-admin-dashboard-card-mini","path","admin/admin-dashboard-card-mini/admin-dashboard-card-mini.component.ts"],[1,"col-md-4"],["panelTitle","Active Players","panelSubtitle","248","trendTxt","+12 this week","panelTitleColorType","success",3,"trendDirection"],["panelTitle","Unpaid Invoices","panelSubtitle","17","trendTxt","-3 this week","panelTitleColorType","warning",3,"trendDirection"],["panelTitle","Open Waivers","panelSubtitle","0","trendTxt","no change",3,"trendDirection"],["name","app-admin-filter","path","admin/admin-filter/admin-filter.component.ts"],[3,"adminFilterSearch","adminFilterReset","advancedFiltersToggled","showAdvanced","showLabels"],["name","app-admin-nav-search-filter","path","admin/admin-nav-search-filter/admin-nav-search-filter.component.ts","note","live data"],["name","app-step-content-ui","path","admin/step-content/step-content/step-content-ui.component.ts"],["title","Program Details","titlePillText","Complete","titlePillStatus","success","utilityPillText","Required","utilityPillStatus","warning",3,"menuToggle","toggleChange","accordionToggle","toggles","isAccordion","expanded","dragDisabled"],["name","app-win-loss-record","path","admin/win-loss-record/win-loss-record.component.ts"],[3,"totalWins","totalLosses","totalDraws"],["id","agent-chat"],["name","app-agent-chat-panel","path","agent-chat/agent-chat-panel.component.ts"],["title","Registration Agent",3,"collapsedChange","canCollapse","collapsed"],["name","app-agent-chat-transcript","path","agent-chat/agent-chat-transcript.component.ts"],["assistantLabel","Sprocket","userLabel","You",3,"messages","avatarSrc"],["name","app-agent-chat-transcript","path","agent-chat/agent-chat-transcript.component.ts","note","empty state"],["emptyText","No messages yet.",3,"messages"],["name","app-agent-question-panel","path","agent-chat/agent-question-panel.component.ts"],["heading","A couple of details","hint","Answer what you can \u2014 the rest can wait.",3,"answeredChange","quickAnswer","questions"],["name","app-agent-answer-blocks","path","agent-chat/agent-answer-blocks.component.ts"],[3,"answer"],["name","app-agent-reply-selections","path","agent-chat/agent-reply-selections.component.ts"],[3,"selections"],["name","app-agent-reply-composer","path","agent-chat/agent-reply-composer.component.ts"],["label","Your reply","placeholder","Type a message\u2026","hint","Enter sends. Shift+Enter adds a line.","inputID","sgAgentReply",3,"valueChange","send","canSend"],["id","cards"],["name","app-blog-card","path","cards/blog-card/blog-card.component.ts"],[1,"col-md-5"],["blogTitle","Tryout results are posted","blogExcerpt","Rosters for the Fall 2026 travel program are now available in your account.",3,"blogCardClick","blogImage","blogSavedOn"],["name","app-calendar-card","path","cards/calendar-card/calendar-card.component.ts"],[3,"startDate","endDate","clubEventTypeID"],["name","app-null-card","path","cards/null-card/null-card.component.ts"],["text","No players have registered yet.","image","players","buttonText","Add Player","buttonIcon","fa fa-plus",3,"buttonClicked","showButton"],["name","app-promo-card","path","cards/promo-card/promo-card.component.ts"],["title","Team Accounts","description","
8469Let parents fund a shared team balance.",3,"features","image"],["name","app-roster-card-content","path","cards/roster-card-content/roster-card-content.component.ts","note","live data"],["name","app-staff-card","path","cards/staff-card/staff-card.component.ts"],[3,"clubUser"],["name","app-teaser-card","path","cards/teaser-card/teaser-card.component.ts","module","standalone"],["imageAlt","Club crest","ariaLabel","Open the Fall 2026 program",3,"cardClick","image","clickable"],[1,"mb-1"],[1,"text-small","text-grey","mb-0"],["name","app-user-info-view-only-card","path","cards/user-info-view-only-card/user-info-view-only-card.component.ts"],["headerText","Contact",3,"edit","entity","fields","isEditable"],["id","layout"],["name","app-global-banner-content","path","layout/global-banner-content/global-banner-content.component.ts"],["bannerSize","small","bannerTextAlign","center","bannerVerticalTextAlign","middle","textColor","#ffffff","bannerBg","#003261",3,"primaryBannerImage"],[1,"mb-0"],["name","app-sidebar-nav-tabs","path","layout/sidebar-nav-tabs/sidebar-nav-tabs.component.ts"],[3,"tabClick","tabs","activeTab","sticky"],["name","app-team-banner","path","layout/team-banner/team-banner.component.ts"],["headerText","U14 Boys Blue","eyebrowText","Fall 2026 Travel",3,"profileImageSelected","logoRemoved","logoUrl","canEditLogo"],["id","message"],["name","app-message-bubble","path","message/message-bubble.component.ts","module","message"],["firstName","Riley","lastName","Chen","messageText","Bring both jerseys on Saturday.",3,"replyClicked","reactClicked","editClicked","deleteMessageClicked","messageTextClicked","messageID","sentDate","reactions","canReply","canReact","canEdit","canDelete"],["name","app-message-bubble","path","message/message-bubble.component.ts","module","message","note","sender + deleted variants"],["firstName","You","lastName","","messageText","On it \u2014 see you at 9.",3,"isSender","messageID","sentDate"],["firstName","Riley","lastName","Chen",3,"messageID","isDeleted","sentDate"],["name","app-message-form","path","message/message-form/message-form.component.ts","module","message"],[3,"sendMessage","deleteQuote","pollCreated","sendEnabled","showFileUpload","showGifUpload","canAddPoll","messageLimit"],["name","app-message-quote","path","message/message-quote/message-quote.component.ts","module","message"],[3,"deleteQuote","quotedMessage","canDelete"],["name","app-message-time-tag","path","message/message-time-tag/message-time-tag.component.ts","module","message","note","live data"],["name","app-message-pin","path","message/message-pin/message-pin.component.ts","module","message","note","not mounted \u2014 unreachable"],["name","app-pinned-messages-panel","path","message/pinned-messages-panel/pinned-messages-panel.component.ts","module","message"],["variant","standard",3,"togglePanel","messageClicked","unpinClicked","pinnedMessages","totalPinned","showPanel"],["name","app-message-poll","path","message/message-poll/message-poll.component.ts","module","message"],[3,"voteSubmitted","pollUpdated","refreshPollRequested","poll","clubUserId"],["name","app-message-thread-header","path","message/message-thread-header/message-thread-header.component.ts","module","message","note","not mounted \u2014 unreachable"],["name","app-message-context-menu","path","message/message-context-menu/message-context-menu.component.ts","module","message","note","opens on demand"],["name","app-message-thread-details","path","message/message-thread-details/message-thread-details.component.ts","module","message","note","not mounted \u2014 unreachable"],["id","null-states"],["name","app-null-table-row","path","null-states/null-table-row/null-table-row.component.ts"],[1,"table"],["title","No results","text","No players match this filter.","buttonText","Clear filters","buttonIcon","fa fa-xmark",3,"buttonClicked","showButton"],["name","app-skeleton-template","path","null-states/skeleton-template/skeleton-template.component.ts"],["side","shared"],["skeletonType","text"],["skeletonType","table"],["skeletonType","form",3,"formFieldsCount"],["id","status-indicator"],["name","app-status-indicator","path","status-indicator/status-indicator.component.ts"],["status","active","text","Active"],["status","success","text","Paid"],["status","error","text","Overdue"],["status","warning","text","Pending"],["status","note","text","Draft"],["status","default","text","Unknown"],["status","active","text","Syncing",3,"dots"],["name","app-big-status-indicator","path","status-indicator/big-status-indicator/big-status-indicator.component.ts"],["status","success","text","All waivers signed",3,"showText"],["status","error","text","Payment failed",3,"showText"],["id","root"],["name","app-ai-chat-launcher","path","ai-chat-launcher/ai-chat-launcher.component.ts"],["text","Ask Coach Johnny",3,"chatBotClicked","showIcon"],["name","app-ai-chat-window","path","ai-chat-window/ai-chat-window.component.ts","note","live data"],["name","app-attendance-toggle","path","attendance-toggle/attendance-toggle.component.ts","note","live data"],["name","app-attendance-tracking-toggle","path","attendance-tracking-toggle/attendance-tracking-toggle.component.ts","note","live data"],["name","app-back-link","path","back-link/back-link.component.ts"],[3,"back"],["name","app-button-loader","path","button-loader/button-loader.component.ts"],["type","button","disabled","",1,"btn","btn-primary"],["name","app-calendar-team-filter","path","calendar-team-filter/calendar-team-filter.component.ts","note","live data"],["name","app-calendar-week-view","path","calendar-week-view/calendar-week-view.component.ts"],[3,"showEvent","addEvent","dropEvent","events","resources","selectedResources","currentDate"],["name","app-checkbox-button","path","checkbox-button/checkbox-button.component.ts"],["inputID","sgCbBtn1","inputLabel","Include inactive players",3,"valueChange","value"],["inputID","sgCbBtn2","input
8469Label","Disabled",3,"valueChange","disabled","value"],["name","app-checkbox-row","path","checkbox-row/checkbox-row.component.ts"],["controlType","radio","controlGroupName","sgRow","inputId","sgRow1","label","Pay in full","description","One charge today for the full season.",3,"selectionChange","optionValue"],["controlType","radio","controlGroupName","sgRow","inputId","sgRow2","label","Payment plan","description","Four monthly instalments.","color","green",3,"selectionChange","optionValue"],["controlType","checkbox","inputId","sgRow3","label","Disabled option","description","Not available for this program.",3,"disabledClick","disabled"],["name","app-close-icon","path","close-icon/close-icon.component.ts"],["ariaLabel","Close the staging specimen",3,"close"],["name","app-colorize-differential","path","colorize-differential/colorize-differential.component.ts"],[3,"differential"],["name","app-completion-status-bar","path","completion-status-bar/completion-status-bar.component.ts"],["tooltipText","72% of players have registered",3,"percentComplete"],["name","app-consent-gated-third-party-content","path","consent-gated-third-party-content/consent-gated-third-party-content.component.ts","note","live data"],["name","app-date-range-filter","path","date-range-filter/date-range-filter.component.ts"],["label","Date Range","preset","last90Days",3,"rangeChange"],["name","app-dialog-footer","path","dialog-footer/dialog-footer.component.ts"],["type","button",1,"btn","btn-secondary"],["type","button",1,"btn","btn-primary"],["name","app-drag-drop-file-upload","path","drag-drop-file-upload/drag-drop-file-upload.component.ts","note","live data"],["name","app-field-view-only-row","path","field-view-only-row/field-view-only-row.component.ts"],[3,"editClicked","field","entity","edit"],[3,"field","entity"],["name","app-file-upload","path","file-upload/file-upload.component.ts"],["fieldID","sgFileUpload","fieldName","Waiver","fControlName","specimenFile",3,"fileChange","onDownload","extraButtonClick","fGroup","canDownload"],["name","app-file-viewer-modal","path","file-viewer-modal/file-viewer-modal.component.ts","note","opens on demand"],["type","button",1,"btn","btn-secondary","btn-sm",3,"click"],["fileName","waiver-signed.pdf",3,"visibleChange","downloadFile","visible","viewUrl"],["name","app-focal-point-picker","path","focal-point-picker/focal-point-picker.component.ts"],["label","Focal Point",3,"focalPointChange","imageUrl"],["name","app-gif-picker","path","giphy/gif-picker.component.ts","module","message","note","opens on demand"],["name","app-health-score-status","path","health-score-status/health-score-status.component.ts"],["size","small"],["size","default"],["size","large"],["name","app-image-cropper","path","image-cropper/image-cropper.component.ts","note","opens on demand"],["name","app-inline-alert","path","inline-alert/inline-alert.component.ts"],["alertType","error"],["alertType","warning"],["alertType","success"],["alertType","info"],["alertType","note"],["name","app-masked-checkbox","path","masked-checkbox/masked-checkbox.component.ts"],["inputID","sgMasked1","label","Share my email with coaches","descriptionText","Coaches see your address on the roster.",3,"isCheckedChange","isChecked"],["name","app-message-edit-bubble","path","message-edit-bubble/message-edit-bubble.component.ts","note","opens on demand"],[3,"close","save","delete","pin","report","isVisible","message","canEdit","canDelete","canPin","canReport","reportReasons"],["name","app-message-edit-modal","path","message-edit-bubble/message-edit-modal.component.ts","note","not mounted \u2014 parked"],["name","app-message-report-modal","path","message-edit-bubble/message-report-modal.component.ts","note","not mounted \u2014 module-private"],["name","app-mfa-enrollment","path","mfa-enrollment/mfa-enrollment.component.ts"],[3,"enrolled","disabled","mfaStatus"],["name","app-multiple-file-upload","path","multiple-file-upload/multiple-file-upload.component.ts","note","live data"],["name","app-overlay-background","path","overlay-background/overlay-background.component.ts","note","fixed-position overlay"],["name","app-page-preview-frame","path","page-preview-frame/page-preview-frame.component.ts"],["heading","Home page","height","240px","emptyText","There is no preview to show yet.",3,"loaded","deviceChange","url","showDeviceToggle","showRefresh"],["name","app-pill","path","pill/pill.component.ts"],["status","default","text","Default"],["status","primary","text","Primary"],["status","secondary","text","Secondary"],["status","success","text","Success"],["status","warning","text","Warning"],["status","error","text","Error"],["status","success","text","With icon","icon","fa fa-check","ariaLabel","Marked complete",3,"onClick","clickable"],["variant","tag","status","black","text","Tag variant"],["name","app-pill-counter","path","pill-counter/
8469pill-counter.component.ts"],["tooltipText","No unread messages",3,"pillCount"],["tooltipText","12 unread messages",3,"pillCount"],["name","app-pip-status-bar","path","pip-status-bar/pip-status-bar.component.ts"],["ariaLabel","17 of 20 roster spots filled",3,"total","totalUsed"],["ariaLabel","4 of 20 roster spots filled",3,"total","totalUsed"],["name","app-player-status-styler","path","player-status-styler/player-status-styler.component.ts"],["statusTitle","Registered",3,"statusID"],["statusTitle","Waitlisted",3,"statusID"],["statusTitle","Withdrawn",3,"statusID"],["name","app-poll-details-view","path","poll-details-view/poll-details-view.component.ts","module","message","note","live data \xB7 opens on demand"],["name","app-poll-header","path","poll-header/poll-header.component.ts","module","message"],["question","Which time works best for the makeup session?","subtitle","13 votes",3,"refresh","isSender"],["name","app-poll-options","path","poll-options/poll-options.component.ts","module","message"],[3,"optionSelected","votesUpdated","options","totalVotes","hasVoted","selectedOptionId","leadingOptionId"],["name","app-quick-rsvp-bubbles","path","quick-rsvp-bubbles/quick-rsvp-bubbles.component.ts","note","live data"],["name","app-score-display","path","score-display/score-display.component.ts"],[3,"gameResult"],["name","app-side-nav","path","side-nav/side-nav.component.ts"],["header","Registration",3,"steps","activeStep","activeSecondaryStep"],["name","app-spinning-icon","path","spinning-icon/spinning-icon.component.ts"],["iconClass","fa-solid fa-spinner"],["name","app-split-button","path","split-button/split-button.component.ts"],["buttonText","Actions","buttonClass","btn-secondary",3,"menuItems"],["name","app-sport-item","path","sport-item/sport-item.component.ts"],[3,"sportID"],["name","app-star-rating","path","star-rating/star-rating.component.ts"],[3,"rating","fullWidth"],[3,"updateRating","rating","editable","fullWidth"],[3,"rating","circleStars","fullWidth"],["name","app-status-bar","path","status-bar/status-bar.component.ts"],["ariaLabel","88% of registrations complete",3,"percent"],["ariaLabel","45% of registrations complete",3,"percent"],["ariaLabel","12% of registrations complete",3,"percent"],["name","app-tag","path","tag/tag.component.ts"],["text","Goalkeeper"],["text","Clickable","icon","fa fa-xmark",3,"onClick","clickable"],["name","app-team-accounts-disclosure","path","team-accounts-disclosure/team-accounts-disclosure.component.ts"],["name","app-team-accounts-transactions-disclosure","path","team-accounts-transactions-disclosure/team-accounts-transactions-disclosure.component.ts"],["name","app-team-logo","path","team-logo/team-logo.component.ts"],[3,"logo"],["name","app-time-dots","path","time-dots/time-dots.component.ts","note","live data"],["name","app-title-link","path","title-link/title-link.component.ts"],["text","Edit program details"],["text","No icon",3,"showIcon","borderBottom"],["name","app-tooltip","path","tooltip/tooltip.component.ts","module","tooltip"],["tooltipText","Shown to members on the public roster.","tooltipPosition","right"],["tooltipText","This field is required.","status","error","tooltipPosition","top"],["tooltipText","Inline variant.",3,"isInline","useIcon","renderAsLink"],["name","app-training-focus-pills","path","training-focus-pills/training-focus-pills.component.ts"],[3,"focuses","maxVisible"],["name","app-ul-nav","path","ul-nav/ul-nav.component.ts"],["header","Checkout",3,"steps","activeStep"],["name","app-user-initials","path","user-initials/user-initials.component.ts"],["firstName","Jordan","lastName","Alvarez",3,"id"],["firstName","Riley","lastName","Chen","size","large",3,"id"],["firstName","Sam","lastName","Okafor",3,"id","showCircle"],["name","app-yes-no-modal","path","yes-no-modal/yes-no-modal.component.ts","note","opens on demand"],[1,"btn-a11y",3,"href"],[1,"text-grey"],[3,"viewProfileButton","player","showProfileButton"],[3,"start","end"],[3,"closeChatEvent"],[3,"modalClosed","calEvent","teamID"],[3,"modalClosed","attendanceChanged","calEvent"],["teamColor","#003261",3,"toggleTeam","team","isAdmin"],[3,"filesChanged","onFileClick","maxFiles","existingFiles"],[3,"gifSelected","gifCancel","gifSearch"],[3,"finalImage","onCancel","imageURL","icAspectRatio","showCancel","showPresetDimensions"],["fieldID","sgMultiUpload","fieldName","Documents","fControlName","specimenFiles",3,"onSelect","onDownload","onDelete","onChange","fGroup","files","fileLimit"],[3,"close","save","voteSubmitted","refreshPollRequested","deleteClicked","existingPoll","readonly","clubUserID"],["bubbleSize","default",3,"event","teamID"],["bubbleSize","small",3,"event","teamID"],["bubbleSize","tiny",3,"event","teamID"],[3,"durationInMinutes"],["headerText","Remove player?","modalText","This removes Jordan Alvarez from the roster. It cannot be undone.","yesButtonText","Remove","noButtonText","Cancel","alertType","warning",3,"onYesSelect","onNoSelect"]],template:function(s,o){s&1&&(n(0,"h2"),e(1,"Component Library \u2014 Staging"),t(),e(2,`
8470`),n(3,"p",0),e(4,`
8471    Every component in `),n(5,"code"),e(6,"shared/modules/components/"),t(),e(7,` mounted once, so the accessibility
8472    audit can reach the whole library from a single route. `),n(8,"strong"),e(9,"98 components"),t(),e(10,", in "),n(11,"strong"),e(12,"folder order"),t(),e(13,` \u2014 this is a raw staging area, not a designed page. The logical
8473    grouping is the next step; nothing here should be read as a recommended taxonomy.
8474`),t(),e(14,`
8475`),n(15,"p",0),e(16,`
8476    Specimens are the `),n(17,"strong"),e(18,"real components"),t(),e(19,` with realistic inputs, not replicas. Where one
8477    looks broken, the component is broken. Inventory taken `),n(20,"strong"),e(21),t(),e(22,`.
8478`),t(),e(23,`
8479
8480`),n(24,"div",1),e(25,`
8481    `),n(26,"h3"),e(27,"How to read this page"),t(),e(28,`
8482    `),n(29,"ul",2),e(30,`
8483        `),n(31,"li"),e(32,`
8484            Each specimen carries its `),n(33,"strong"),e(34,"selector"),t(),e(35,", its "),n(36,"strong"),e(37,"path"),t(),e(38,` under the
8485            library root, and \u2014 where it is not the default \u2014 its `),n(39,"strong"),e(40,"declaring module"),t(),e(41,`.
8486            Three modules feed this page: `),n(42,"code"),e(43,"ComponentsModule"),t(),e(44,` (86 exported),
8487            `),n(45,"code"),e(46,"MessageModule"),t(),e(47," (11), "),n(48,"code"),e(49,"TooltipModule"),t(),e(50,` (1), plus
8488            `),n(51,"code"),e(52,"app-teaser-card"),t(),e(53,`, the library's only standalone component.
8489        `),t(),e(54,`
8490        `),n(55,"li"),e(56,`
8491            `),c(57,"app-pill",3),e(58,`
8492            marks the `),n(59,"strong"),e(60,"11 components that touch a service in "),n(61,"code"),e(62,"ngOnInit"),t()(),e(63,`.
8493            Append `),n(64,"code"),e(65,"?live=0"),t(),e(66,` to the URL to skip creating them \u2014 the guard runs before they
8494            are constructed, so one that throws cannot take the page down with it.
8495        `),t(),e(67,`
8496        `),n(68,"li"),e(69,`
8497            `),c(70,"app-pill",4),e(71,`
8498            marks dialogs and overlays. They render nothing until launched, so each has a button
8499            rather than being mounted open. `),n(72,"strong"),e(73,`An axe sweep of this page will not see them
8500            unless they are opened first.`),t(),e(74,`
8501        `),t(),e(75,`
8502        `),n(76,"li"),e(77,`
8503            Four components here are also documented in depth on their own pages
8504            (`),n(78,"a",5),e(79,"pills & tags"),t(),e(80,`,
8505            `),n(81,"a",6),e(82,"avatars"),t(),e(83,`,
8506            `),n(84,"a",7),e(85,"cards"),t(),e(86,`,
8507            `),n(87,"a",8),e(88,"system alerts"),t(),e(89,`).
8508            That duplication is deliberate and temporary \u2014 it keeps this sweep complete, and the
8509            card sort resolves it.
8510        `),t(),e(90,`
8511    `),t(),e(91,`
8512`),t(),e(92,`
8513
8514`),n(93,"div",1),e(94,`
8515    `),n(95,"h3"),e(96,"Jump to"),t(),e(97,`
8516    `),n(98,"ul",2),e(99,`
8517        `),S(100,k1,11,4,null,null,_1),t(),e(102,`
8518`),t(),e(103,`
8519
8520`),e(104,`
8521`),n(105,"div",1),e(106,`
8522    `),n(107,"h3",9),e(108,"admin/ "),n(109,"span",0),e(110,"\u2014 8"),t()(),e(111,`
8523
8524    `),n(112,"app-sg-specimen",10),e(113,`
8525        `),n(114,"app-admin-header",11),g("backButtonClicked",function(){return o.noop()})("primaryBtnAction",function(){return o.noop()})("secondaryBtnAction",function(){return o.noop()}),t(),e(115,`
8526    `),t(),e(116,`
8527
8528    `),n(117,"app-sg-specimen",12),e(118,`
8529        `),n(119,"app-admin-header-description"),e(120,`
8530            Rosters lock 48 hours before the first scheduled game.
8531        `),t(),e(121,`
8532    `),t(),e(122,`
8533
8534    `),n(123,"app-sg-specimen",13),e(124,`
8535        `),n(125,"app-admin-dashboard-card",14),g("settingsClick",function(){return o.noop()}),e(126,`
8536            `),n(127,"p",15),e(128,"Panel body content is projected."),t(),e(129,`
8537        `),t(),e(130,`
8538    `),t(),e(131,`
8539
8540    `),n(132,"app-sg-specimen",16),e(133,`
8541        `),n(134,"div",17),e(135,`
8542            `),n(136,"div",18),e(137,`
8543                `),c(138,"app-admin-dashboard-card",19),e(139,`
8544            `),t(),e(140,`
8545            `),n(141,"div",18),e(142,`
8546                `),c(143,"app-admin-dashboard-card",20),e(144,`
8547            `),t(),e(145,`
8548        `),t(),e(146,`
8549    `),t(),e(147,`
8550
8551    `),n(148,"app-sg-specimen",21),e(149,`
8552        `),n(150,"div",17),e(151,`
8553            `),n(152,"div",22),e(153,`
8554                `),n(154,"app-admin-dashboard-card-mini",23),e(155,`
8555                `),t(),e(156,`
8556            `),t(),e(157,`
8557            `),n(158,"div",22),e(159,`
8558                `),n(160,"app-admin-dashboard-card-mini",24),e(161,`
8559                `),t(),e(162,`
8560            `),t(),e(163,`
8561            `),n(164,"div",22),e(165,`
8562                `),n(166,"app-admin-dashboard-card-mini",25),e(167,`
8563                `),t(),e(168,`
8564            `),t(),e(169,`
8565        `),t(),e(170,`
8566    `),t(),e(171,`
8567
8568    `),n(172,"app-sg-specimen",26),e(173,`
8569        `),n(174,"app-admin-filter",27),g("adminFilterSearch",function(){return o.noop()})("adminFilterReset",function(){return o.noop()})("advancedFiltersToggled",function(){return o.noop()}),e(175,`
8570        `),t(),e(176,`
8571    `),t(),e(177,`
8572
8573    `),n(178,"app-sg-specimen",28),e(179,`
8574        `),v(180,T1,3,0),t(),e(181,`
8575
8576    `),n(182,"app-sg-specimen",29),e(183,`
8577        `),n(184,"app-step-content-ui",30),g("menuToggle",function(){return o.noop()})("toggleChange",function(){return o.noop()})("accordionToggle",function(){return o.noop()}),e(185,`
8578            `),n(186,"p",15),e(187,"Step body content is projected."),t(),e(188,`
8579        `),t(),e(189,`
8580    `),t(),e(190,`
8581
8582    `),n(191,"app-sg-specimen",31),e(192,`
8583        `),c(193,"app-win-loss-record",32),e(194,`
8584    `),t(),e(195,`
8585`),t(),e(196,`
8586
8587`),e(197,`
8588`),n(198,"div",1),e(199,`
8589    `),n(200,"h3",33),e(201,"agent-chat/ "),n(202,"span",0),e(203,"\u2014 6"),t()(),e(204,`
8590
8591    `),n(205,"app-sg-specimen",34),e(206,`
8592        `),n(207,"app-agent-chat-panel",35),g("collapsedChange",function(){return o.noop()}),e(208,`
8593            `),n(209,"p",15),e(210,"Panel body content is projected."),t(),e(211,`
8594        `),t(),e(212,`
8595    `),t(),e(213,`
8596
8597    `),n(214,"app-sg-specimen",36),e(215,`
8598        `),c(216,"app-agent-chat-transcript",37),e(217,`
8599    `),t(),e(218,`
8600
8601    `),n(219,"app-sg-specimen",38),e(220,`
8602        `),c(221,"app-agent-chat-transcript",39),e(222,`
8603    `),t(),e(223,`
8604
8605    `),n(224,"app-sg-specimen",40),e(225,`
8606        `),n(226,"app-agent-question-panel",41),g("answeredChange",function(){return o.noop()})("quickAnswer",function(){return o.noop()}),t(),e(227,`
8607    `),t(),e(228,`
8608
8609    `),n(229,"app-sg-specimen",42),e(230,`
8610        `),c(231,"app-agent-answer-blocks",43),e(232,`
8611    `),t(),e(233,`
8612
8613    `),n(234,"app-sg-specimen",44),e(235,`
8614        `),c(236,"app-agent-reply-selections",45),e(237,`
8615    `),t(),e(238,`
8616
8617    `),n(239,"app-sg-specimen",46),e(240,`
8618        `),n(241,"app-agent-reply-composer",47),g("valueChange",function(){return o.noop()})("send",function(){return o.noop()}),t(),e(242,`
8619    `),t(),e(243,`
8620`),t(),e(244,`
8621
8622`),e(245,`
8623`),n(246,"div",1),e(247,`
8624    `),n(248,"h3",48),e(249,"cards/ "),n(250,"span",0),e(251,"\u2014 8"),t()(),e(252,`
8625    `),n(253,"p",0),e(254,`
8626        Documented in depth on `),n(255,"a",7),e(256,"the cards page"),t(),e(257,`. Mounted
8627        here so the sweep is complete.
8628    `),t(),e(258,`
8629
8630    `),n(259,"app-sg-specimen",49),e(260,`
8631        `),n(261,"div",17),e(262,`
8632            `),n(263,"div",50),e(264,`
8633                `),n(265,"app-blog-card",51),g("blogCardClick",function(){return o.noop()}),t(),e(266,`
8634            `),t(),e(267,`
8635        `),t(),e(268,`
8636    `),t(),e(269,`
8637
8638    `),n(270,"app-sg-specimen",52),e(271,`
8639        `),c(272,"app-calendar-card",53),e(273,`
8640    `),t(),e(274,`
8641
8642    `),n(275,"app-sg-specimen",54),e(276,`
8643        `),n(277,"app-null-card",55),g("buttonClicked",function(){return o.noop()}),t(),e(278,`
8644    `),t(),e(279,`
8645
8646    `),n(280,"app-sg-specimen",56),e(281,`
8647        `),c(282,"app-promo-card",57),e(283,`
8648    `),t(),e(284,`
8649
8650    `),n(285,"app-sg-specimen",58),e(286,`
8651        `),v(287,I1,3,2),t(),e(288,`
8652
8653    `),n(289,"app-sg-specimen",59),e(290,`
8654        `),c(291,"app-staff-card",60),e(292,`
8655    `),t(),e(293,`
8656
8657    `),n(294,"app-sg-specimen",61),e(295,`
8658        `),n(296,"app-teaser-card",62),g("cardClick",function(){return o.noop()}),e(297,`
8659            `),n(298,"h4",63),e(299,"Fall 2026 Travel"),t(),e(300,`
8660            `),n(301,"p",64),e(302,"Registration closes 15 September."),t(),e(303,`
8661        `),t(),e(304,`
8662    `),t(),e(305,`
8663
8664    `),n(306,"app-sg-specimen",65),e(307,`
8665        `),n(308,"app-user-info-view-only-card",66),g("edit",function(){return o.no
8665op()}),t(),e(309,`
8666    `),t(),e(310,`
8667`),t(),e(311,`
8668
8669`),e(312,`
8670`),n(313,"div",1),e(314,`
8671    `),n(315,"h3",67),e(316,"layout/ "),n(317,"span",0),e(318,"\u2014 3"),t()(),e(319,`
8672
8673    `),n(320,"app-sg-specimen",68),e(321,`
8674        `),n(322,"app-global-banner-content",69),e(323,`
8675            `),n(324,"h3",70),e(325,"Welcome to the club"),t(),e(326,`
8676        `),t(),e(327,`
8677    `),t(),e(328,`
8678
8679    `),n(329,"app-sg-specimen",71),e(330,`
8680        `),n(331,"app-sidebar-nav-tabs",72),g("tabClick",function(){return o.noop()}),t(),e(332,`
8681    `),t(),e(333,`
8682
8683    `),n(334,"app-sg-specimen",73),e(335,`
8684        `),n(336,"app-team-banner",74),g("profileImageSelected",function(){return o.noop()})("logoRemoved",function(){return o.noop()}),t(),e(337,`
8685    `),t(),e(338,`
8686`),t(),e(339,`
8687
8688`),e(340,`
8689`),n(341,"div",1),e(342,`
8690    `),n(343,"h3",75),e(344,"message/ "),n(345,"span",0),e(346,"\u2014 10"),t()(),e(347,`
8691    `),n(348,"p",0),e(349,`
8692        Declared by `),n(350,"code"),e(351,"MessageModule"),t(),e(352,", not "),n(353,"code"),e(354,"ComponentsModule"),t(),e(355,`.
8693    `),t(),e(356,`
8694
8695    `),n(357,"app-sg-specimen",76),e(358,`
8696        `),n(359,"app-message-bubble",77),g("replyClicked",function(){return o.noop()})("reactClicked",function(){return o.noop()})("editClicked",function(){return o.noop()})("deleteMessageClicked",function(){return o.noop()})("messageTextClicked",function(){return o.noop()}),t(),e(360,`
8697    `),t(),e(361,`
8698
8699    `),n(362,"app-sg-specimen",78),e(363,`
8700        `),c(364,"app-message-bubble",79),e(365,`
8701        `),c(366,"app-message-bubble",80),e(367,`
8702    `),t(),e(368,`
8703
8704    `),n(369,"app-sg-specimen",81),e(370,`
8705        `),n(371,"app-message-form",82),g("sendMessage",function(){return o.noop()})("deleteQuote",function(){return o.noop()})("pollCreated",function(){return o.noop()}),t(),e(372,`
8706    `),t(),e(373,`
8707
8708    `),n(374,"app-sg-specimen",83),e(375,`
8709        `),n(376,"app-message-quote",84),g("deleteQuote",function(){return o.noop()}),t(),e(377,`
8710    `),t(),e(378,`
8711
8712    `),n(379,"app-sg-specimen",85),e(380,`
8713        `),v(381,M1,4,2),t(),e(382,`
8714
8715    `),n(383,"app-sg-specimen",86),e(384,`
8716        `),n(385,"p",64),e(386,`
8717            Declared by `),n(387,"strong"),e(388,"no module"),t(),e(389,` and not standalone, and its selector appears in
8718            `),n(390,"strong"),e(391,"no template in the app"),t(),e(392,`. Nothing can render it. Inventory only.
8719        `),t(),e(393,`
8720    `),t(),e(394,`
8721
8722    `),n(395,"app-sg-specimen",87),e(396,`
8723        `),n(397,"app-pinned-messages-panel",88),g("togglePanel",function(){return o.noop()})("messageClicked",function(){return o.noop()})("unpinClicked",function(){return o.noop()}),t(),e(398,`
8724    `),t(),e(399,`
8725
8726    `),n(400,"app-sg-specimen",89),e(401,`
8727        `),n(402,"app-message-poll",90),g("voteSubmitted",function(){return o.noop()})("pollUpdated",function(){return o.noop()})("refreshPollRequested",function(){return o.noop()}),t(),e(403,`
8728    `),t(),e(404,`
8729
8730    `),n(405,"app-sg-specimen",91),e(406,`
8731        `),n(407,"p",64),e(408,`
8732            Declared by `),n(409,"strong"),e(410,"no module"),t(),e(411,` and not standalone, and its selector appears in
8733            `),n(412,"strong"),e(413,"no template in the app"),t(),e(414,`. Nothing can render it. Inventory only.
8734        `),t(),e(415,`
8735    `),t(),e(416,`
8736
8737    `),n(417,"app-sg-specimen",92),e(418,`
8738        `),n(419,"p",64),e(420,`
8739            Positioned from a long-press on a bubble; it has no standalone launch state.
8740            Test it in situ from the `),n(421,"code"),e(422,"app-message-bubble"),t(),e(423,` specimen above.
8741        `),t(),e(424,`
8742    `),t(),e(425,`
8743
8744    `),n(426,"app-sg-specimen",93),e(427,`
8745        `),n(428,"p",64),e(429,`
8746            Declared by `),n(430,"strong"),e(431,"no module"),t(),e(432,` and not standalone, and its selector appears in
8747            `),n(433,"strong"),e(434,"no template in the app"),t(),e(435,`. Nothing can render it. Inventory only \u2014
8748            note it injects `),n(436,"code"),e(437,"SiteDataService"),t(),e(438,` and fetches, so it was written to work.
8749        `),t(),e(439,`
8750    `),t(),e(440,`
8751`),t(),e(441,`
8752
8753`),e(442,`
8754`),n(443,"div",1),e(444,`
8755    `),n(445,"h3",94),e(446,"null-states/ "),n(447,"span",0),e(448,"\u2014 2"),t()(),e(449,`
8756
8757    `),n(450,"app-sg-specimen",95),e(451,`
8758        `),n(452,"table",96),e(453,`
8759            `),n(454,"tbody"),e(455,`
8760                `),n(456,"app-null-table-row",97),g("buttonClicked",function(){return o.no
8760op()}),t(),e(457,`
8761            `),t(),e(458,`
8762        `),t(),e(459,`
8763    `),t(),e(460,`
8764
8765    `),n(461,"app-sg-specimen",98),e(462,`
8766        `),n(463,"div",17),e(464,`
8767            `),n(465,"div",22),e(466,`
8768                `),n(467,"app-sg-caption",99),e(468,'skeletonType="text"'),t(),e(469,`
8769                `),c(470,"app-skeleton-template",100),e(471,`
8770            `),t(),e(472,`
8771            `),n(473,"div",22),e(474,`
8772                `),n(475,"app-sg-caption",99),e(476,'skeletonType="table"'),t(),e(477,`
8773                `),c(478,"app-skeleton-template",101),e(479,`
8774            `),t(),e(480,`
8775            `),n(481,"div",22),e(482,`
8776                `),n(483,"app-sg-caption",99),e(484,'skeletonType="form"'),t(),e(485,`
8777                `),c(486,"app-skeleton-template",102),e(487,`
8778            `),t(),e(488,`
8779        `),t(),e(489,`
8780    `),t(),e(490,`
8781`),t(),e(491,`
8782
8783`),e(492,`
8784`),n(493,"div",1),e(494,`
8785    `),n(495,"h3",103),e(496,"status-indicator/ "),n(497,"span",0),e(498,"\u2014 2"),t()(),e(499,`
8786
8787    `),n(500,"app-sg-specimen",104),e(501,`
8788        `),c(502,"app-status-indicator",105),e(503,`
8789        `),c(504,"app-status-indicator",106),e(505,`
8790        `),c(506,"app-status-indicator",107),e(507,`
8791        `),c(508,"app-status-indicator",108),e(509,`
8792        `),c(510,"app-status-indicator",109),e(511,`
8793        `),c(512,"app-status-indicator",110),e(513,`
8794        `),c(514,"app-status-indicator",111),e(515,`
8795    `),t(),e(516,`
8796
8797    `),n(517,"app-sg-specimen",112),e(518,`
8798        `),n(519,"app-big-status-indicator",113),e(520,`
8799        `),t(),e(521,`
8800        `),n(522,"app-big-status-indicator",114),e(523,`
8801        `),t(),e(524,`
8802    `),t(),e(525,`
8803`),t(),e(526,`
8804
8805`),e(527,`
8806`),n(528,"div",1),e(529,`
8807    `),n(530,"h3",115),e(531,"root-level "),n(532,"span",0),e(533,"\u2014 59"),t()(),e(534,`
8808    `),n(535,"p",0),e(536,`
8809        Alphabetical by folder. This is the group the card sort has the most to say about \u2014 it is
8810        alphabetical only because the filesystem is.
8811    `),t(),e(537,`
8812
8813    `),n(538,"app-sg-specimen",116),e(539,`
8814        `),n(540,"app-ai-chat-launcher",117),g("chatBotClicked",function(){return o.noop()}),e(541,`
8815        `),t(),e(542,`
8816    `),t(),e(543,`
8817
8818    `),n(544,"app-sg-specimen",118),e(545,`
8819        `),v(546,D1,3,0),t(),e(547,`
8820
8821    `),n(548,"app-sg-specimen",119),e(549,`
8822        `),v(550,F1,3,2),t(),e(551,`
8823
8824    `),n(552,"app-sg-specimen",120),e(553,`
8825        `),v(554,P1,3,1),t(),e(555,`
8826
8827    `),n(556,"app-sg-specimen",121),e(557,`
8828        `),n(558,"app-back-link",122),g("back",function(){return o.noop()}),t(),e(559,`
8829    `),t(),e(560,`
8830
8831    `),n(561,"app-sg-specimen",123),e(562,`
8832        `),n(563,"button",124),e(564,`
8833            `),c(565,"app-button-loader"),e(566,` Saving\u2026
8834        `),t(),e(567,`
8835    `),t(),e(568,`
8836
8837    `),n(569,"app-sg-specimen",125),e(570,`
8838        `),v(571,A1,3,2),t(),e(572,`
8839
8840    `),n(573,"app-sg-specimen",126),e(574,`
8841        `),n(575,"app-calendar-week-view",127),g("showEvent",function(){return o.noop()})("addEvent",function(){return o.noop()})("dropEvent",function(){return o.noop()}),t(),e(576,`
8842    `),t(),e(577,`
8843
8844    `),n(578,"app-sg-specimen",128),e(579,`
8845        `),n(580,"app-checkbox-button",129),g("valueChange",function(){return o.noop()}),t(),e(581,`
8846        `),n(582,"app-checkbox-button",130),g("valueChange",function(){return o.noop()}),t(),e(583,`
8847    `),t(),e(584,`
8848
8849    `),n(585,"app-sg-specimen",131),e(586,`
8850        `),n(587,"app-checkbox-row",132),g("selectionChange",function(){return o.noop()}),t(),e(588,`
8851        `),n(589,"app-checkbox-row",133),g("selectionChange",function(){return o.noop()}),t(),e(590,`
8852        `),n(591,"app-checkbox-row",134),g("disabledClick",function(){return o.noop()}),t(),e(592,`
8853    `),t(),e(593,`
8854
8855    `),n(594,"app-sg-specimen",135),e(595,`
8856        `),n(596,"app-close-icon",136),g("close",function(){return o.noop()}),t(),e(597,`
8857    `),t(),e(598,`
8858
8859    `),n(599,"app-sg-specimen",137),e(600,`
8860        `),c(601,"app-colorize-differential",138),e(602,`
8861        `),c(603,"app-colorize-differential",138),e(604,`
8862        `),c(605,"app-colorize-differential",138),e(606,`
8863    `),t(),e(607,`
8864
8865    `),n(608,"app-sg-specimen",139),e(609,`
8866        `),n(610,"app-completion-status-bar",140),e(611,`
8867        `),t(),e(612,`
8868    `),t(),e(613,`
8869
8870    `),n(614,"app-sg-specimen",141),e(615,`
8871        `),v(616,O1,7,0),t(),e(617,`
8872
8873    `),n(618,"app-sg-specimen",142),e(619,`
8874        `),n(620,"app-date-range-filter",143),g("rangeChange",function(){return o.no
8874op()}),t(),e(621,`
8875    `),t(),e(622,`
8876
8877    `),n(623,"app-sg-specimen",144),e(624,`
8878        `),n(625,"app-dialog-footer"),e(626,`
8879            `),n(627,"button",145),e(628,"Cancel"),t(),e(629,`
8880            `),n(630,"button",146),e(631,"Save"),t(),e(632,`
8881        `),t(),e(633,`
8882    `),t(),e(634,`
8883
8884    `),n(635,"app-sg-specimen",147),e(636,`
8885        `),v(637,N1,3,2),t(),e(638,`
8886
8887    `),n(639,"app-sg-specimen",148),e(640,`
8888        `),n(641,"app-field-view-only-row",149),g("editClicked",function(){return o.noop()}),t(),e(642,`
8889        `),n(643,"app-field-view-only-row",150),e(644,`
8890        `),t(),e(645,`
8891    `),t(),e(646,`
8892
8893    `),n(647,"app-sg-specimen",151),e(648,`
8894        `),n(649,"app-file-upload",152),g("fileChange",function(){return o.noop()})("onDownload",function(){return o.noop()})("extraButtonClick",function(){return o.noop()}),t(),e(650,`
8895    `),t(),e(651,`
8896
8897    `),n(652,"app-sg-specimen",153),e(653,`
8898        `),n(654,"button",154),g("click",function(){return o.open("fileViewer")}),e(655,`
8899            Open file viewer
8900        `),t(),e(656,`
8901        `),n(657,"app-file-viewer-modal",155),M("visibleChange",function(h){return I(o.modals.fileViewer,h)||(o.modals.fileViewer=h),h}),g("downloadFile",function(){return o.noop()}),t(),e(658,`
8902    `),t(),e(659,`
8903
8904    `),n(660,"app-sg-specimen",156),e(661,`
8905        `),n(662,"app-focal-point-picker",157),g("focalPointChange",function(){return o.noop()}),t(),e(663,`
8906    `),t(),e(664,`
8907
8908    `),n(665,"app-sg-specimen",158),e(666,`
8909        `),n(667,"button",154),g("click",function(){return o.open("gifPicker")}),e(668,`
8910            Open GIF picker
8911        `),t(),e(669,`
8912        `),v(670,B1,4,0),t(),e(671,`
8913
8914    `),n(672,"app-sg-specimen",159),e(673,`
8915        `),c(674,"app-health-score-status",160),e(675,`
8916        `),c(676,"app-health-score-status",161),e(677,`
8917        `),c(678,"app-health-score-status",162),e(679,`
8918    `),t(),e(680,`
8919
8920    `),n(681,"app-sg-specimen",163),e(682,`
8921        `),n(683,"button",154),g("click",function(){return o.open("imageCropper")}),e(684,`
8922            Mount cropper
8923        `),t(),e(685,`
8924        `),v(686,W1,3,4),t(),e(687,`
8925
8926    `),n(688,"app-sg-specimen",164),e(689,`
8927        `),n(690,"app-inline-alert",165),e(691,"Payment could not be processed."),t(),e(692,`
8928        `),n(693,"app-inline-alert",166),e(694,"Two waivers are still unsigned."),t(),e(695,`
8929        `),n(696,"app-inline-alert",167),e(697,"Registration complete."),t(),e(698,`
8930        `),n(699,"app-inline-alert",168),e(700,"Rosters lock 48 hours before the first game."),t(),e(701,`
8931        `),n(702,"app-inline-alert",169),e(703,"Draft \u2014 not yet visible to members."),t(),e(704,`
8932    `),t(),e(705,`
8933
8934    `),n(706,"app-sg-specimen",170),e(707,`
8935        `),n(708,"app-masked-checkbox",171),g("isCheckedChange",function(){return o.noop()}),t(),e(709,`
8936    `),t(),e(710,`
8937
8938    `),n(711,"app-sg-specimen",172),e(712,`
8939        `),n(713,"button",154),g("click",function(){return o.open("messageEdit")}),e(714,`
8940            Open edit bubble
8941        `),t(),e(715,`
8942        `),n(716,"app-message-edit-bubble",173),g("close",function(){return o.modals.messageEdit=!1})("save",function(){return o.noop()})("delete",function(){return o.noop()})("pin",function(){return o.noop()})("report",function(){return o.noop()}),t(),e(717,`
8943    `),t(),e(718,`
8944
8945    `),n(719,"app-sg-specimen",174),e(720,`
8946        `),n(721,"p",64),e(722,`
8947            Its declaration in `),n(723,"code"),e(724,"ComponentsModule"),t(),e(725,` and its only usage in
8948            `),n(726,"code"),e(727,"message-edit-bubble.component.html"),t(),e(728," are "),n(729,"strong"),e(730,"both commented out"),t(),e(731,`.
8949            Deliberately parked rather than broken. Inventory only.
8950        `),t(),e(732,`
8951    `),t(),e(733,`
8952
8953    `),n(734,"app-sg-specimen",175),e(735,`
8954        `),n(736,"p",64),e(737,`
8955            Declared by `),n(738,"code"),e(739,"ComponentsModule"),t(),e(740," but "),n(741,"strong"),e(742,"not exported"),t(),e(743,`, and used in
8956            exactly one template \u2014 `),n(744,"code"),e(745,"message-edit-bubble.component.html"),t(),e(746,`. It is a
8957            private sub-component, not part of the library surface. Reach it through
8958            `),n(747,"code"),e(748,"app-message-edit-bubble"),t(),e(749,` above.
8959        `),t(),e(750,`
8960    `),t(),e(751,`
8961
8962    `),n(752,"app-sg-specimen",176),e(753,`
8963        `),n(754,"app-mfa-enrollment",177),g("enrolled",function(){return o.no
8963op()})("disabled",function(){return o.noop()}),e(755,`
8964        `),t(),e(756,`
8965    `),t(),e(757,`
8966
8967    `),n(758,"app-sg-specimen",178),e(759,`
8968        `),v(760,R1,4,3),t(),e(761,`
8969
8970    `),n(762,"app-sg-specimen",179),e(763,`
8971        `),n(764,"p",64),e(765,`
8972            Covers the viewport when mounted, so it is not rendered here \u2014 it would sit over every
8973            other specimen. Test it from any dialog specimen on this page.
8974        `),t(),e(766,`
8975    `),t(),e(767,`
8976
8977    `),n(768,"app-sg-specimen",180),e(769,`
8978        `),n(770,"app-page-preview-frame",181),g("loaded",function(){return o.noop()})("deviceChange",function(){return o.noop()}),t(),e(771,`
8979    `),t(),e(772,`
8980
8981    `),n(773,"app-sg-specimen",182),e(774,`
8982        `),n(775,"p",0),e(776,`
8983            Full catalog on `),n(777,"a",5),e(778,"the pills & tags page"),t(),e(779,`.
8984        `),t(),e(780,`
8985        `),c(781,"app-pill",183),e(782,`
8986        `),c(783,"app-pill",184),e(784,`
8987        `),c(785,"app-pill",185),e(786,`
8988        `),c(787,"app-pill",186),e(788,`
8989        `),c(789,"app-pill",187),e(790,`
8990        `),c(791,"app-pill",188),e(792,`
8991        `),n(793,"app-pill",189),g("onClick",function(){return o.noop()}),t(),e(794,`
8992        `),c(795,"app-pill",190),e(796,`
8993    `),t(),e(797,`
8994
8995    `),n(798,"app-sg-specimen",191),e(799,`
8996        `),c(800,"app-pill-counter",192),e(801,`
8997        `),c(802,"app-pill-counter",193),e(803,`
8998    `),t(),e(804,`
8999
9000    `),n(805,"app-sg-specimen",194),e(806,`
9001        `),n(807,"app-pip-status-bar",195),e(808,`
9002        `),t(),e(809,`
9003        `),n(810,"app-pip-status-bar",196),e(811,`
9004        `),t(),e(812,`
9005    `),t(),e(813,`
9006
9007    `),n(814,"app-sg-specimen",197),e(815,`
9008        `),c(816,"app-player-status-styler",198),e(817,`
9009        `),c(818,"app-player-status-styler",199),e(819,`
9010        `),c(820,"app-player-status-styler",200),e(821,`
9011    `),t(),e(822,`
9012
9013    `),n(823,"app-sg-specimen",201),e(824,`
9014        `),v(825,q1,5,1),t(),e(826,`
9015
9016    `),n(827,"app-sg-specimen",202),e(828,`
9017        `),n(829,"app-poll-header",203),g("refresh",function(){return o.noop()}),t(),e(830,`
9018    `),t(),e(831,`
9019
9020    `),n(832,"app-sg-specimen",204),e(833,`
9021        `),n(834,"app-poll-options",205),g("optionSelected",function(){return o.noop()})("votesUpdated",function(){return o.noop()}),t(),e(835,`
9022    `),t(),e(836,`
9023
9024    `),n(837,"app-sg-specimen",206),e(838,`
9025        `),v(839,V1,10,6),t(),e(840,`
9026
9027    `),n(841,"app-sg-specimen",207),e(842,`
9028        `),c(843,"app-score-display",208),e(844,`
9029    `),t(),e(845,`
9030
9031    `),n(846,"app-sg-specimen",209),e(847,`
9032        `),c(848,"app-side-nav",210),e(849,`
9033    `),t(),e(850,`
9034
9035    `),n(851,"app-sg-specimen",211),e(852,`
9036        `),c(853,"app-spinning-icon"),e(854,`
9037        `),c(855,"app-spinning-icon",212),e(856,`
9038    `),t(),e(857,`
9039
9040    `),n(858,"app-sg-specimen",213),e(859,`
9041        `),n(860,"app-split-button",214),e(861,`
9042        `),t(),e(862,`
9043    `),t(),e(863,`
9044
9045    `),n(864,"app-sg-specimen",215),e(865,`
9046        `),c(866,"app-sport-item",216),e(867,`
9047        `),c(868,"app-sport-item",216),e(869,`
9048        `),c(870,"app-sport-item",216),e(871,`
9049    `),t(),e(872,`
9050
9051    `),n(873,"app-sg-specimen",217),e(874,`
9052        `),c(875,"app-star-rating",218),e(876,`
9053        `),n(877,"app-star-rating",219),g("updateRating",function(){return o.noop()}),t(),e(878,`
9054        `),c(879,"app-star-rating",220),e(880,`
9055    `),t(),e(881,`
9056
9057    `),n(882,"app-sg-specimen",221),e(883,`
9058        `),c(884,"app-status-bar",222),e(885,`
9059        `),c(886,"app-status-bar",223),e(887,`
9060        `),c(888,"app-status-bar",224),e(889,`
9061    `),t(),e(890,`
9062
9063    `),n(891,"app-sg-specimen",225),e(892,`
9064        `),c(893,"app-tag",226),e(894,`
9065        `),n(895,"app-tag",227),g("onClick",function(){return o.noop()}),t(),e(896,`
9066    `),t(),e(897,`
9067
9068    `),n(898,"app-sg-specimen",228),e(899,`
9069        `),c(900,"app-team-accounts-disclosure"),e(901,`
9070    `),t(),e(902,`
9071
9072    `),n(903,"app-sg-specimen",229),e(904,`
9073        `),c(905,"app-team-accounts-transactions-disclosure"),e(906,`
9074    `),t(),e(907,`
9075
9076    `),n(908,"app-sg-specimen",230),e(909,`
9077        `),c(910,"app-team-logo",231),e(911,`
9078        `),c(912,"app-team-logo",231),e(913,`
9079    `),t(),e(914,`
9080
9081    `),n(915,"app-sg-specimen",232),e(916,`
9082        `),v(917,z1,5,2),t(),e(918,`
9083
9084    `),n(919,"app-sg-specimen",233),e(920,`
9085        `),c(921,"app-title-link",234),e(922,`
9086        `),c(923,"app-title-link",235),e(924,`
9087    `),t(),e(925,`
9088
9089    `),n(926,"app-sg-specimen",236),e(927,`
9090        `),n(928,"app-tooltip",237),e(929,`
9091        `),t(),e(930,`
9092        `),n(931,"app-tooltip",238),e(932,`
9093        `),t(),e(933,`
9094        `),c(934,"app-tooltip",239),e(935,`
9095    `),t(),e(936,`
9096
9097    `),n(937,"app-sg-specimen",240),e(938,`
9098        `),n(939,"app-training-focus-pills",241),e(940,`
9099        `),t(),e(941,`
9100    `),t(),e(942,`
9101
9102    `),n(943,"app-sg-specimen",242),e(944,`
9103        `),c(945,"app-ul-nav",243),e(946,`
9104    `),t(),e(947,`
9105
9106    `),n(948,"app-sg-specimen",244),e(949,`
9107        `),n(950,"p",0),e(951,`
9108            Full catalog on `),n(952,"a",6),e(953,"the avatars page"),t(),e(954,`.
9109        `),t(),e(955,`
9110        `),c(956,"app-user-initials",245),e(957,`
9111        `),c(958,"app-user-initials",246),e(959,`
9112        `),n(960,"app-user-initials",247),e(961,`
9113        `),t(),e(962,`
9114    `),t(),e(963,`
9115
9116    `),n(964,"app-sg-specimen",248),e(965,`
9117        `),n(966,"button",154),g("click",function(){return o.open("yesNo")}),e(967,`
9118            Open confirm modal
9119        `),t(),e(968,`
9120        `),v(969,U1,4,0),t(),e(970,`
9121`),t(),e(971,`
9122`)),s&2&&(i(21),p(o.snapshotDate),i(79),E(o.groups),i(14),m("showBackButton",!0)("useBackButtonEmitter",!0),i(11),m("hasSettings",!0),i(13),m("loading",!0),i(5),m("error",!0),i(11),m("trendDirection","success"),i(6),m("trendDirection","danger"),i(6),m("trendDirection","none"),i(8),m("showAdvanced",!0)("showLabels",!0),i(6),y(o.showLive?180:-1),i(4),m("toggles",o.toggles)("isAccordion",!0)("expanded",!0)("dragDisabled",!0),i(9),m("totalWins",9)("totalLosses",3)("totalDraws",2),i(14),m("canCollapse",!0)("collapsed",!1),i(9),m("messages",o.agentMessages)("avatarSrc",o.sampleImage),i(5),m("messages",V(181,w1)),i(5),m("questions",o.agentQuestions),i(5),m("answer",o.agentAnswer),i(5),m("selections",null),i(5),m("canSend",!0),i(24),m("blogImage",o.sampleImage)("blogSavedOn",o.snapshotDate),i(7),m("startDate",o.calendarEvent.startDate)("endDate",o.calendarEvent.endD
9122ate)("clubEventTypeID",o.calendarEvent.clubEventTypeID),i(5),m("showButton",!0),i(5),m("features",V(182,C1))("image",o.sampleImage),i(5),y(o.showLive?287:-1),i(4),m("clubUser",o.staffClubUser),i(5),m("image",o.sampleImage)("clickable",!0),i(12),m("entity",o.viewOnlyEntity)("fields",o.viewOnlyFields)("isEditable",!0),i(14),m("primaryBannerImage",o.sampleImage),i(9),m("tabs",o.sidebarTabs)("activeTab",o.sidebarTabs[0])("sticky",!1),i(5),m("logoUrl",o.sampleImage)("canEditLogo",!0),i(23),m("messageID",9)("sentDate",o.calendarEvent.startDate.toISOString())("reactions",o.reactions)("canReply",!0)("canReact",!0)("canEdit",!0)("canDelete",!0),i(5),m("isSender",!0)("messageID",10)("sentDate",o.calendarEvent.startDate.toISOString()),i(2),m("messageID",11)("isDeleted",!0)("sentDate",o.calendarEvent.startDate.toISOString()),i(5),m("sendEnabled",!0)("showFileUpload",!0)("showGifUpload",!0)("canAddPoll",!0)("messageLimit",500),i(5),m("quotedMessage",o.quotedMessage)("canDelete",!0),i(5),y(o.showLive?381:-1),i(16),m("pinnedMessages",o.pinnedMessages)("totalPinned",1)("showPanel",!0),i(5),m("poll",o.poll)("clubUserId",1),i(54),m("showButton",!0),i(30),m("formFieldsCount",3),i(28),m("dots",!0),i(5),m("showText",!0),i(3),m("showText",!0),i(18),m("showIcon",!0),i(6),y(o.showLive?546:-1),i(4),y(o.showLive?550:-1),i(4),y(o.showLive?554:-1),i(17),y(o.showLive?571:-1),i(4),m("events",o.weekEvents)("resources",o.weekResources)("selectedResources",o.weekResources)("currentDate",o.calendarEvent.startDate),i(5),m("value",!0),i(2),m("disabled",!0)("value",!1),i(5),m("optionValue",1),i(2),m("optionValue",2),i(2),m("disabled",!0),i(10),m("differential",12),i(2),m("differential",0),i(2),m("differential",-7),i(5),m("percentComplete",72),i(6),y(o.showLive?616:-1),i(21),y(o.showLive?637:-1),i(4),m("field",o.viewOnlyFields[0])("entity",o.viewOnlyEntity)("edit",!0),i(2),m("field",o.viewOnlyFields[1])("entity",o.viewOnlyEntity),i(6),m("fGroup",o.fg)("canDownload",!1),i(8),T("visible",o.modals.fileViewer),m("viewUrl",null),i(5),m("imageUrl",o.sampleImage),i(8),y(o.modals.gifPicker?670:-1),i(16),y(o.modals.imageCropper?686:-1),i(22),m("isChecked",!0),i(8),m("isVisible",o.modals.messageEdit)("message",o.editableMessage)("canEdit",!0)("canDelete",!0)("canPin",!0)("canReport",!0)("reportReasons",o.reportReasons),i(38),m("mfaStatus",o.mfaStatus),i(6),y(o.showLive?760:-1),i(10),m("url",null)("showDeviceToggle",!0)("showRefresh",!0),i(23),m("clickable",!0),i(7),m("pillCount",0),i(2),m("pillCount",12),i(5),m("total",20)("totalUsed",17),i(3),m("total",20)("totalUsed",4),i(6),m("statusID",1),i(2),m("statusID",2),i(2),m("statusID",3),i(5),y(o.showLive?825:-1),i(4),m("isSender",!0),i(5),m("options",o.pollOptions)("totalVotes",13)("hasVoted",!0)("selectedOptionId",1)("leadingOptionId",1),i(5),y(o.showLive?839:-1),i(4),m("gameResult",o.gameResult),i(5),m("steps",o.navSteps)("activeStep",1)("activeSecondaryStep",1),i(12),m("menuItems",o.menuItems),i(6),m("sportID",1),i(2),m("sportID",2),i(2),m("sportID",3),i(5),m("rating",3)("fullWidth",!1),i(2),m("rating",4)("editable",!0)("fullWidth",!1),i(2),m("rating",2)("circleStars",!0)("fullWidth",!1),i(5),m("percent",88),i(2),m("percent",45),i(2),m("percent",12),i(7),m("clickable",!0),i(15),m("logo",o.sampleImage),i(2),m("logo",null),i(5),y(o.showLive?917:-1),i(6),m("showIcon",!1)("borderBottom",!1),i(11),m("isInline",!0)("useIcon",!1)("renderAsLink",!0),i(5),m("focuses",o.trainingFocuses)("maxVisible",3),i(6),m("steps",o.navSteps)("activeStep",2),i(11),m("id",1),i(2),m("id",2),i(2),m("id",3)("showCircle",!1),i(9),y(o.modals.yesNo?969:-1))},dependencies:[$,Xa,ar,nt,ir,J,xr,hr,ur,Ka,gr,sn,le,br,un,We,yr,fr,ot,Er,gn,vr,fn,cr,wn,wr,Ra,Cr,_r,kr,Tr,lt,bn,Ir,Mr,Dr,Sn,En,Cn,Fr,Pr,vn,yn,ja,Ar,Or,Nr,Br,Wr,Rr,Lr,qr,Vr,zr,Ur,ka,Hr,Gr,$r,Mn,Kr,Xr,Yr,Qr,Jr,Zr,it,eo,to,no,io,ao,lo,so,ro,oo,mo,co,po,xo,ho,Fo,Ao,Oo,ko,Po,Do,To,Io,Mo,No,ut,X,l0],styles:[".sg-swatch[_ngcontent-%COMP%]{display:inline-block;width:1.5rem;height:1.5rem;border:1px solid var(--border-color);border-radius:var(--border-radius);vertical-align:middle}.sg-swatch--sm[_ngcontent-%COMP%]{width:.75rem;height:.75rem;vertical-align:baseline}.sg-swatch--dot[_ngcontent-%COMP%]{width:1.25rem;height:1.25rem;border-radius:50%}.sg-swatch--lg[_ngcontent-%COMP%]{width:2.5rem;height:2.5rem}.sg-swatch--block[_ngcontent-%COMP%]{display:block;width:100%;min-width:3.5rem;height:2.25rem}.sg-swatch--tall[_ngcontent-%COMP%]{display:block;width:100%;height:150px;border:0;border-radius:0}.sg-slot-outline[_ngcontent-%COMP%]{outline:1px dashed var(--blue-400);outline-offset:-1px}.sg-doc-table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{vertical-align:top}.sg-cta-replica[_ngcontent-%COMP%]{background-color:var(--theme-color-cta-buttons);border-color:var(--theme-color-cta-buttons)!important;padding:3px 28px;font-size:var(--text-medium-large);color:var(--theme-color-cta-buttons-contrast);text-transform:uppercase;transition:all .3s}.sg-cta-replica[_ngcontent-%COMP%]:hover{border-color:var(--theme-color-cta-buttons-contrast);color:var(--theme-color-cta-buttons--hover);background-color:var(--color-white)}.sg-specimen[_ngcontent-%COMP%]{border:1px dashed var(--border-color);border-radius:var(--border-radius);margin-bottom:1rem;background:var(--color-white)}.sg-specimen-head[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.35rem .75rem;border-bottom:1px dashed var(--border-color);background:var(--color-grey-100, #f7f7f7)}.sg-specimen-body[_ngcontent-%COMP%]{padding:.75rem;overflow-x:auto}"]});let a=r;return a})();var H1=["*"];function j1(a,r){if(a&1&&(n(0,"p",5),e(1),t()),a&2){let l=u();i(),p(l.description)}}var F=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-demo-wrapper"]],inputs:{title:"title",description:"description"},ngContentSelectors:H1,decls:19,vars:2,consts:[[1,"demo-wrapper"],[1,"d-flex","justify-content-between","align-items-start","mb-2"],[1,"mb-1"],["class","text-muted small mb-0",4,"ngIf"],[1,"demo-content"],[1,"text-muted","small","mb-0"]],template:function(s,o){s&1&&(ke(),n(0,"section",0),e(1,`
9123  `),n(2,"div",1),e(3,`
9124    `),n(4,"div"),e(5,`
9125      `),n(6,"h5",2),e(7),t(),e(8,`
9126      `),k(9,j1,2,1,"p",3),e(10,`
9127    `),t(),e(11,`
9128  `),t(),e(12,`
9129  `),n(13,"div",4),e(14,`
9130    `),Te(15),e(16,`
9131  `),t(),e(17,`
9132`),t(),e(18,`
9133`)),s&2&&(i(7),p(o.title),i(2),m("ngIf",o.description))},dependencies:[D,Xe],encapsulation:2});let a=r;return a})();function G1(a,r){if(a&1&&e(0),a&2){let l=u().$implicit;p(l.header)}}function $1(a,r){if(a&1&&(n(0,"p-accordion-panel"),e(1,`
9134      `),k(2,G1,1,1,"ng-template",3),e(3,`
9135      `),n(4,"p",4),e(5),t(),e(6,`
9136    `),t()),a&2){let l=r.$implicit;i(5),p(l.content)}}var Jn=(()=>{let r=class r{constructor(){this.items=[{header:"Header 1",content:"Content for panel 1."},{header:"Header 2",content:"Content for panel 2."},{header:"Header 3",content:"Content for panel 3."}]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-accordion-demo"]],decls:8,vars:2,consts:[["title","Accordion"],[3,"multiple"],[4,"ngFor","ngForOf"],["pAccordionHeader",""],[1,"mb-0"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9137  `),n(2,"p-accordion",1),e(3,`
9138    `),k(4,$1,7,1,"p-accordion-panel",2),e(5,`
9139  `),t(),e(6,`
9140`),t(),e(7,`
9141`)),s&2&&(i(2),m("multiple",!0),i(2),m("ngForOf",o.items))},dependencies:[D,Me,In,mt,dt,F],encapsulation:2});let a=r;return a})();var Zn=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-badge-demo"]],decls:12,vars:0,consts:[["title","Badge"],[1,"d-flex","align-items-center","gap-3","flex-wrap"],["value","8","severity","danger"],["value","2","severity","warn"],["value","5","severity","info"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9142  `),n(2,"div",1),e(3,`
9143    `),c(4,"p-badge",2),e(5,`
9144    `),c(6,"p-badge",3),e(7,`
9145    `),c(8,"p-badge",4),e(9,`
9146  `),t(),e(10,`
9147`),t(),e(11,`
9148`))},dependencies:[D,Bt,Nt,F],encapsulation:2});let a=r;return a})();var Q1=()=>[],ei=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-button-demo"]],decls:14,vars:2,consts:[["title","Buttons","description","Various PrimeNG Button variants."],[1,"d-flex","gap-2","flex-wrap"],["pButton","","type","button","label","Primary"],["pButton","","type","button","label","Secondary",1,"p-button-secondary"],["pButton","","type","button","label","Icon","icon","pi pi-check"],["label","Options","icon","pi pi-cog",3,"model"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9149  `),n(2,"div",1),e(3,`
9150    `),c(4,"button",2),e(5,`
9151    `),c(6,"button",3),e(7,`
9152    `),c(8,"button",4),e(9,`
9153    `),c(10,"p-splitButton",5),e(11,`
9154  `),t(),e(12,`
9155`),t(),e(13,`
9156`)),s&2&&(i(10),m("model",V(1,Q1)))},dependencies:[D,Se,et,ht,zn,F],encapsulation:2});let a=r;return a})();var ti=(()=>{let r=class r{constructor(d,s){this.messageService=d,this.confirmationService=s}showSuccess(){this.messageService.add({severity:"success",summary:"Success",detail:"Operation successful"})}confirmAction(){this.confirmationService.confirm({message:"Are you sure?",accept:()=>{this.showSuccess()}})}};r.\u0275fac=function(s){return new(s||r)(A(ce),A(Qe))},r.\u0275cmp=b({type:r,selectors:[["app-p-toast-demo"]],features:[Ie([ce,Qe])],decls:14,vars:0,consts:[["title","Toast & ConfirmDialog","description","Demo showing toast messages and confirm dialog."],[1,"d-flex","gap-2"],["pButton","","type","button","label","Show Success",3,"click"],["pButton","","type","button","label","Confirm",3,"click"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9157  `),c(2,"p-toast"),e(3,`
9158  `),c(4,"p-confirmDialog"),e(5,`
9159  `),n(6,"div",1),e(7,`
9160    `),n(8,"button",2),g("click",function(){return o.showSuccess()}),t(),e(9,`
9161    `),n(10,"button",3),g("click",function(){return o.confirmAction()}),t(),e(11,`
9162  `),t(),e(12,`
9163`),t(),e(13,`
9164`))},dependencies:[D,Ae,Ze,On,bo,F],encapsulation:2});let a=r;return a})();function eh(a,r){a&1&&(e(0,`
9165      `),n(1,"tr"),e(2,`
9166        `),n(3,"th"),e(4,"ID"),t(),e(5,`
9167        `),n(6,"th"),e(7,"Name"),t(),e(8,`
9168        `),n(9,"th"),e(10,"Price"),t(),e(11,`
9169      `),t(),e(12,`
9170    `))}function th(a,r){if(a&1&&(e(0,`
9171      `),n(1,"tr"),e(2,`
9172        `),n(3,"td"),e(4),t(),e(5,`
9173        `),n(6,"td"),e(7),t(),e(8,`
9174        `),n(9,"td"),e(10),L(11,"currency"),t(),e(12,`
9175      `),t(),e(13,`
9176    `)),a&2){let l=r.$implicit;i(4),p(l.id),i(3),p(l.name),i(3),p(ze(11,3,l.price))}}var ni=(()=>{let r=class r{constructor(){this.products=[{id:1,name:"Apple",price:1.2},{id:2,name:"Orange",price:.95},{id:3,name:"Banana",price:.6}]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-table-demo"]],decls:10,vars:1,consts:[["title","Table","description","Simple p-table with sample data."],[3,"value"],["pTemplate","header"],["pTemplate","body"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9177  `),n(2,"p-table",1),e(3,`
9178    `),k(4,eh,13,0,"ng-template",2),e(5,`
9179    `),k(6,th,14,5,"ng-template",3),e(7,`
9180  `),t(),e(8,`
9181`),t(),e(9,`
9182`)),s&2&&(i(2),m("value",o.products))},dependencies:[D,on,nr,oe,F,ga],encapsulation:2});let a=r;return a})();var ii=(()=>
9182{let r=class r{constructor(){this.items=[{label:"Profile",icon:"pi pi-user"},{label:"Settings",icon:"pi pi-cog"},{separator:!0},{label:"Logout",icon:"pi pi-sign-out"}]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-menu-demo"]],decls:8,vars:2,consts:[["menu",""],["title","Menu","description","Popup menu triggered by a button."],[3,"model","popup"],["pButton","","type","button","label","Toggle Menu","icon","pi pi-bars",3,"click"]],template:function(s,o){if(s&1){let x=B();n(0,"app-p-demo-wrapper",1),e(1,`
9183  `),c(2,"p-menu",2,0),e(4,`
9184  `),n(5,"button",3),g("click",function(_){w(x);let se=ue(3);return C(se.toggle(_))}),t(),e(6,`
9185`),t(),e(7,`
9186`)}s&2&&(i(2),m("model",o.items)("popup",!0))},dependencies:[D,Wt,Ba,Se,et,F],encapsulation:2});let a=r;return a})();function ah(a,r){a&1&&(e(0,`
9187      `),n(1,"span",4),e(2,"MyApp"),t(),e(3,`
9188    `))}function rh(a,r){a&1&&(e(0,`
9189      `),c(1,"input",5),e(2,`
9190    `))}var ai=(()=>{let r=class r{constructor(){this.items=[{label:"Home",icon:"pi pi-home"},{label:"Products",icon:"pi pi-shopping-bag",items:[{label:"New",icon:"pi pi-plus"},{label:"Search",icon:"pi pi-search"}]},{label:"Services",icon:"pi pi-server",items:[{label:"Web",icon:"pi pi-globe"},{label:"Mobile",icon:"pi pi-mobile"}]},{label:"Contact",icon:"pi pi-envelope"}]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-menubar-demo"]],decls:10,vars:1,consts:[["title","MenuBar","description","Horizontal navigation menubar with nested items."],[3,"model"],["pTemplate","start"],["pTemplate","end"],[1,"font-bold","me-3"],["type","text","pInputText","","placeholder","Search\u2026"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9191  `),n(2,"p-menubar",1),e(3,`
9192    `),k(4,ah,4,0,"ng-template",2),e(5,`
9193    `),k(6,rh,3,0,"ng-template",3),e(7,`
9194  `),t(),e(8,`
9195`),t(),e(9,`
9196`)),s&2&&(i(2),m("model",o.items))},dependencies:[D,zt,La,oe,F],encapsulation:2});let a=r;return a})();var ri=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-message-demo"]],decls:14,vars:0,consts:[["title","Message","description","Inline message components for each severity."],[1,"flex","flex-column","gap-2"],["severity","info","text","Informational message."],["severity","success","text","Operation completed successfully."],["severity","warn","text","Warning: check your inputs."],["severity","error","text","An error has occurred."]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9197  `),n(2,"div",1),e(3,`
9198    `),c(4,"p-message",2),e(5,`
9199    `),c(6,"p-message",3),e(7,`
9200    `),c(8,"p-message",4),e(9,`
9201    `),c(10,"p-message",5),e(11,`
9202  `),t(),e(12,`
9203`),t(),e(13,`
9204`))},dependencies:[D,Jt,Ya,F],encapsulation:2});let a=r;return a})();var sh=()=>({"min-width":"18rem"}),dh=(a,r)=>l=>l.name,oi=(()=>{let r=class r{constructor(){this.cities=[{name:"New York",code:"NY"},{name:"Rome",code:"RM"},{name:"London",code:"LDN"},{name:"Istanbul",code:"IST"},{name:"Paris",code:"PRS"}],this.selectedCities=[]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-multiselect-demo"]],decls:12,vars:7,consts:[["title","MultiSelect","description","Multi-select dropdown with search."],[1,"flex","flex-column","gap-2"],["optionLabel","name","placeholder","Select cities","display","chip",3,"ngModelChange","options","ngModel"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9205  `),n(2,"div",1),e(3,`
9206    `),n(4,"p-multiSelect",2),M("ngModelChange",function(h){return I(o.selectedCities,h)||(o.selectedCities=h),h}),e(5,`
9207    `),t(),e(6,`
9208    `),n(7,"small"),e(8),t(),e(9,`
9209  `),t(),e(10,`
9210`),t(),e(11,`
9211`)),s&2&&(i(4),te(V(6,sh)),m("options",o.cities),T("ngModel",o.selectedCities),i(4),f("Selected: ",o.selectedCities.length?o.selectedCities.map(Tt(5,dh,o)).join(", "):"None"))},dependencies:[D,Q,U,H,Qt,Yt,F],encapsulation:2});let a=r;return a})();var ch=()=>[5,10,20],li=(()=>{let r=class r{constructor(){this.first=0,this.rows=10,this.totalRecords=120}onPageChange(d){this.first=d.first,this.rows=d.rows}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-paginator-demo"]],decls:9,vars:7,consts:[["title","Paginator","description","120-record paginator showing page controls."],[3,"onPageChange","rows","totalRecords","rowsPerPageOptions"],[1,"mt-2","d-block"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9212  `),n(2,"p-paginator",1),g("onPageChange",function(h){return o.onPageChange(h)}),e(3,`
9213  `),t(),e(4,`
9214  `),n(5,"small",2),e(6),t(),e(7,`
9215`),t(),e(8,`
9216`)),s&2&&(i(2),m("rows",o.rows)("totalRecords",o.totalRecords)("rowsPerPageOptions",V(6,ch)),i(4),Ve("Showing records ",o.first+1," \u2013 ",o.first+o.rows," of ",o.totalRecords))},dependencies:[D,nn,er,F],encapsulation:2});let a=r;return a})();var si=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-panel-demo"]],decls:18,vars:1,consts:[["title","Panel","description","Collapsible content panel."],[1,"flex","flex-column","gap-3"],["header","Default Panel"],["header","Toggleable Panel",3,"toggleable"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9217  `),n(2,"div",1),e(3,`
9218    `),n(4,"p-panel",2),e(5,`
9219      `),n(6,"p"),e(7,"This is the default panel content. Lorem ipsum dolor sit amet, consectetur adipiscing elit."),t(),e(8,`
9220    `),t(),e(9,`
9221    `),n(10,"p-panel",3),e(11,`
9222      `),n(12,"p"),e(13,"This panel can be collapsed or expanded by clicking the toggle icon."),t(),e(14,`
9223    `),t(),e(15,`
9224  `),t(),e(16,`
9225`),t(),e(17,`
9226`)),s&2&&(i(10),m("toggleable",!0))},dependencies:[D,qn,vo,F],encapsulation:2});let a=r;return a})();var hh=()=>({width:"18rem"}),di=(()=>
9226{let r=class r{constructor(){this.items=[{label:"File",icon:"pi pi-fw pi-file",items:[{label:"New",icon:"pi pi-fw pi-plus"},{label:"Open",icon:"pi pi-fw pi-folder-open"},{label:"Download",icon:"pi pi-fw pi-download"}]},{label:"Edit",icon:"pi pi-fw pi-pencil",items:[{label:"Cut",icon:"pi pi-fw pi-scissors"},{label:"Copy",icon:"pi pi-fw pi-copy"},{label:"Paste",icon:"pi pi-fw pi-file"}]},{label:"Help",icon:"pi pi-fw pi-question",items:[{label:"Contents",icon:"pi pi-fw pi-book"},{label:"Search",icon:"pi pi-fw pi-search"}]}]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-panelmenu-demo"]],decls:5,vars:4,consts:[["title","PanelMenu","description","Vertical accordion-style menu."],[3,"model"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9227  `),c(2,"p-panelMenu",1),e(3,`
9228`),t(),e(4,`
9229`)),s&2&&(i(2),te(V(3,hh)),m("model",o.items))},dependencies:[D,Ut,Va,F],encapsulation:2});let a=r;return a})();function gh(a,r){if(a&1){let l=B();e(0,`
9230    `),n(1,"div",4),e(2,`
9231      `),n(3,"h6"),e(4,"Popover Content"),t(),e(5,`
9232      `),n(6,"p"),e(7,"This is a popover. It can display any content here."),t(),e(8,`
9233      `),n(9,"button",5),g("click",function(){w(l),u();let s=ue(3);return C(s.hide())}),t(),e(10,`
9234    `),t(),e(11,`
9235  `)}}var mi=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-popover-demo"]],decls:12,vars:0,consts:[["op",""],["content",""],["title","Popover","description","Popover triggered by a button click."],["pButton","","type","button","label","Show Popover","icon","pi pi-info-circle",3,"click"],[1,"p-3"],["pButton","","type","button","label","Close","size","small",3,"click"]],template:function(s,o){if(s&1){let x=B();n(0,"app-p-demo-wrapper",2),e(1,`
9236  `),n(2,"p-popover",null,0),e(4,`
9237    `),k(5,gh,12,0,"ng-template",null,1,fe),e(7,`
9238  `),t(),e(8,`
9239  `),n(9,"button",3),g("click",function(_){w(x);let se=ue(3);return C(se.toggle(_))}),t(),e(10,`
9240`),t(),e(11,`
9241`)}},dependencies:[D,Fn,fo,Se,et,F],encapsulation:2});let a=r;return a})();var bh=()=>({height:"6px"}),Sh=()=>({width:"50px",height:"50px"}),ci=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-progress-demo"]],decls:30,vars:7,consts:[["title","Progress","description","ProgressBar with static value and ProgressSpinner."],[1,"flex","flex-column","gap-4"],[1,"d-block","mb-1"],[3,"value"],["mode","indeterminate"],[1,"flex","align-items-center","gap-3"],["strokeWidth","4"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9242  `),n(2,"div",1),e(3,`
9243    `),n(4,"div"),e(5,`
9244      `),n(6,"label",2),e(7,"ProgressBar (75%)"),t(),e(8,`
9245      `),c(9,"p-progressBar",3),e(10,`
9246    `),t(),e(11,`
9247    `),n(12,"div"),e(13,`
9248      `),n(14,"label",2),e(15,"ProgressBar (indeterminate)"),t(),e(16,`
9249      `),c(17,"p-progressBar",4),e(18,`
9250    `),t(),e(19,`
9251    `),n(20,"div",5),e(21,`
9252      `),c(22,"p-progressSpinner",6),e(23,`
9253      `),n(24,"span"),e(25,"ProgressSpinner"),t(),e(26,`
9254    `),t(),e(27,`
9255  `),t(),e(28,`
9256`),t(),e(29,`
9257`)),s&2&&(i(9),m("value",75),i(8),te(V(5,bh)),i(5),te(V(6,Sh)))},dependencies:[D,Zt,Qa,Vn,yo,F],encapsulation:2});let a=r;return a})();function vh(a,r){if(a&1){let l=B();n(0,"div",4),e(1,`
9258      `),n(2,"p-radioButton",5),M("ngModelChange",function(s){w(l);let o=u();return I(o.selectedCity,s)||(o.selectedCity=s),C(s)}),t(),e(3,`
9259      `),n(4,"label",6),e(5),t(),e(6,`
9260    `),t()}if(a&2){let l=r.$implicit,d=u();i(2),m("inputId","rb-"+l)("value",l),T("ngModel",d.selectedCity),i(2),m("for","rb-"+l),i(),p(l)}}var pi=(()=>{let r=class r{constructor(){this.selectedCity="Chicago",this.cities=["Chicago","Los Angeles","New York","San Francisco"]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-radiobutton-demo"]],decls:13,vars:2,consts:[["title","RadioButton","description","Radio button group bound to a string value."],[1,"flex","flex-column","gap-2"],["class","flex align-items-center gap-2",4,"ngFor","ngForOf"],[1,"mt-1"],[1,"flex","align-items-center","gap-2"],["name","city",3,"ngModelChange","inputId","value","ngModel"],[3,"for"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9261  `),n(2,"div",1),e(3,`
9262    `),k(4,vh,7,5,"div",2),e(5,`
9263    `),n(6,"small",3),e(7,"Selected: "),n(8,"strong"),e(9),t()(),e(10,`
9264  `),t(),e(11,`
9265`),t(),e(12,`
9266`)),s&2&&(i(4),m("ngForOf",o.cities),i(5),p(o.selectedCity))},dependencies:[D,Me,Q,U,H,an,tt,F],encapsulation:2});let a=r;return a})();var xi=(()=>
9266{let r=class r{constructor(){this.val1=3,this.val2=4}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-rating-demo"]],decls:25,vars:4,consts:[["title","Rating","description","Interactive and read-only rating stars."],[1,"flex","flex-column","gap-3"],[1,"d-block","mb-1"],[3,"ngModelChange","ngModel"],[3,"ngModelChange","ngModel","readonly"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9267  `),n(2,"div",1),e(3,`
9268    `),n(4,"div"),e(5,`
9269      `),n(6,"label",2),e(7,"Interactive (out of 5)"),t(),e(8,`
9270      `),n(9,"p-rating",3),M("ngModelChange",function(h){return I(o.val1,h)||(o.val1=h),h}),t(),e(10,`
9271      `),n(11,"small"),e(12),t(),e(13,`
9272    `),t(),e(14,`
9273    `),n(15,"div"),e(16,`
9274      `),n(17,"label",2),e(18,"Read-only"),t(),e(19,`
9275      `),n(20,"p-rating",4),M("ngModelChange",function(h){return I(o.val2,h)||(o.val2=h),h}),t(),e(21,`
9276    `),t(),e(22,`
9277  `),t(),e(23,`
9278`),t(),e(24,`
9279`)),s&2&&(i(9),T("ngModel",o.val1),i(3),f("Value: ",o.val1),i(8),T("ngModel",o.val2),m("readonly",!0))},dependencies:[D,Q,U,H,pn,sr,F],encapsulation:2});let a=r;return a})();var Ch=()=>({width:"200px",height:"200px"});function _h(a,r){if(a&1&&(e(0,`
9280      `),n(1,"div",3),e(2),t(),e(3,`
9281    `)),a&2){let l=r.$implicit,d=r.options;i(),j("surface-ground",d.odd),i(),p(l)}}var hi=(()=>{let r=class r{constructor(){this.items=Array.from({length:100},(d,s)=>`Item ${s+1}`)}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-scroller-demo"]],decls:8,vars:5,consts:[["title","Scroller","description","Virtual scroller over 100 items, each 50px tall."],[3,"items","itemSize"],["pTemplate","item"],[1,"flex","align-items-center","p-2"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9282  `),n(2,"p-scroller",1),e(3,`
9283    `),k(4,_h,4,3,"ng-template",2),e(5,`
9284  `),t(),e(6,`
9285`),t(),e(7,`
9286`)),s&2&&(i(2),te(V(4,Ch)),m("items",o.items)("itemSize",50))},dependencies:[D,qt,Wa,oe,F],encapsulation:2});let a=r;return a})();function Th(a,r){if(a&1&&(n(0,"small"),e(1,"Selected: "),n(2,"strong"),e(3),t()()),a&2){let l=u();i(3),p(l.selectedCountry)}}var ui=(()=>{let r=class r{constructor(){this.suggestions=[],this.countries=["Australia","Austria","Belgium","Brazil","Canada","Denmark","Finland","France","Germany","India","Italy","Japan","Netherlands","Norway","Spain","Sweden","United Kingdom","United States"]}search(d){let s=d.query.toLowerCase();this.suggestions=this.countries.filter(o=>o.toLowerCase().startsWith(s))}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-autocomplete-demo"]],decls:13,vars:3,consts:[["title","AutoComplete","description","Type to search from a static list of countries."],[1,"flex","flex-column","gap-2"],["for","ac"],["inputId","ac","placeholder","Search countries\u2026",3,"ngModelChange","completeMethod","ngModel","suggestions"],[4,"ngIf"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9287  `),n(2,"div",1),e(3,`
9288    `),n(4,"label",2),e(5,"Country"),t(),e(6,`
9289    `),n(7,"p-autoComplete",3),M("ngModelChange",function(h){return I(o.selectedCountry,h)||(o.selectedCountry=h),h}),g("completeMethod",function(h){return o.search(h)}),t(),e(8,`
9290    `),k(9,Th,4,1,"small",4),e(10,`
9291  `),t(),e(11,`
9292`),t(),e(12,`
9293`)),s&2&&(i(7),T("ngModel",o.selectedCountry),m("suggestions",o.suggestions),i(2),m("ngIf",o.selectedCountry))},dependencies:[D,Xe,Q,U,H,xn,dr,F],encapsulation:2});let a=r;return a})();var gi=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-card-demo"]],decls:9,vars:0,consts:[["title","Card"],["header","Title","subheader","Subtitle"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9294  `),n(2,"p-card",1),e(3,`
9295    `),n(4,"p"),e(5,"Card body placeholder."),t(),e(6,`
9296  `),t(),e(7,`
9297`),t(),e(8,`
9298`))},dependencies:[D,Hn,qo,F],encapsulation:2});let a=r;return a})();function Dh(a,r){if(a&1&&(e(0,`
9299      `),n(1,"div",3),e(2,`
9300        `),n(3,"p",4),e(4),t(),e(5,`
9301        `),n(6,"p",5),e(7),t(),e(8,`
9302        `),n(9,"p",6),e(10),t(),e(11,`
9303      `),t(),e(12,`
9304    `)),a&2){let l=r.$implicit;i(4),p(l.name),i(3),p(l.category),i(3),f("$",l.price)}}var fi=(()=>
9304{let r=class r{constructor(){this.products=[{name:"Bamboo Watch",price:65,image:"bamboo-watch.jpg",category:"Accessories",rating:5},{name:"Black Watch",price:72,image:"black-watch.jpg",category:"Accessories",rating:4},{name:"Blue Band",price:79,image:"blue-band.jpg",category:"Fitness",rating:3},{name:"Blue T-Shirt",price:29,image:"blue-t-shirt.jpg",category:"Clothing",rating:5},{name:"Bracelet",price:15,image:"bracelet.jpg",category:"Accessories",rating:4}],this.responsiveOptions=[{breakpoint:"1199px",numVisible:3,numScroll:1},{breakpoint:"991px",numVisible:2,numScroll:1},{breakpoint:"767px",numVisible:1,numScroll:1}]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-carousel-demo"]],decls:8,vars:5,consts:[["title","Carousel","description","Responsive product carousel with 3 visible items."],[3,"value","numVisible","numScroll","circular","responsiveOptions"],["pTemplate","item"],[1,"border-1","surface-border","border-round","m-2","p-3","text-center"],[1,"font-bold","mb-1"],[1,"text-secondary"],[1,"text-lg","font-semibold"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9305  `),n(2,"p-carousel",1),e(3,`
9306    `),k(4,Dh,13,3,"ng-template",2),e(5,`
9307  `),t(),e(6,`
9308`),t(),e(7,`
9309`)),s&2&&(i(2),m("value",o.products)("numVisible",3)("numScroll",1)("circular",!0)("responsiveOptions",o.responsiveOptions))},dependencies:[D,An,Pn,oe,F],encapsulation:2});let a=r;return a})();var bi=(()=>{let r=class r{constructor(){this.barData={labels:["January","February","March","April","May","June","July"],datasets:[{label:"Dataset 1",data:[65,59,80,81,56,55,40],backgroundColor:"rgba(255,159,64,0.2)",borderColor:"rgb(255,159,64)",borderWidth:1},{label:"Dataset 2",data:[28,48,40,19,86,27,90],backgroundColor:"rgba(75,192,192,0.2)",borderColor:"rgb(75,192,192)",borderWidth:1}]},this.barOptions={responsive:!0},this.pieData={labels:["Red","Blue","Yellow"],datasets:[{data:[300,50,100],backgroundColor:["#FF6384","#36A2EB","#FFCE56"]}]},this.pieOptions={responsive:!0}}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-chart-demo"]],decls:22,vars:4,consts:[["title","Chart","description","Bar chart and Pie chart rendered via Chart.js."],[1,"row"],[1,"col-md-7"],["type","bar","height","250",3,"data","options"],[1,"col-md-5"],["type","pie","height","250",3,"data","options"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9310  `),n(2,"div",1),e(3,`
9311    `),n(4,"div",2),e(5,`
9312      `),n(6,"h6"),e(7,"Bar Chart"),t(),e(8,`
9313      `),c(9,"p-chart",3),e(10,`
9314    `),t(),e(11,`
9315    `),n(12,"div",4),e(13,`
9316      `),n(14,"h6"),e(15,"Pie Chart"),t(),e(16,`
9317      `),c(17,"p-chart",5),e(18,`
9318    `),t(),e(19,`
9319  `),t(),e(20,`
9320`),t(),e(21,`
9321`)),s&2&&(i(9),m("data",o.barData)("options",o.barOptions),i(8),m("data",o.pieData)("options",o.pieOptions))},dependencies:[D,Un,Lo,F],encapsulation:2});let a=r;return a})();var Si=(()=>{let r=class r{constructor(){this.checked1=!0,this.checked2=!1,this.checked3=!1,this.cities=[]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-checkbox-demo"]],decls:63,vars:11,consts:[["title","Checkbox","description","Boolean and multi-select checkbox demos."],[1,"flex","flex-column","gap-3"],[1,"flex","align-items-center","gap-2"],["inputId","cb1",3,"ngModelChange","ngModel","binary"],["for","cb1"],["inputId","cb2",3,"ngModelChange","ngModel","binary"],["for","cb2"],["inputId","cb3",3,"ngModelChange","ngModel","binary","disabled"],["for","cb3"],[1,"flex","gap-3"],["value","New York","inputId","ny",3,"ngModelChange","ngModel"],["for","ny"],["value","San Francisco","inputId","sf",3,"ngModelChange","ngModel"],["for","sf"],["value","Los Angeles","inputId","la",3,"ngModelChange","ngModel"],["for","la"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9322  `),n(2,"div",1),e(3,`
9323    `),n(4,"div",2),e(5,`
9324      `),n(6,"p-checkbox",3),M("ngModelChange",function(h){return I(o.checked1,h)||(o.checked1=h),h}),t(),e(7,`
9325      `),n(8,"label",4),e(9,"Checked by default"),t(),e(10,`
9326    `),t(),e(11,`
9327    `),n(12,"div",2),e(13,`
9328      `),n(14,"p-checkbox",5),M("ngModelChange",function(h){return I(o.checked2,h)||(o.checked2=h),h}),t(),e(15,`
9329      `),n(16,"label",6),e(17,"Unchecked by default"),t(),e(18,`
9330    `),t(),e(19,`
9331    `),n(20,"div",2),e(21,`
9332      `),n(22,"p-checkbox",7),M("ngModelChange",function(h){return I(o.checked3,h)||(o.checked3=h),h}),t(),e(23,`
9333      `),n(24,"label",8),e(25,"Disabled"),t(),e(26,`
9334    `),t(),e(27,`
9335    `),n(28,"p"),e(29,"Multi-select group:"),t(),e(30,`
9336    `),n(31,"div",9),e(32,`
9337      `),n(33,"div",2),e(34,`
9338        `),n(35,"p-checkbox",10),M("ngModelChange",function(h){return I(o.cities,h)||(o.cities=h),h}),t(),e(36,`
9339        `),n(37,"label",11),e(38,"New York"),t(),e(39,`
9340      `),t(),e(40,`
9341      `),n(41,"div",2),e(42,`
9342        `),n(43,"p-checkbox",12),M("ngModelChange",function(h){return I(o.cities,h)||(o.cities=h),h}),t(),e(44,`
9343        `),n(45,"label",13),e(46,"San Francisco"),t(),e(47,`
9344      `),t(),e(48,`
9345      `),n(49,"div",2),e(50,`
9346        `),n(51,"p-checkbox",14),M("ngModelChange",function(h){return I(o.cities,h)||(o.cities=h),h}),t(),e(52,`
9347        `),n(53,"label",15),e(54,"Los Angeles"),t(),e(55,`
9348      `),t(),e(56,`
9349    `),t(),e(57,`
9350    `),n(58,"small"),e(59),t(),e(60,`
9351  `),t(),e(61,`
9352`),t(),e(62,`
9353`)),s&2&&(i(6),T("ngModel",o.checked1),m("binary",!0),i(8),T("ngModel",o.checked2),m("binary",!0),i(8),T("ngModel",o.checked3),m("binary",!0)("disabled",!0),i(13),T("ngModel",o.cities),i(8),T("ngModel",o.cities),i(8),T("ngModel",o.cities),i(8),f("Selected: ",o.cities.join(", ")||"None"))},dependencies:[D,Q,U,H,$t,Oe,F],encapsulation:2});let a=r;return a})();var Ei=(()=>{let r=class r{constructor(){this.color1="#1976d2",this.color2={r:255,g:100,b:50}}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-colorpicker-demo"]],decls:25,vars:4,consts:[["title","ColorPicker","description","Inline and popup color pickers."],[1,"flex","gap-4","align-items-start","flex-wrap"],[1,"flex","flex-column","align-items-center","gap-2"],[3,"ngModelChange","ngModel"],["format","rgb",3,"ngModelChange","ngModel","inline"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9354  `),n(2,"div",1),e(3,`
9355    `),n(4,"div",2),e(5,`
9356      `),n(6,"label"),e(7,"Hex (popup)"),t(),e(8,`
9357      `),n(9,"p-colorPicker",3),M("ngModelChange",function(h){return I(o.color1,h)||(o.color1=h),h}),t(),e(10,`
9358      `),n(11,"small"),e(12),t(),e(13,`
9359    `),t(),e(14,`
9360    `),n(15,"div",2),e(16,`
9361      `),n(17,"label"),e(18,"RGB (inline)"),t(),e(19,`
9362      `),n(20,"p-colorPicker",4),M("ngModelChange",function(h){return I(o.color2,h)||(o.color2=h),h}),t(),e(21,`
9363    `),t(),e(22,`
9364  `),t(),e(23,`
9365`),t(),e(24,`
9366`)),s&2&&(i(9),T("ngModel",o.color1),i(3),p(o.color1),i(8),T("ngModel",o.color2),m("inline",!0))},dependencies:[D,Q,U,H,Gt,jt,F],encapsulation:2});let a=r;return a})();var c0=`
9367    .p-tag {
9368        display: inline-flex;
9369        align-items: center;
9370        justify-content: center;
9371        background: dt('tag.primary.background');
9372        color: dt('tag.primary.color');
9373        font-size: dt('tag.font.size');
9374        font-weight: dt('tag.font.weight');
9375        padding: dt('tag.padding');
9376        border-radius: dt('tag.border.radius');
9377        gap: dt('tag.gap');
9378    }
9379
9380    .p-tag-icon {
9381        font-size: dt('tag.icon.size');
9382        width: dt('tag.icon.size');
9383        height: dt('tag.icon.size');
9384    }
9385
9386    .p-tag-rounded {
9387        border-radius: dt('tag.rounded.border.radius');
9388    }
9389
9390    .p-tag-success {
9391        background: dt('tag.success.background');
9392        color: dt('tag.success.color');
9393    }
9394
9395    .p-tag-info {
9396        background: dt('tag.info.background');
9397        color: dt('tag.info.color');
9398    }
9399
9400    .p-tag-warn {
9401        background: dt('tag.warn.background');
9402        color: dt('tag.warn.color');
9403    }
9404
9405    .p-tag-danger {
9406        background: dt('tag.danger.background');
9407        color: dt('tag.danger.color');
9408    }
9409
9410    .p-tag-secondary {
9411        background: dt('tag.secondary.background');
9412        color: dt('tag.secondary.color');
9413    }
9414
9415    .p-tag-contrast {
9416        background: dt('tag.contrast.background');
9417        color: dt('tag.contrast.color');
9418    }
9419`;var Nh=["icon"],Bh=["*"];function Wh(a,r){if(a&1&&c(0,"span",4),a&2){let l=u(2);ne(l.cx("icon")),m("ngClass",l.icon)("pBind",l.ptm("icon"))}}function Rh(a,r){if(a&1&&(O(0),k(1,Wh,1,4,"span",3),N()),a&2){let l=u();i(),m("ngIf",l.icon)}}function Lh(a,r){}function qh(a,r){a&1&&k(0,Lh,0,0,"ng-template")}function Vh(a,r){if(a&1&&(n(0,"span",2),k(1,qh,1,0,null,5),t()),a&2){let l=u();ne(l.cx("icon")),m("pBind",l.ptm("icon")),i(),m("ngTemplateOutlet",l.iconTemplate||l._iconTemplate)}}var zh={root:({instance:a})=>["p-tag p-component",{"p-tag-info":a.severity==="info","p-tag-success":a.severity==="success","p-tag-warn":a.severity==="warn","p-tag-danger":a.severity==="danger","p-tag-secondary":a.severity==="secondary","p-tag-contrast":a.severity==="contrast","p-tag-rounded":a.rounded}],icon:"p-tag-icon",label:"p-tag-label"},p0=(()=>{class a extends Da{name="tag";style=c0;classes=zh;static \u0275fac=(()=>{let l;return function(s){return(l||(l=Ni(a)))(s||a)}})();static \u0275prov=ia({token:a,factory:a.\u0275fac})}return a})();var x0=new aa("TAG_INSTANCE"),Zi=(()=>{class a extends Aa{componentName="Tag";
9419$pcTag=_t(x0,{optional:!0,skipSelf:!0})??void 0;bindDirectiveInstance=_t(St,{self:!0});onAfterViewChecked(){this.bindDirectiveInstance.setAttrs(this.ptms(["host","root"]))}styleClass;severity;value;icon;rounded;iconTemplate;templates;_iconTemplate;_componentStyle=_t(p0);onAfterContentInit(){this.templates?.forEach(l=>{l.getType()==="icon"&&(this._iconTemplate=l.template)})}get dataP(){return this.cn({rounded:this.rounded,[this.severity]:this.severity})}static \u0275fac=(()=>{let l;return function(s){return(l||(l=Ni(a)))(s||a)}})();static \u0275cmp=b({type:a,selectors:[["p-tag"]],contentQueries:function(d,s,o){if(d&1&&ma(o,Nh,4)(o,oe,4),d&2){let x;xe(x=he())&&(s.iconTemplate=x.first),xe(x=he())&&(s.templates=x)}},hostVars:3,hostBindings:function(d,s){d&2&&(pe("data-p",s.dataP),ne(s.cn(s.cx("root"),s.styleClass)))},inputs:{styleClass:"styleClass",severity:"severity",value:"value",icon:"icon",rounded:[2,"rounded","rounded",pa]},features:[Ie([p0,{provide:x0,useExisting:a},{provide:Pa,useExisting:a}]),la([St]),sa],ngContentSelectors:Bh,decls:5,vars:6,consts:[[4,"ngIf"],[3,"class","pBind",4,"ngIf"],[3,"pBind"],[3,"class","ngClass","pBind",4,"ngIf"],[3,"ngClass","pBind"],[4,"ngTemplateOutlet"]],template:function(d,s){d&1&&(ke(),Te(0),k(1,Rh,2,1,"ng-container",0)(2,Vh,2,4,"span",1),n(3,"span",2),e(4),t()),d&2&&(i(),m("ngIf",!s.iconTemplate&&!s._iconTemplate),i(),m("ngIf",s.iconTemplate||s._iconTemplate),i(),ne(s.cx("label")),m("pBind",s.ptm("label")),i(),p(s.value))},dependencies:[D,It,Xe,De,Ft,St],encapsulation:2,changeDetection:0})}return a})(),h0=(()=>{class a{static \u0275fac=function(d){return new(d||a)};static \u0275mod=Ge({type:a});static \u0275inj=je({imports:[Zi,Ft,Ft]})}return a})();function Hh(a,r){if(a&1&&(n(0,"div",5),e(1,`
9420          `),n(2,"div"),e(3,`
9421            `),n(4,"p",6),e(5),t(),e(6,`
9422            `),n(7,"small",7),e(8),t(),e(9,`
9423          `),t(),e(10,`
9424          `),n(11,"div",8),e(12,`
9425            `),n(13,"span",9),e(14),t(),e(15,`
9426            `),c(16,"p-tag",10),e(17,`
9427          `),t(),e(18,`
9428        `),t()),a&2){let l=r.$implicit,d=u(2);i(5),p(l.name),i(3),p(l.category),i(6),f("$",l.price),i(2),m("value",l.inventoryStatus)("severity",d.getSeverity(l.inventoryStatus))}}function jh(a,r){if(a&1&&(e(0,`
9429      `),n(1,"div",3),e(2,`
9430        `),k(3,Hh,19,5,"div",4),e(4,`
9431      `),t(),e(5,`
9432    `)),a&2){let l=r.$implicit;i(3),m("ngForOf",l)}}var vi=(()=>{let r=class r{constructor(){this.products=[{name:"Bamboo Watch",price:65,category:"Accessories",inventoryStatus:"INSTOCK",rating:5},{name:"Black Watch",price:72,category:"Accessories",inventoryStatus:"LOWSTOCK",rating:4},{name:"Blue Band",price:79,category:"Fitness",inventoryStatus:"OUTOFSTOCK",rating:3},{name:"Blue T-Shirt",price:29,category:"Clothing",inventoryStatus:"INSTOCK",rating:5},{name:"Bracelet",price:15,category:"Accessories",inventoryStatus:"INSTOCK",rating:4},{name:"Brown Purse",price:120,category:"Accessories",inventoryStatus:"INSTOCK",rating:4}]}getSeverity(d){switch(d){case"INSTOCK":return"success";case"LOWSTOCK":return"warn";default:return"danger"}}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-dataview-demo"]],decls:8,vars:1,consts:[["title","DataView","description","Filterable product list using p-dataView."],[3,"value"],["pTemplate","list"],[1,"flex","flex-column","gap-2"],["class","flex justify-content-between align-items-center border-bottom-1 surface-border py-2",4,"ngFor","ngForOf"],[1,"flex","justify-content-between","align-items-center","border-bottom-1","surface-border","py-2"],[1,"font-bold","mb-0"],[1,"text-secondary"],[1,"flex","align-items-center","gap-3"],[1,"font-semibold"],[3,"value","severity"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9433  `),n(2,"p-dataView",1),e(3,`
9434    `),k(4,jh,6,1,"ng-template",2),e(5,`
9435  `),t(),e(6,`
9436`),t(),e(7,`
9437`)),s&2&&(i(2),m("value",o.products))},dependencies:[D,Me,Ln,Eo,oe,Se,h0,Zi,F],encapsulation:2});let a=r;return a})();var yi=(()=>{let r=class r{constructor(){this.date1=null,this.date2=new Date,this.rangeDate=null}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-datepicker-demo"]],decls:30,vars:4,consts:[["title","DatePicker","description","Basic, pre-filled, and date-range pickers."],[1,"flex","flex-column","gap-4"],[1,"d-block","mb-1"],["placeholder","Select a date",3,"ngModelChange","ngModel"],[3,"ngModelChange","ngModel"],["selectionMode","range","placeholder","Select date range",3,"ngModelChange","ngModel","readonlyInput"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9438  `),n(2,"div",1),e(3,`
9439    `),n(4,"div"),e(5,`
9440      `),n(6,"label",2),e(7,"Basic"),t(),e(8,`
9441      `),n(9,"p-datepicker",3),M("ngModelChange",function(h){return I(o.date1,h)||(o.date1=h),h}),t(),e(10,`
9442    `),t(),e(11,`
9443    `),n(12,"div"),e(13,`
9444      `),n(14,"label",2),e(15,"Pre-filled with Today"),t(),e(16,`
9445      `),n(17,"p-datepicker",4),M("ngModelChange",function(h){return I(o.date2,h)||(o.date2=h),h}),t(),e(18,`
9446    `),t(),e(19,`
9447    `),n(20,"div"),e(21,`
9448      `),n(22,"label",2),e(23,"Date Range"),t(),e(24,`
9449      `),n(25,"p-datepicker",5),M("ngModelChange",function(h){return I(o.rangeDate,h)||(o.rangeDate=h),h}),t(),e(26,`
9450    `),t(),e(27,`
9451  `),t(),e(28,`
9452`),t(),e(29,`
9453`)),s&2&&(i(9),T("ngModel",o.date1),i(8),T("ngModel",o.date2),i(8),T("ngModel",o.rangeDate),m("readonlyInput",!0))},dependencies:[D,Q,U,H,Xt,Kt,F],encapsulation:2});let a=r;return a})();var wi=(()=>
9453{let r=class r{constructor(){this.visible=!1}open(){this.visible=!0}close(){this.visible=!1}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-dialog-demo"]],decls:4,vars:0,consts:[["title","Dialog","description","Basic dialog opened via a button."]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9454`),e(2,`
9455`),t(),e(3,` 
9456`))},dependencies:[D,Ht,Se,F],encapsulation:2});let a=r;return a})();function Xh(a,r){a&1&&(e(0,`
9457          `),n(1,"p"),e(2,"Drag and drop files here to upload."),t(),e(3,`
9458        `))}var Ci=(()=>{let r=class r{constructor(d){this.messageService=d}onUpload(d){this.messageService.add({severity:"info",summary:"File Uploaded",detail:d.files[0]?.name})}};r.\u0275fac=function(s){return new(s||r)(A(ce))},r.\u0275cmp=b({type:r,selectors:[["app-p-fileupload-demo"]],features:[Ie([ce])],decls:27,vars:4,consts:[["title","FileUpload","description","Single and multiple file upload components."],[1,"flex","flex-column","gap-4"],[1,"d-block","mb-2"],["mode","basic","name","demo[]","chooseLabel","Browse",3,"auto"],["name","demo[]","accept","image/*",3,"onUpload","uploadHandler","multiple","maxFileSize","customUpload"],["pTemplate","empty"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9459  `),c(2,"p-toast"),e(3,`
9460  `),n(4,"div",1),e(5,`
9461    `),n(6,"div"),e(7,`
9462      `),n(8,"label",2),e(9,"Basic"),t(),e(10,`
9463      `),c(11,"p-fileUpload",3),e(12,`
9464    `),t(),e(13,`
9465    `),n(14,"div"),e(15,`
9466      `),n(16,"label",2),e(17,"Advanced (multiple)"),t(),e(18,`
9467      `),n(19,"p-fileUpload",4),g("onUpload",function(h){return o.onUpload(h)})("uploadHandler",function(h){return o.onUpload(h)}),e(20,`
9468        `),k(21,Xh,4,0,"ng-template",5),e(22,`
9469      `),t(),e(23,`
9470    `),t(),e(24,`
9471  `),t(),e(25,`
9472`),t(),e(26,`
9473`)),s&2&&(i(11),m("auto",!1),i(8),m("multiple",!0)("maxFileSize",1e6)("customUpload",!0))},dependencies:[D,en,Ja,oe,Ae,Ze,F],encapsulation:2});let a=r;return a})();var _i=(()=>{let r=class r{constructor(){this.textValue="",this.numberValue=null,this.price=49.99,this.textareaValue=""}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-inputs-demo"]],decls:52,vars:5,consts:[["title","Inputs","description","InputText, InputNumber with currency, InputGroup with addon, and Textarea."],[1,"flex","flex-column","gap-4"],["for","it1",1,"d-block","mb-1"],["id","it1","type","text","pInputText","","placeholder","Type something\u2026",1,"w-full",3,"ngModelChange","ngModel"],["for","in1",1,"d-block","mb-1"],["id","in1","placeholder","Enter a number",3,"ngModelChange","ngModel","showButtons"],["for","in2",1,"d-block","mb-1"],["id","in2","mode","currency","currency","USD","locale","en-US",3,"ngModelChange","ngModel"],[1,"d-block","mb-1"],[1,"pi","pi-user"],["type","text","pInputText","","placeholder","Username"],["for","ta1",1,"d-block","mb-1"],["id","ta1","pTextarea","","rows","4","cols","30","placeholder","Enter a description\u2026",1,"w-full",3,"ngModelChange","ngModel"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9474  `),n(2,"div",1),e(3,`
9475    `),n(4,"div"),e(5,`
9476      `),n(6,"label",2),e(7,"InputText"),t(),e(8,`
9477      `),n(9,"input",3),M("ngModelChange",function(h){return I(o.textValue,h)||(o.textValue=h),h}),t(),e(10,`
9478    `),t(),e(11,`
9479    `),n(12,"div"),e(13,`
9480      `),n(14,"label",4),e(15,"InputNumber (integer)"),t(),e(16,`
9481      `),n(17,"p-inputNumber",5),M("ngModelChange",function(h){return I(o.numberValue,h)||(o.numberValue=h),h}),t(),e(18,`
9482    `),t(),e(19,`
9483    `),n(20,"div"),e(21,`
9484      `),n(22,"label",6),e(23,"InputNumber (currency)"),t(),e(24,`
9485      `),n(25,"p-inputNumber",7),M("ngModelChange",function(h){return I(o.price,h)||(o.price=h),h}),t(),e(26,`
9486    `),t(),e(27,`
9487    `),n(28,"div"),e(29,`
9488      `),n(30,"label",8),e(31,"InputGroup with addon"),t(),e(32,`
9489      `),n(33,"p-inputGroup"),e(34,`
9490        `),n(35,"p-inputGroupAddon"),c(36,"i",9),t(),e(37,`
9491        `),c(38,"input",10),e(39,`
9492      `),t(),e(40,`
9493    `),t(),e(41,`
9494    `),n(42,"div"),e(43,`
9495      `),n(44,"label",11),e(45,"Textarea"),t(),e(46,`
9496      `),n(47,"textarea",12),M("ngModelChange",function(h){return I(o.textareaValue,h)||(o.textareaValue=h),h}),t(),e(48,`
9497    `),t(),e(49,`
9498  `),t(),e(50,`
9499`),t(),e(51,`
9500`)),s&2&&(i(9),T("ngModel",o.textValue),i(8),T("ngModel",o.numberValue),m("showButtons",!0),i(8),T("ngModel",o.price),i(22),T("ngModel",o.textareaValue))},dependencies:[D,Q,be,U,H,Lt,Rt,tn,Za,dn,at,mn,rt,_n,jr,F],encapsulation:2});let a=r;return a})();var u0=()=>({width:"15rem"}),Jh=(a,r)=>
9500l=>l.name,ki=(()=>{let r=class r{constructor(){this.cities=[{name:"New York",code:"NY"},{name:"Rome",code:"RM"},{name:"London",code:"LDN"},{name:"Istanbul",code:"IST"},{name:"Paris",code:"PRS"}],this.selectedCity=null,this.selectedCities=[]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-listbox-demo"]],decls:30,vars:15,consts:[["title","ListBox","description","Single-select and multi-select listboxes."],[1,"row"],[1,"col-md-6"],[1,"mb-1"],["optionLabel","name",3,"ngModelChange","options","ngModel"],[1,"mt-1","d-block"],["optionLabel","name",3,"ngModelChange","options","ngModel","multiple","checkbox"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9501  `),n(2,"div",1),e(3,`
9502    `),n(4,"div",2),e(5,`
9503      `),n(6,"p",3),e(7,"Single select"),t(),e(8,`
9504      `),n(9,"p-listbox",4),M("ngModelChange",function(h){return I(o.selectedCity,h)||(o.selectedCity=h),h}),e(10,`
9505      `),t(),e(11,`
9506      `),n(12,"small",5),e(13),t(),e(14,`
9507    `),t(),e(15,`
9508    `),n(16,"div",2),e(17,`
9509      `),n(18,"p",3),e(19,"Multiple select"),t(),e(20,`
9510      `),n(21,"p-listbox",6),M("ngModelChange",function(h){return I(o.selectedCities,h)||(o.selectedCities=h),h}),e(22,`
9511      `),t(),e(23,`
9512      `),n(24,"small",5),e(25),t(),e(26,`
9513    `),t(),e(27,`
9514  `),t(),e(28,`
9515`),t(),e(29,`
9516`)),s&2&&(i(9),te(V(13,u0)),m("options",o.cities),T("ngModel",o.selectedCity),i(4),f("Selected: ",(o.selectedCity==null?null:o.selectedCity.name)||"None"),i(8),te(V(14,u0)),m("options",o.cities),T("ngModel",o.selectedCities),m("multiple",!0)("checkbox",!0),i(4),f("Selected: ",o.selectedCities.length?o.selectedCities.map(Tt(12,Jh,o)).join(", "):"None"))},dependencies:[D,Q,U,H,Dn,go,F],encapsulation:2});let a=r;return a})();var eu=()=>({"min-width":"14rem"}),Ti=(()=>{let r=class r{constructor(){this.cities=[{name:"New York",code:"NY"},{name:"Rome",code:"RM"},{name:"London",code:"LDN"},{name:"Istanbul",code:"IST"},{name:"Paris",code:"PRS"}],this.selectedCity=null}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-select-demo"]],decls:12,vars:6,consts:[["title","Select","description","Dropdown select with city options."],[1,"flex","flex-column","gap-2"],["optionLabel","name","placeholder","Select a City",3,"ngModelChange","options","ngModel"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9517  `),n(2,"div",1),e(3,`
9518    `),n(4,"p-select",2),M("ngModelChange",function(h){return I(o.selectedCity,h)||(o.selectedCity=h),h}),e(5,`
9519    `),t(),e(6,`
9520    `),n(7,"small"),e(8),t(),e(9,`
9521  `),t(),e(10,`
9522`),t(),e(11,`
9523`)),s&2&&(i(4),te(V(5,eu)),m("options",o.cities),T("ngModel",o.selectedCity),i(4),f("Selected: ",(o.selectedCity==null?null:o.selectedCity.name)||"None"))},dependencies:[D,Q,U,H,Vt,ye,F],encapsulation:2});let a=r;return a})();function nu(a,r){if(a&1&&(e(0,`
9524          `),c(1,"i"),e(2,`
9525        `)),a&2){let l=r.$implicit;i(),ne(l.icon)}}var Ii=(()=>{let r=class r{constructor(){this.sizes=[{label:"Small",value:"sm"},{label:"Medium",value:"md"},{label:"Large",value:"lg"}],this.selectedSize="md",this.justifyOptions=[{icon:"pi pi-align-left",justify:"Left"},{icon:"pi pi-align-right",justify:"Right"},{icon:"pi pi-align-center",justify:"Center"},{icon:"pi pi-align-justify",justify:"Justify"}],this.selectedJustify=this.justifyOptions[0]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-selectbutton-demo"]],decls:28,vars:5,consts:[["title","SelectButton","description","Single and icon-only SelectButton demos."],[1,"flex","flex-column","gap-4"],[1,"d-block","mb-1"],["optionLabel","label","optionValue","value",3,"ngModelChange","options","ngModel"],["optionLabel","icon",3,"ngModelChange","options","ngModel"],["pTemplate","item"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9526  `),n(2,"div",1),e(3,`
9527    `),n(4,"div"),e(5,`
9528      `),n(6,"label",2),e(7,"Size selector"),t(),e(8,`
9529      `),n(9,"p-selectButton",3),M("ngModelChange",function(h){return I(o.selectedSize,h)||(o.selectedSize=h),h}),t(),e(10,`
9530      `),n(11,"small"),e(12),t(),e(13,`
9531    `),t(),e(14,`
9532    `),n(15,"div"),e(16,`
9533      `),n(17,"label",2),e(18,"Justify (icon only)"),t(),e(19,`
9534      `),n(20,"p-selectButton",4),M("ngModelChange",function(h){return I(o.selectedJustify,h)||(o.selectedJustify=h),h}
9534),e(21,`
9535        `),k(22,nu,3,2,"ng-template",5),e(23,`
9536      `),t(),e(24,`
9537    `),t(),e(25,`
9538  `),t(),e(26,`
9539`),t(),e(27,`
9540`)),s&2&&(i(9),m("options",o.sizes),T("ngModel",o.selectedSize),i(3),f("Selected: ",o.selectedSize),i(8),m("options",o.justifyOptions),T("ngModel",o.selectedJustify))},dependencies:[D,Q,U,H,rn,tr,oe,F],encapsulation:2});let a=r;return a})();var Mi=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-skeleton-demo"]],decls:38,vars:0,consts:[["title","Skeleton","description","Placeholder shapes while content loads."],[1,"row"],[1,"col-md-6"],[1,"mb-1"],["width","100%","height","150px"],["width","80%","styleClass","mb-2",1,"mt-2"],["width","60%"],[1,"flex","gap-2"],["shape","circle","size","4rem"],[1,"flex","flex-column","gap-2","flex-grow-1"],["width","100%","height","1rem"],["width","75%","height","1rem"],["width","50%","height","1rem"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9541  `),n(2,"div",1),e(3,`
9542    `),n(4,"div",2),e(5,`
9543      `),n(6,"p",3),e(7,"Rectangle"),t(),e(8,`
9544      `),c(9,"p-skeleton",4),e(10,`
9545      `),c(11,"p-skeleton",5),e(12,`
9546      `),c(13,"p-skeleton",6),e(14,`
9547    `),t(),e(15,`
9548    `),n(16,"div",2),e(17,`
9549      `),n(18,"p",3),e(19,"Card-like"),t(),e(20,`
9550      `),n(21,"div",7),e(22,`
9551        `),c(23,"p-skeleton",8),e(24,`
9552        `),n(25,"div",9),e(26,`
9553          `),c(27,"p-skeleton",10),e(28,`
9554          `),c(29,"p-skeleton",11),e(30,`
9555          `),c(31,"p-skeleton",12),e(32,`
9556        `),t(),e(33,`
9557      `),t(),e(34,`
9558    `),t(),e(35,`
9559  `),t(),e(36,`
9560`),t(),e(37,`
9561`))},dependencies:[D,ln,rr,F],encapsulation:2});let a=r;return a})();var Di=(()=>{let r=class r{constructor(){this.val1=40,this.rangeVal=[20,80]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-slider-demo"]],decls:22,vars:6,consts:[["title","Slider","description","Basic and range sliders."],[1,"flex","flex-column","gap-4",2,"max-width","400px"],[1,"d-block","mb-1"],[3,"ngModelChange","ngModel"],[3,"ngModelChange","ngModel","range"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9562  `),n(2,"div",1),e(3,`
9563    `),n(4,"div"),e(5,`
9564      `),n(6,"label",2),e(7),t(),e(8,`
9565      `),n(9,"p-slider",3),M("ngModelChange",function(h){return I(o.val1,h)||(o.val1=h),h}),t(),e(10,`
9566    `),t(),e(11,`
9567    `),n(12,"div"),e(13,`
9568      `),n(14,"label",2),e(15),t(),e(16,`
9569      `),n(17,"p-slider",4),M("ngModelChange",function(h){return I(o.rangeVal,h)||(o.rangeVal=h),h}),t(),e(18,`
9570    `),t(),e(19,`
9571  `),t(),e(20,`
9572`),t(),e(21,`
9573`)),s&2&&(i(7),f("Basic (",o.val1,")"),i(2),T("ngModel",o.val1),i(6),q("Range (",o.rangeVal[0]," \u2013 ",o.rangeVal[1],")"),i(2),T("ngModel",o.rangeVal),m("range",!0))},dependencies:[D,Q,U,H,hn,mr,F],encapsulation:2});let a=r;return a})();var Fi=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-slidemenu-demo"]],decls:17,vars:0,consts:[["title","SlideMenu","description","SlideMenu was removed in PrimeNG v21."],[1,"text-warning"],[1,"pi","pi-exclamation-triangle","me-2"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9574  `),n(2,"p",1),e(3,`
9575    `),c(4,"i",2),e(5,`
9576    `),n(6,"strong"),e(7,"SlideMenu"),t(),e(8,` is not available in PrimeNG v21. It was deprecated and removed.
9577    Consider using `),n(9,"strong"),e(10,"TieredMenu"),t(),e(11," or "),n(12,"strong"),e(13,"PanelMenu"),t(),e(14,` as alternatives.
9578  `),t(),e(15,`
9579`),t(),e(16,`
9580`))},dependencies:[D,F],encapsulation:2});let a=r;return a})();var Pi=(()=>{let r=class r{constructor(){this.activeIndex=0,this.items=[{label:"Personal Info"},{label:"Account"},{label:"Review"},{label:"Confirm"}]}};r.\u0275fac=function(s){return new(s||r)},r.\u0275cmp=b({type:r,selectors:[["app-p-steps-demo"]],decls:12,vars:5,consts:[["title","Steps","description","Step-by-step wizard progress indicator."],[3,"activeIndexChange","model","activeIndex","readonly"],[1,"flex","justify-content-between","mt-3"],["pButton","","type","button","label","Back","icon","pi pi-arrow-left",3,"click","disabled"],["pButton","","type","button","label","Next","icon","pi pi-arrow-right","iconPos","right",3,"click","disabled"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9581  `),n(2,"p-steps",1),M("activeIndexChange",function(h){return I(o.activeIndex,h)||(o.activeIndex=h),h}),t(),e(3,`
9582  `),n(4,"div",2),e(5,`
9583    `),n(6,"button",3),g("click",function(){return o.activeIndex=o.activeIndex-1}),t(),e(7,`
9584    `),n(8,"button",4),g("click",function(){return o.activeIndex=o.activeIndex+1}),t(),e(9,`
9585  `),t(),e(10,`
9586`),t(),e(11,`
9587`)),s&2&&(i(2),m("model",o.items),T("activeIndex",o.activeIndex),m("readonly",!1),i(4),m("disabled",o.activeIndex===0),i(2),m("disabled",o.activeIndex===o.items.length-1))},dependencies:[D,Bn,Nn,F],encapsulation:2});let a=r;return a})();var Ai=(()=>
9587{let r=class r{constructor(d){this.messageService=d,this.items=[{label:"Update",icon:"pi pi-refresh",command:()=>this.toast("Update")},{label:"Delete",icon:"pi pi-times",command:()=>this.toast("Delete")},{label:"Angular.io",icon:"pi pi-info",url:"http://angular.io"}]}save(){this.toast("Save")}toast(d){this.messageService.add({severity:"info",summary:d,detail:`${d} action triggered`})}};r.\u0275fac=function(s){return new(s||r)(A(ce))},r.\u0275cmp=b({type:r,selectors:[["app-p-splitbutton-demo"]],features:[Ie([ce])],decls:7,vars:1,consts:[["title","SplitButton","description","A button with a dropdown of secondary actions."],["label","Save","icon","pi pi-save",3,"onClick","model"]],template:function(s,o){s&1&&(n(0,"app-p-demo-wrapper",0),e(1,`
9588  `),c(2,"p-toast"),e(3,`
9589  `),n(4,"p-splitButton",1),g("onClick",function(){return o.save()}),t(),e(5,`
9590`),t(),e(6,`
9591`)),s&2&&(i(4),m("model",o.items))},dependencies:[D,ht,zn,Ae,Ze,F],encapsulation:2});let a=r;return a})();function du(a,r){if(a&1){let l=B();n(0,"li"),e(1,`
9592                            `),n(2,"button",13),g("click",function(){let s=w(l).$implicit,o=u();return C(o.selectCategory(s.categoryID))}),e(3),t(),e(4,`
9593                        `),t()}if(a&2){let l=r.$implicit,d=u();j("active",d.selectedCategory===l.categoryID),i(2),pe("aria-pressed",d.selectedCategory===l.categoryID),i(),p(l.name)}}function mu(a,r){a&1&&(O(0),e(1,`
9594                        `),n(2,"div",14)(3,"h4"),e(4,"Accordion"),t(),c(5,"app-p-accordion-demo"),t(),e(6,`
9595                    `),N())}function cu(a,r){a&1&&(O(0),e(1,`
9596                        `),n(2,"div",14)(3,"h4"),e(4,"AutoComplete"),t(),c(5,"app-p-autocomplete-demo"),t(),e(6,`
9597                    `),N())}function pu(a,r){a&1&&(O(0),e(1,`
9598                        `),n(2,"div",14)(3,"h4"),e(4,"Badge"),t(),c(5,"app-p-badge-demo"),t(),e(6,`
9599                    `),N())}function xu(a,r){a&1&&(O(0),e(1,`
9600                        `),n(2,"div",14)(3,"h4"),e(4,"Button"),t(),c(5,"app-p-button-demo"),t(),e(6,`
9601                    `),N())}function hu(a,r){a&1&&(O(0),e(1,`
9602                        `),n(2,"div",14)(3,"h4"),e(4,"Card"),t(),c(5,"app-p-card-demo"),t(),e(6,`
9603                    `),N())}function uu(a,r){a&1&&(O(0),e(1,`
9604                        `),n(2,"div",14)(3,"h4"),e(4,"Carousel"),t(),c(5,"app-p-carousel-demo"),t(),e(6,`
9605                    `),N())}function gu(a,r){a&1&&(O(0),e(1,`
9606                        `),n(2,"div",14)(3,"h4"),e(4,"Chart"),t(),c(5,"app-p-chart-demo"),t(),e(6,`
9607                    `),N())}function fu(a,r){a&1&&(O(0),e(1,`
9608                        `),n(2,"div",14)(3,"h4"),e(4,"Checkbox"),t(),c(5,"app-p-checkbox-demo"),t(),e(6,`
9609                    `),N())}function bu(a,r){a&1&&(O(0),e(1,`
9610                        `),n(2,"div",14)(3,"h4"),e(4,"ColorPicker"),t(),c(5,"app-p-colorpicker-demo"),t(),e(6,`
9611                    `),N())}function Su(a,r){a&1&&(O(0),e(1,`
9612                        `),n(2,"div",14)(3,"h4"),e(4,"ConfirmDialog"),t(),n(5,"p"),e(6,"Confirm dialog demo lives here."),t()(),e(7,`
9613                    `),N())}function Eu(a,r){a&1&&(O(0),e(1,`
9614                        `),n(2,"div",14)(3,"h4"),e(4,"DataView"),t(),c(5,"app-p-dataview-demo"),t(),e(6,`
9615                    `),N())}function vu(a,r){a&1&&(O(0),e(1,`
9616                        `),n(2,"div",14)(3,"h4"),e(4,"DatePicker"),t(),c(5,"app-p-datepicker-demo"),t(),e(6,`
9617                    `),N())}function yu(a,r){a&1&&(O(0),e(1,`
9618                        `),n(2,"div",14)(3,"h4"),e(4,"Dialog"),t(),c(5,"app-p-dialog-demo"),t(),e(6,`
9619                    `),N())}function wu(a,r){a&1&&(O(0),e(1,`
9620                        `),n(2,"div",14)(3,"h4"),e(4,"FileUpload"),t(),c(5,"app-p-fileupload-demo"),t(),e(6,`
9621                    `),N())}function Cu(a,r){a&1&&(O(0),e(1,`
9622                        `),n(2,"div",14)(3,"h4"),e(4,"Inputs"),t(),c(5,"app-p-inputs-demo"),t(),e(6,`
9623                    `),N())}function _u(a,r){a&1&&(O(0),e(1,`
9624                        `),n(2,"div",14)(3,"h4"),e(4,"Listbox"),t(),c(5,"app-p-listbox-demo"),t(),e(6,`
9625                    `),N())}function ku(a,r){a&1&&(O(0),e(1,`
9626                        `),n(2,"div",14)(3,"h4"),e(4,"Menu / Menubar / SlideMenu"),t(),e(5,`
9627                            `),c(6,"app-p-menu-demo"),e(7,`
9628                            `),c(8,"app-p-menubar-demo"),e(9,`
9629                            `),c(10,"app-p-slidemenu-demo"),e(11,`
9630                        `),t(),e(12,`
9631                    `),N())}function Tu(a,r){a&1&&(O(0),e(1,`
9632                        `),n(2,"div",14)(3,"h4"),e(4,"Message"),t(),c(5,"app-p-message-demo"),t(),e(6,`
9633                    `),N())}function Iu(a,r){a&1&&(O(0),e(1,`
9634                        `),n(2,"div",14)(3,"h4"),e(4,"MultiSelect"),t(),c(5,"app-p-multiselect-demo"),t(),e(6,`
9635                    `),N())}function Mu(a,r){a&1&&(O(0),e(1,`
9636                        `),n(2,"div",14)(3,"h4"),e(4,"Paginator"),t(),c(5,"app-p-paginator-demo"),t(),e(6,`
9637                    `),N())}function Du(a,r){a&1&&(O(0),e(1,`
9638                        `),n(2,"div",14)(3,"h4"),e(4,"Panel"),t(),c(5,"app-p-panel-demo")(6,"app-p-panelmenu-demo"),t(),e(7,`
9639                    `),N())}function Fu(a,r){a&1&&(O(0),e(1,`
9640                        `),n(2,"div",14)(3,"h4"),e(4,"Popover"),t(),c(5,"app-p-popover-demo"),t(),e(6,`
9641                    `),N())}function Pu(a,r){a&1&&(O(0),e(1,`
9642                        `),n(2,"div",14)(3,"h4"),e(4,"ProgressBar / ProgressSpinner"),t(),c(5,"app-p-progress-demo"),t(),e(6,`
9643                    `),N())}function Au(a,r){a&1&&(O(0),e(1,`
9644                        `),n(2,"div",14)(3,"h4"),e(4,"RadioButton"),t(),c(5,"app-p-radiobutton-demo"),t(),e(6,`
9645                    `),N())}function Ou(a,r){a&1&&(O(0),e(1,`
9646                        `),n(2,"div",14)(3,"h4"),e(4,"Rating"),t(),c(5,"app-p-rating-demo"),t(),e(6,`
9647                    `),N())}function Nu(a,r){a&1&&(O(0),e(1,`
9648                        `),n(2,"div",14)(3,"h4"),e(4,"Scroller"),t(),c(5,"app-p-scroller-demo"),t(),e(6,`
9649                    `),N())}function Bu(a,r){a&1&&(O(0),e(1,`
9650                        `),n(2,"div",14)(3,"h4"),e(4,"Select"),t(),c(5,"app-p-select-demo"),t(),e(6,`
9651                    `),N())}function Wu(a,r){a&1&&(O(0),e(1,`
9652                        `),n(2,"div",14)(3,"h4"),e(4,"SelectButton"),t(),c(5,"app-p-selectbutton-demo"),t(),e(6,`
9653                    `),N())}function Ru(a,r){a&1&&(O(0),e(1,`
9654                        `),n(2,"div",14)(3,"h4"),e(4,"Skeleton"),t(),c(5,"app-p-skeleton-demo"),t(),e(6,`
9655                    `),N())}function Lu(a,r){a&1&&(O(0),e(1,`
9656                        `),n(2,"div",14)(3,"h4"),e(4,"Slider"),t(),c(5,"app-p-slider-demo"),t(),e(6,`
9657                    `),N())}function qu(a,r){a&1&&(O(0),e(1,`
9658                        `),n(2,"div",14)(3,"h4"),e(4,"SplitButton"),t(),c(5,"app-p-splitbutton-demo"),t(),e(6,`
9659                    `),N())}function Vu(a,r){a&1&&(O(0),e(1,`
9660                        `),n(2,"div",14)(3,"h4"),e(4,"Steps"),t(),c(5,"app-p-steps-demo"),t(),e(6,`
9661                    `),N())}function zu(a,r){a&1&&(O(0),e(1,`
9662                        `),n(2,"div",14)(3,"h4"),e(4,"Table"),t(),c(5,"app-p-table-demo"),t(),e(6,`
9663                    `),N())}function Uu(a,r){a&1&&(O(0),e(1,`
9664                        `),n(2,"div",14)(3,"h4"),e(4,"Toast"),t(),c(5,"app-p-toast-demo"),t(),e(6,`
9665                    `),N())}function Hu(a,r){a&1&&(O(0),e(1,`
9666                        `),n(2,"div",14)(3,"p"),e(4,"Select a category from the left to view its demo."),t()(),e(5,`
9667                    `),N())}var g0=(()=>{let r=class r{selectCategory(d){this.selectedCategory=d}constructor(d){this.siteDataService=d,this.accordionItems=[{header:"Overview",content:"This is the overview content for the accordion demo."},{header:"Details",content:"Detailed information can go here. Use this area to show component props or examples."},{header:"Notes",content:"Additional notes and usage tips."}],this.categories=["accordion","autocomplete","badge","button","card","carousel","chart","checkbox","colorpicker","confirmdialog","dataview","datepicker","dialog","divider","dragdrop","drawer","fileupload","input","listbox","menu","message","multiselect","paginator","panel","popover","progress","radiobutton","rating","scroller","select","selectbutton","skeleton","slider","splitbutton","steps","table","tabs","textarea","tieredmenu","toast","toggleswitch","toolbar","tooltip","tree","treeselect","treetable"].map(s=>({categoryID:s,name:s.charAt(0).toUpperCase()+s.slice(1)})),this.selectedCategory=this.categories.length?this.categories[0].categoryID:""}
9667ngOnInit(){this.siteDataService.hideSiteLoader()}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-p-primeng-demo"]],standalone:!1,decls:108,vars:36,consts:[[1,"section"],[1,"container-fluid"],[1,"row","mt-4"],[1,"col-12"],[1,"text-muted"],[1,"row","mt-3"],[1,"col-auto"],[1,"page-navigation","bg-white","position-sticky-top"],[3,"active",4,"ngFor","ngForOf"],[1,"col-md-9"],[3,"ngSwitch"],[4,"ngSwitchCase"],[4,"ngSwitchDefault"],["type","button",1,"btn-a11y","nav-link",3,"click"],[1,"demo-area","mb-4"]],template:function(s,o){s&1&&(n(0,"section",0),e(1,`
9668    `),n(2,"div",1),e(3,`
9669        `),n(4,"div",2),e(5,`
9670            `),n(6,"div",3),e(7,`
9671                `),n(8,"h2"),e(9,"PrimeNG Demo"),t(),e(10,`
9672                `),n(11,"p",4),e(12,"Placeholder area for PrimeNG component demos. Add components here."),t(),e(13,`
9673            `),t(),e(14,`
9674        `),t(),e(15,`
9675
9676        `),n(16,"div",5),e(17,`
9677            `),n(18,"div",6),e(19,`
9678                `),n(20,"nav",7),e(21,`
9679                    `),n(22,"ul"),e(23,`
9680                        `),k(24,du,5,4,"li",8),e(25,`
9681                    `),t(),e(26,`
9682                `),t(),e(27,`
9683            `),t(),e(28,`
9684
9685            `),n(29,"div",9),e(30,`
9686                `),n(31,"div",10),e(32,`
9687                    `),k(33,mu,7,0,"ng-container",11),e(34,`
9688                    `),k(35,cu,7,0,"ng-container",11),e(36,`
9689                    `),k(37,pu,7,0,"ng-container",11),e(38,`
9690                    `),k(39,xu,7,0,"ng-container",11),e(40,`
9691                    `),k(41,hu,7,0,"ng-container",11),e(42,`
9692                    `),k(43,uu,7,0,"ng-container",11),e(44,`
9693                    `),k(45,gu,7,0,"ng-container",11),e(46,`
9694                    `),k(47,fu,7,0,"ng-container",11),e(48,`
9695                    `),k(49,bu,7,0,"ng-container",11),e(50,`
9696                    `),k(51,Su,8,0,"ng-container",11),e(52,`
9697                    `),k(53,Eu,7,0,"ng-container",11),e(54,`
9698                    `),k(55,vu,7,0,"ng-container",11),e(56,`
9699                    `),k(57,yu,7,0,"ng-container",11),e(58,`
9700                    `),k(59,wu,7,0,"ng-container",11),e(60,`
9701                    `),k(61,Cu,7,0,"ng-container",11),e(62,`
9702                    `),k(63,_u,7,0,"ng-container",11),e(64,`
9703                    `),k(65,ku,13,0,"ng-container",11),e(66,`
9704                    `),k(67,Tu,7,0,"ng-container",11),e(68,`
9705                    `),k(69,Iu,7,0,"ng-container",11),e(70,`
9706                    `),k(71,Mu,7,0,"ng-container",11),e(72,`
9707                    `),k(73,Du,8,0,"ng-container",11),e(74,`
9708                    `),k(75,Fu,7,0,"ng-container",11),e(76,`
9709                    `),k(77,Pu,7,0,"ng-container",11),e(78,`
9710                    `),k(79,Au,7,0,"ng-container",11),e(80,`
9711                    `),k(81,Ou,7,0,"ng-container",11),e(82,`
9712                    `),k(83,Nu,7,0,"ng-container",11),e(84,`
9713                    `),k(85,Bu,7,0,"ng-container",11),e(86,`
9714                    `),k(87,Wu,7,0,"ng-container",11),e(88,`
9715                    `),k(89,Ru,7,0,"ng-container",11),e(90,`
9716                    `),k(91,Lu,7,0,"ng-container",11),e(92,`
9717                    `),k(93,qu,7,0,"ng-container",11),e(94,`
9718                    `),k(95,Vu,7,0,"ng-container",11),e(96,`
9719                    `),k(97,zu,7,0,"ng-container",11),e(98,`
9720                    `),k(99,Uu,7,0,"ng-container",11),e(100,`
9721                    `),k(101,Hu,6,0,"ng-container",12),e(102,`
9722                `),t(),e(103,`
9723            `),t(),e(104,`
9724        `),t(),e(105,`
9725    `),t(),e(106,`
9726`),t(),e(107,`
9727`)),s&2&&(i(24),m("ngForOf",o.categories),i(7),m("ngSwitch",o.selectedCategory),i(2),m("ngSwitchCase","accordion"),i(2),m("ngSwitchCase","autocomplete"),i(2),m("ngSwitchCase","badge"),i(2),m("ngSwitchCase","button"),i(2),m("ngSwitchCase","card"),i(2),m("ngSwitchCase","carousel"),i(2),m("ngSwitchCase","chart"),i(2),m("ngSwitchCase","checkbox"),i(2),m("ngSwitchCase","colorpicker"),i(2),m("ngSwitchCase","confirmdialog"),i(2),m("ngSwitchCase","dataview"),i(2),m("ngSwitchCase","datepicker"),i(2),m("ngSwitchCase","dialog"),i(2),m("ngSwitchCase","fileupload"),i(2),m("ngSwitchCase","input"),i(2),m("ngSwitchCase","listbox"),i(2),m("ngSwitchCase","menu"),i(2),m("ngSwitchCase","message"),i(2),m("ngSwitchCase","multiselect"),i(2),m("ngSwitchCase","paginator"),i(2),m("ngSwitchCase","panel"),i(2),m("ngSwitchCase","popover"),i(2),m("ngSwitchCase","progress"),i(2),m("ngSwitchCase","radiobutton"),i(2),m("ngSwitchCase","rating"),i(2),m("ngSwitchCase","scroller"),i(2),m("ngSwitchCase","select"),i(2),m("ngSwitchCase","selectbutton"),i(2),m("ngSwitchCase","skeleton"),i(2),m("ngSwitchCase","slider"),i(2),m("ngSwitchCase","splitbutton"),i(2),m("ngSwitchCase","steps"),i(2),m("ngSwitchCase","table"),i(2),m("ngSwitchCase","toast"))},dependencies:[Me,xa,ha,ua,Jn,Zn,ei,ti,ni,ii,ai,ri,oi,li,si,di,mi,ci,pi,xi,hi,ui,gi,fi,bi,Si,Ei,vi,yi,wi,Ci,_i,ki,Ti,Ii,Mi,Di,Fi,Pi,Ai],encapsulation:2});let a=r;return a})();var f0=(()=>
9727{let r=class r{constructor(d){this.siteDataService=d}ngOnInit(){this.siteDataService.hideSiteLoader()}updateColor(d){let s=d.target,o=document.getElementById("CMSButtons");o&&o.style.setProperty("--global-text-color",s.value)}updateBackground(d){let s=d.target,o=document.getElementById("CMSButtons");o&&o.style.setProperty("--global-background-color",s.value)}updateRadii(d){let s=d.target,o=document.getElementById("CMSButtons");o&&o.style.setProperty("--global-radius",s.value)}};r.\u0275fac=function(s){return new(s||r)(A(R))},r.\u0275cmp=b({type:r,selectors:[["app-cms-buttons"]],standalone:!1,decls:54,vars:0,consts:[[1,"p-3",2,"background","#eee"],["id","CMSButtons",1,"full-width"],[1,"btn","btn-lg","btn-primary"],[1,"btn","btn-lg","btn-outline"],[1,"btn","btn-lg","btn-naked"],[1,"full-width","mt-5"],[1,"mt-3"],["type","color","value","#fff",3,"input"],["type","color","value","#4f46e5",3,"input"],["id","radiusSelect",1,"mt-3",3,"change"],["value","0"],["value","0.375rem"],["value","1000px"]],template:function(s,o){s&1&&(n(0,"div",0),e(1,`
9728    `),n(2,"h2"),e(3,"CMS Buttons"),t(),e(4,`
9729
9730    `),n(5,"div",1),e(6,`
9731        `),n(7,"button",2),e(8,"Primary"),t(),e(9,`
9732        `),n(10,"button",3),e(11,"Outline"),t(),e(12,`
9733        `),n(13,"button",4),e(14,"Text"),t(),e(15,`
9734    `),t(),e(16,`
9735        `),n(17,"div",5),e(18,`
9736            `),n(19,"p"),e(20,"Buttons don't actually work like this but it is close. This can be refined to figure out potential issues."),t(),e(21,`
9737        `),t(),e(22,`
9738`),c(23,"hr"),e(24,`
9739    `),n(25,"div",5),e(26,`
9740        `),n(27,"h3"),e(28,"Global settings"),t(),e(29,`
9741        `),n(30,"label",6),e(31,`
9742            `),n(32,"input",7),g("input",function(h){return o.updateColor(h)}),t(),e(33,`
9743            Text Color
9744        `),t(),e(34,`
9745        `),n(35,"label",6),e(36,`
9746            `),n(37,"input",8),g("input",function(h){return o.updateBackgroun
9746d(h)}),t(),e(38,`
9747            Background Color
9748        `),t(),e(39,`
9749        
9750        `),n(40,"select",9),g("change",function(h){return o.updateRadii(h)}),e(41,`
9751            `),n(42,"option",10),e(43,"Sharp"),t(),e(44,`
9752            `),n(45,"option",11),e(46,"Rounded"),t(),e(47,`
9753            `),n(48,"option",12),e(49,"Capsule"),t(),e(50,`
9754        `),t(),e(51,`
9755    `),t(),e(52,`
9756`),t(),e(53,`
9757`))},dependencies:[Fe,Pe],styles:[".btn-primary[_ngcontent-%COMP%]{background:var(--global-background-color, #1d6ae5);color:var(--global-text-color, #fff);border-radius:var(--global-radius)}.btn-outline[_ngcontent-%COMP%]{color:var(--global-text-color, #fff);border-radius:var(--global-radius);background:transparent;border-color:var(--global-background-color, #1d6ae5)}.btn-naked[_ngcontent-%COMP%]{color:var(--global-text-color, #fff);border-radius:var(--global-radius)}label[_ngcontent-%COMP%]{width:100%;display:block}"]});let a=r;return a})();var b0=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275mod=Ge({type:r}),r.\u0275inj=je({imports:[Ri.forChild([{path:"",component:Go,children:[{path:"",component:Ho},{path:"global/admin-vs-member",component:$o},{path:"global/fonts",component:Ko},{path:"global/color",component:Jo},{path:"global/contrast",component:al},{path:"global/blues-and-links",component:rl}
9757,{path:"global/primeng-upgrade-debt",component:dl},{path:"global/typography",component:ml},{path:"global/buttons",component:cl},{path:"global/grid",component:pl},{path:"global/forms",component:Tl,children:[{path:"overview",component:Il},{path:"fields",component:Fl},{path:"layout",component:Al},{path:"architectures",component:Wl},{path:"contracts",component:Rl},{path:"defects",component:Ll},{path:"",redirectTo:"overview",pathMatch:"full"}]},{path:"global/tables",component:ql},{path:"global/utilities",component:Ul},{path:"global/font-test",component:jl},{path:"global/background-test",component:Gl},{path:"components/pills",component:Yl},{path:"components/avatars",component:e0},{path:"components/cards",component:i0},{path:"components/system-alerts",component:o0},{path:"components/staging",component:s0},{path:"primeng",component:g0},{path:"cms/buttons",component:f0},{path:"image-test",component:Kl},{path:"",redirectTo:"",pathMatch:"full"}]}]),Ri]});let a=r;return a})();var D6=(()=>{let r=class r{};r.\u0275fac=function(s){return new(s||r)},r.\u0275mod=Ge({type:r}),r.\u0275inj=je({providers:[ce,Qe,Fa()],imports:[D,Q,wo,Wo,Bo,pr,ut,b0,In,xn,Bt,Se,Hn,An,Un,$t,Gt,On,Ln,Xt,Ht,Vo,Ro,Ha,en,dn,mn,lr,tn,Lt,Dn,Wt,zt,Jt,Qt,nn,qn,Ut,Fn,Zt,Vn,an,pn,qt,Vt,rn,ln,hn,ht,Bn,on,So,_n,_o,Ae,or,zo,Na,$a,uo,Uo,F,Jn,Zn,ei,ti,ni,ii,ai,ri,oi,li,si,di,mi,ci,pi,xi,hi,ui,gi,fi,bi,Si,Ei,vi,yi,wi,Ci,_i,ki,Ti,Ii,Mi,Di,Fi,Pi,Ai]});let a=r;return a})();export{D6 as a};

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.