/*
 * ZAR'AAB Admin — custom.css
 * Shared styles for every page: design tokens, layout, sidebar, topbar,
 * tables, forms, plus page-specific sections below the base layer.
 * Generated file — edit the build scripts in /build, not this file directly.
 */

/* Red Hat Mono, self-hosted as base64 woff2. Used for the numeric
   ".mono" class.

   Fourth font tried. The first two (Cousine, then IBM Plex Mono) both
   turned out to have a dotted "0" that I'd missed by eye. The third
   (Roboto Mono) genuinely does have a slashed "0" -- verified both by
   rendering its glyph shape programmatically and by eye at your
   table's real size -- but you reported it still read as ambiguous,
   and a side-by-side at that real size (13px, normal 1x screen
   density, not a zoomed screenshot) showed why: Roboto Mono's slash
   is thin enough that it's easy to miss at a glance even though it's
   technically there. Red Hat Mono's "0" uses the same kind of slash
   but drawn as a noticeably thicker stroke, so it reads clearly
   without having to zoom in -- confirmed the same way, at the same
   real size, compared directly against Roboto Mono in the same
   screenshot. It's also exactly the same character width as Roboto
   Mono (checked with getBoundingClientRect on real text), so
   switching to it doesn't change how much horizontal space numbers
   take up anywhere on the site. */
@font-face {
  font-family: 'Red Hat Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(data:font/woff2;base64,d09GMgABAAAAACYAABAAAAAAU4gAACWfAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoEsG4QmHIQUBmA/U1RBVEgAhUARCAr7NN93C4QGAAE2AiQDhzIEIAWEZgeHSAwHG61CRQdy2DgAOHhtAKKoD3pSM/n/ksANEZHuQe124RCOkEp3WrO6u1tQUMrG8qKGYXLy/e6Ur+Knc7a6NbpKTFyirms4/vNUC9ssbqj3EI1SvrFzEHV5n2h7hMY+yeX5/x8H/T53JIRqJbNSScwT4qxJWU1s/t9veJrTfwcetGiIEyW5iF6I6EUuhiXgAUIQDXjFhG7e+jpjUlZqsI72V5TW11LRvzKrzYzn37+dG+uT5lFai1rySSMvi6m9BBQA+Pna0vdmIPIeEzHD1gTLEpUvLLPGGtvO4dI65Ba4xcQg7mRzuNWv7bU1AF4BBn/up/3na2TdborAMQg5Y1s5NQXM4Y/4kji1xTqHVGl61iB9XtPDZa0xGJGWH0L4/9lM2/03mWfJLDNeZSwabYArp0wbLqq/szppZ0dz0q3u4tXKoDvLKPv56CUyS2tayRykiqFSWAGkEghKp+eiS1H04aKt08fGWHWDhO3zEikSuefnXlUPItNuIguRy+VKLthyyRr9quiYh2xaBZn4SyBm2MWArO1FmESeP2x/vzNAYkDixIEkSABJlgaSgQqSjQPCxQURUoAoKUFUzCBWVhAHD0i+UpBylSB+QZAGDSCt2kA69ID06QMZMBNkwiXhrrkuHAQCdAWJNOGiS665DgJ0xyQVtnCx2wcSj+zsC4FEEQAHMvYcZEAM4DBmLjSsfpkMcrVyRLyyMMecUmN4FKfwdjwUVd1NESA6+vP0fvYMfaZy+mA9cscN55KztgCnddwRmzpoGC1vgJKTKUOEhEz6AvQaEwtjk4WEZSThCQkIVcCcEKKKmbDekvtCDmIgCuCHNwoCSAyJBdx8siTUj8jcNAieUAmN5BAukRE5qBABs0qBbiDEQlwBtxDJI96L7xMJGNyeMxR+pjaU3j7bKXKNfOHzNllpIKOKfI/AUuTSN53azkfCuSJEblCxTsyzGylq9872PmDZgh1dQL+HOjtA7tETCALp2RlsB/yrv6MHsAERbgkgEAmDmCVLhCi41NKS8eBfB32kR4WwzDwZAidPRYFSk4XKWp6MRUzxgP7IFBCe6CaNlnH+kGiKS1EgalEhwanADMKc3kV4omzsO3RZMdzr3vAmyAUg5gKlkIaUpslO2rW0XnTSadlNBm123AldncjHcdPgcWdREoWBPPAtoCMn+BuhwO3MbX8UboMnB63pUX4gxPeheFS04z/0WDcQCWpZKKLKsqHYoK42GcCK5iXINtLogEpkbEQYFBUevgDYDzgEmAqwqlxuMC6h/WP++X8GyH2IBHAPIJ9rDDD2kKVJNgww0CgTlzm+v7kPAkANXgJKGLKIENeH5ZAbvvBCLxsLbQD0tHsNIwbKWRiIqKHsUkaRu+BrUURlniH/YUGSeGusTtZk3ekAhUeEx9CK1o3WgzaQRqBRaHQamyajqWkW2lA2PXtj9iA9hZ7+b2v//w290IipbfepWu+iGu0LwjuMHEDD00j7LKWp2h4FPAZ2nAC27Hn+H/C/8W+h/97/9/G/Z69/OrD/AoDXhwcufB2653XS/VuvNPfV9z59+WEWOQwCLAbs8l3CACCPspPfz7mdzf5Xe8YKH1rvsHOGfOQtb1vnK0tsstgGSy1zwv8ct8rHIDhxEiRLlyETHhkFFU02BpiAkIiYBEIpl4rGFhttdcZrvqZlYWXnkCdfgUJlKlSq4lejSYtWbTqE9OrTb8BM7xjxrlPmWumgMYd8ab9P3fCZWd5z2ufuGHbSn/5y01mfWOOuP8y2xw++96PVooSJECNStFjx0kyTIhVJFgKiJHQcTCxcbEflUJCSkVPja2eko2dmYIKy8XBycSvl5VMMUy2oVkCDOsfU69GpS7fpms3A0+i+e3bZbZsddtoOArX/9AFIAUB1BCADgb43AIMHAB3WArUHQIQ136B2JjOM7So6XQxREZenY+nQRMYArQ6umX06hJs8llGhtqCHa5qbdiDQ6p1GJIU+zEdUaBgL3RRdyXBC2NZkSYULv5MRXKSNlDgC1n+3jKUiKXVYUVh6Pg1hMjwQEdnd+dLNP1WqY0x4cgdEV6nmrLVtE46IHM0JHSdB9IVRtgoCrbyRgTCksDZbYft2dfp7CJ2TqriyA/I8cl3tTQPHyVCPhEPsrilZP5InpkPMTNhIQKRYoELu5RWAJfP7SRkLbtLwcpaTOS6oQ1AEDhqNIPmLEK6vVGNnIsT5FYMqzqAuyLgIaEKdUjcbhDmTiCBiI6wVwUHUxVYP28oWpeMYDI30gl4c5qodxo5mfWViZC1PPpX+wnA6w+3cSsojNCevWQsIuE16kPrXZbKb8/ILgGX3domS3mE1ZhWR67FfKqf6Lf115rgUbTXKQQlosLUsATPpcIH3tqQRZv8m9r7uT4tp15OeP9csg7bUtvRilRKxScim9agZWcez7LbAMwC0kdhj9NB1hHAIeW4V2M2GZbKLTI/BKHFC+MilnbeUFs9Gk42mZZq7e6jX2JuuTElutmcb3Ymkq/V/07b1t61Z9b5K1YQXj5lFKzHSF2QLl+Mszksb0p9uojKpaUr3R9vmL5nGnOrXGeHuULgUM8gwrRZ4wHUFPINU5A1dals8JJez9istL7oXUXwa0UzJnm2zsyH+cTnSjzFrwtM/sx1j77oDEf2ifRnLTTgUyDUbbP4KlrFdG7e2c8vf7DlObRfLTi5l+0QzJROWiX4sg9HpQAv6ukBab9QTa5y6itcjbWHCIigdjhfPEDHPGmSjwYrZ/6euqZBavphNzIq2vlnkXXgKKJtdcC62efK5iTzy7jmbsuOqXTUHgt3auLiBWvo4AdDreNp5cFpu8vHKV10IqxMMrr4U8hv5jH3aOVj0ki+1md/ULsJQVkwrJFKoF5uciAjoM+Gcyh+c83ztFx+hVgjFVHTYbHvv6iIkrQOMekzhE2VlZzbccCkXQ9IkGypvT5zZwHNAzl0MZFcGkh2bsVCTmswVmucznBylHMZ5AnCrmKjLNjJkudheLRyzU6MFIsp36Rq87XTMivIMLVdmeZAZbd3FHSnqBHng7uCqxibDWZQJxp+NgsQ0wTDnZtz2XdS5GGcwulq+Vokb46SdIecHWwaljE/bdyijr6l7prcFieOfwE0UfkA5EG6CRAGYDpzLbeLi5XTnLW3Koyp+Ng+lm+FtTwz7COVAkNYb7UTJ1AUh5UPecTPBGAB1cPVhfN58J766Q5mhSfdI/C5L/fjfs2v81aNaVU1bHbuT6r7fpx1fPmRgcaKng/Wxs/TV27hHmedC4WKasvmNzGnjS/HWqenUy5dvmzAMEqhBl8gkG7jtNTtrQDBDWLJKguC/2XOckpcyWrHULCQpva7c1xw8fsl5NFWzte47h18wpjOI0i3TWUEZRw7YdQF9O5bBN2vykRdPQP+EJOkAcDbks2xnvIMvfnBc8TYFU914/tjGMHrmriQnxDWbbiZbvwkiNNdH9P339y/CMl8F4aFrHs/YWd+8KV6aLGwfhqJvnENCvCwd8kFsXsT7+/f3r05R6+0SxFYplUop7mue1iKgVVAqFtovpE9J1oR/OrHoBOQjze3h9cof+bvUD/y9RguuyaEgi0zl/3pdvl/J9syfEBXwU5QvfXSP3h9fxWxKhJzPMPv26ApmrUxs1ZctuoJv7fXhZZBXXS/Ay4NLEMUrzC2/Bk4+eTicTpghT2OT72LpmsrjDkumdHZVe6PUZ9DyMOxZFQUtB1pAAxicAR7kgYSOIM0qnB7Bxnh7tSy1koL/qUvLQULRNUQSNhp3FE/vyqWhER+c6EQP7YkFmTzl9d9aEXaLQMj4QNfZXhzKo7E79sfqPX+xI4uiINfmktB638XSqrsyfFZPlYfAd7qYHzuTNhSh7dXPX8guLiwplyciIv2pP1LkmJmTW1ouMsmwNUVsamG1BcvdbNYdWqOuyar23Ql97lkEK3GKVEsn6xa93SxMbt8cfVOgacfWmGs0W9V3RcO0+aEz9uu5SwkXi6myFt+l1uRKt2hyZ7mHCjl/CzokKQJNwHkju2Ym9NcwCIUCQkIGAlVVSeZNU75aEgcUq8j+AE+cGsgD0iYbCVbRNqTwyL2lpcjwVPpXnUlrjJuZ97i9Xkhm5Mdq81peikcKejaoorIwS/U6nNdn+WRIbeoRNWjnmfKLisRvy2rsN9KuPnZH1YDHiFtoyxQSn5R6sqWC57qkNVOEvKM10701luTXWrTqyjUILsNtTdAcvdMBNVmlLJVs5AOMGpbpm1B2MgPtPgRt14OXMJFPNuXCN27uB5635qLms0b2aIJGRkLOmjUnR63b5HBfFxarPmraCX3rEa2iUoeFDKmu3B1m79dm65skykX2E6U7oz3dETsV6k2H1YCw7CWWOp/zZQG2VhcfRmW+FqgTV5SrowdNhm1zVbetdGd1LTl9COzCzBbOWpMvtsis2Zge0vdNh8N9lltE7OaQcjkuHU4ko9Ldnn1nO4plmLBDYoGTUzOWpkZ66uJD0GkWXsHs++vaOrgMXl4ECoqgeWk+aV9ytIqM28rvj/tyMu7g/LhpRwuMrQcNbjVjgsW5ULYXLNfapFVvRvrte120GaROIHH3l0ujQM3cjjF93zq4D89c1fS51DihRNfx7muKhk/yeoEWGsF8IBR5XPCwx1bSSbOx4XanZc4nVuKN/HoOP/wS2wKPKLiW72p9fazWmCoeMxjJnhFqIjWKw46nvg+LbVP7yk+57CVsK55nMDiiL80p6XFqoPqG+Plnqn5Qs2oTW0X7G5YGlWxchpqNZtRn9zF793Q+5gUqxStLwMM8weBhs3uQaijYmxRjBzabGwoe/1wpcTd7pe7lXBI86zgBsbA3FdamWvKauHYsU+gzWBJnnwNF/KhjrM5DnajG5swETwfQELj3Rf8Yib5KXHWdALCM6oLKbwh8yY9Zc8bTSNy0IWxPotdX80nQ2R5U7mfe/oLTYvs3sEjQO6z2RF3HQto8P0ndZFQ5hedOC34lyEVaHraib6myGk/5pBNzg5D3QLlLnbve27UhtwDDvhZSfxfWRx+Njzza8P+3Gd0wwP0PisXxT/9trs3/qqaf2ag5PfHbjz9Be1HG2ryVa2samjZkhoeuSyxsqNU9wcVb1jfFVsZqa1fGYpt68qNyaTgkli7L11zUEpxthtexva/PsX2G16YLSu01KSiWkVpQW6KX+yyShVVVkoU+i1xfW5JagGWkmO21QSngPKN3S77i86lEfKaDTs4oM0Z3lBjf6VB0Vwm1szp9Eaf2Ohk518Auc6uh2iabV1ysaCsZWt0zxo4WzSmzvdvcZNtimxWBanO+7lPmoGtugfud7i73u5jnajUHtKNmyLzyCmQufgzawJ8DugEQGNuPtvz6DH32TwcKGsdG0dBfv6O/awCCc8zy82yrFncT67u3Q4lFKfdohG1h9h3oM2qH4e3eQoCNedRCtWfMYxAaQAG6H9mPHkRHkBEUJONK5/tJPitRsmKuq7yz+gvPPp96drsZBMc8TthRZyzFgi18twc0j3lmNqNAM1az0fOpVjNm93+06iH4gXusjKGCVLaxPIETcgIYZ5vuxbb39VW0Xhuaa7XKvRbxwqoqQvLKb9q56/NbrbOczvZR2kyXaM1gl3PUdg++TNkQb/9YLEsq/uCt//nl4V0D6f429N05xcVp6PVf18TX/HMLxRf3sJ/jap1T/1pZtPxbqX4zqBn7vyUoRaoMesRvy1jepATWOwqdJpPWOdYfOL5n/Zv97tdfOYdrSaG3MO+2iwrBCr+l8DeDsLxzSV5cfvVmYpttiq/UxrFbaFCqLNfZPHXm1Hflxa/x1sBty6xFmE5f5LAuAwqcbbZ86tbXNQKl0EZfw4Z3WkneNF+mNYdnzVUi3jqR0diXYxLObmnIkRgLjBL+LhvZdwhsD1ml1la1ykHUzCmUhD6dCWCcs82g7i846jlaVtbkcikv2xsFLgavMPDnt6OF53rP9eR/fxiEfKOYmhQiWUMENcHqHXX0GfoNAD/V8nVh2UfJQ8klt/K+ay8fhcdgEEn98V3fsbJjZQXPtlAAgiy3LIHQJ1tl/d0D/0kWsQRmPl9o8jFy+a7k1FzT+88By5F264a7JlPkr/eXqbHcaXnUra/DVpkKthF+rH5kTeKpbRLwUazRk2+0eAtslBVGcTKN+DA2W2Mn0KuInoanHKFFy253ZEWHO811CN5SFPzDnMXmW5nr//d5U/bxcLu4kAMjxWsFxFtth+5N27c4iesVMHeDyitYonLcQxeYGs3aLrtN01VvNorzmcOmlbkSt5jvUyB8r1sk4WL0ea9C9mwgi7WGzMZuDDP2hExWS4fm1e6ePL5E6sn7vErDZ+NSiWc37H4VHhHgFozLqvybOlTVgfIvvF+vunq6TPx7yYwyNJg1XTa7tqvJbBR46OM5WOJDh2k4n3kftmeHXs3D6FyJW8T3Igq+zy0GnFhzm0nfZbWqWxt0RmOdflEMhsw4XK0740Nqc09fdb0Y6TV/WKEZ030aqtAu7XDaDWKXiFckk/MKXSKx2CmCC+UyuMgpAspYW6fZ2INhuu5Wk9naZtSFbBmDElFeHl8MO2lr+E3BnKcMR6UQtbH5XJTFR8HNofe179e9vZdybtKSN4shoiAlD7UPh4BwUlJHeOPpSUc6a8XcuuF8ptg3YlOEuUcNWHRlS21zqkyRHnr5dASvYImYsiSoyOPzCxCtg2OyObU5JpavGTArCZYsAkr4bn9ZlpoGT6EdY49o/60UHoAJFfHmM2vA1lhM0QLe7SWOocxGE2Dr9r85skL15F9aC2M7mJp8ud3uK1jiJPSgKuFb/D91UT8+Uw/pQc5Hhk5ZeFl7SDTKbb2LLtHa1R1oJSyhp754mgli0c+DiTHt3+uDIDjlyPesAhyLtpr13Rim72k1oQiY9D1Gt1/ObBQ7xDwfouR5rSm+DfMqEZ5vOYDmWvfSSmVCZdiWjC+G7Sr7UaqriyKuB83433bKnPupa+VvGTpxk1+dzYiLGpXVPQfD0QK7Mafb4VC0L5+A87POj8p5aP6S7oyfwl3agDDjlSR4yoRnCF1Ip/6XG4dZsuJIy94wB6+APofQlVGszM3wdRGq7ctVOtffBcovHcJs+wrYEmP9evfvbjSbTjOeuComubqLJfD8zufzMcapS7gLS9QN57e18xi9PP7VJci50zsOOVKaP1N+7bKuZdqLHaWlWnUmshxdfiYD8Sq9Meu0gB1r6qT76h56CbAuT8Qi532JRWPxh8wwnFTKzFXWESD5Gl8GX4lyGSTPBSwGiz9r5vMUFj8HLMVJC8nC9R98yxBt5NI55dcqBWzG38/v/EzmWhWIFavM/9XxCyZtqVGhmhKuCBOyXj764b8ojddwpoHDE8ComwVmxxaV2Czw+9r3l2HJbzzUPqQKM0Xk2x5z3N+So+X5An6hQuNkm6wuLdfI8rY4phz5SAmIvfw0//3NuzfnXX4Kltc+NVkWBRaZ6hahi7Sdd785sCKwAqiP/zn6T+mmw5sPe8e+O/F36ZbT75wGCyaTGeFWxvF4+u3LzOIT3xVsG3xvMB+URK2vB+VqdZsSoG+otB1GYAYRer3HIFUU6WyqLElpgDiPFhq0T6M7PBbj37oc4Xqat8ju59NgOY3KBLAWKZXJypW5srJSGdLYZblKqodYsYQ1IsrJEY2wwmUBHEOyEolWUvMJwMS7yDf+im9ANbMxe20zkHgj5j/Xdxvi/Sl7haX9NF/ekOLNF6SP7zNpkjscUaHgr/4VXVqzplKgyJPx/yHW31xioySNbEiT4NGBVOkPbN+Mbp+6at/ypYK/t4UfEy/ZXzmHYPhQDvdDGP4QJNOhncsD59cFVtWOLq4B78jB24urb6+uXR+4syIA7QRc52RA3S/ZOF29ujHMFzEY2LXqvn6fAfUquzpt0FtiELAvZYWvxdQC30TgzgFL/9C6taD4oQwpiYr6oVlXqM6rwLG7Ps7CFdiBtnZs/8KVPvbUjNz519auJbQ22HzGQx+jeHtbBnOYLeAfRvEk7wqPRdsSsxmfzeXn6/P53Gz85pgtNFZ0dwlGHFDcjcYzltHwb+LezOIIWmdSOFn77x5PXc7Ax9xRJBnjAHSS94gwHz/h0bC4JMWdmM7LqYOELbPIPtqyBxJ9VwGMOLDvxiBDe5d4Vwt2jt4kiD+uJ+JWcDxgjCKibXw9eMHcJIi+/fO9V56bL2/+siE6UVDwFJ7pt54HM/11AinTcLex2NsgTcp6LxsVKHLyrHxYkcpWks+ul3CE5e58zfQW1IJ1FRk3VFeYVvfmu+C8zN+mzyrFS00hWWE1f6GngL+0INCmMBbMddtXVeuoNSf4ivqpUFrB8+iw2OQZu17Dw2obIo4DL3DaCpGkVK3JrZy8TfWyJVynAxYJLEy2EWacsxoOVJZUHk7Kyp+L4j6g1zZ9v2v/lZ4Oytxa0XyYsu61H0MdRBbEzOHlvq7FMB3Hzj5eXx307+VaAI+m1FfL5FU6vbyyWqYXjJlpPbTuakoPZQZCQYyePKM+pSBHXOITHe+3ZVKFKhY5o6qJgeE1RkTU+TfbpK9wOrklWXuOD9gzKULHfTjibmQ4XlKlEDEmMM26cichOblg2kg+k/bWVx3M5MLkfXo2deU4EO8WYCK4CEFgLyYUsM2U1TbWU4JAj2m1aCYgPGXZVvvleJ9pGqSeGt6SwkKgxbaUhsr52NxaqFtXVVWweM22LIDlSLFcUpmrklTARDCsQpUrqcwp5Ft5HJdYrEhevnmoKY4xjPSMyEzie5gcG92evY1uoNNoVEDenako2vd5aIpMzoPa87Vn75196WVfZvteAngPx8hmmzg5bCOhGL+GSzyH01vm1y52E4fTxL41gIewi278VzTdqoHYS2sta1tQtli2oM85Ch5nyxL6u07VWBRtJrOitTzkU11IZ2+l4MSA45J3wHsZGzheKeztHG8R0T2PVvQsf8wVwVdNVf4FJK9QRCrc4K+e8Z2HKyQLhYuBa66jqbp6A7lIJCQWEYm/gpeC2xkjK5KJSxGluMSaMnRYiRIRl/4LAqnm8voWzl7FOh9990+etGJFtokjETvK+MPlSGVkVc58lIhlF/+/g1xWZJNI3OWi3eUHzGzEk3F32KpSNQvft6V8+5pdC4I4daMWm55QXIA4Y9NwcamxTqQgoQQbaNSqPb3FFLeFMrvAINVVNCRX/876ITY1DpcWO5E+kuyvaNRJCwyzLRSKu7cYWGhI7UhqHsckqPbJcj3+IqLnjzyzVoToHRZOetHpt5CVjbPTrN9k/n6FSv4kzve2lc/PfvXHIxr1mEgxZhUJzmszP5sJvEuRva69yPY78x48kOZtR4Zdw5qzzLMMsFeMqnlZEN85Ma4dn9A/lwVunfaIFsxdYf945GqWPd9B09DIJ/tnDO0HcCjjWcZ96/TOAevn7Zw3vbUC+b2mgxNi54GD/rdl4gfPjGvHz+j/sf7ZTH1fejjLop3aAlHal+P5gk/PJMjj6gc7pl6oeChRDib+XRQaVwOT/4zf+LXtO4m8DKi7dMjBMdp2+s6+5rL1uh3fg83vKk0FJpNK5b9t27MbRKKG7O6o5k1QzCvmLB/NfeaA2MDOG7/8ouOLfvLeZCPIGx0qOnEm9g6j5YCmcv3Mps6Z4JvKjRG8NgObSrrn5d3vmtbvrfICvlnnNU/CGZXF3M6PiWflSzkAa6iCKxTqZQHVrnyZSrkimCKvIJsfGOCLUu6VNCZZcCFtGjzIPRZBJ5EvpKe2g10D8mnyjqy/xZZgvEjL4ut4iaYXX5Gtu1P/j2UBjHP1lZp2dHaZttt+Lndvabyr00PcekSzPqNR8ePFRcrcIkyw5ODCkayY8qcX+Ax7RZ97zOfKBXPPGoBTkSkJtz0nKoosRomXpd8Y6BTrDAGhslDBIAjMnz4LawYGQMZhcyQv/h1tYWtkeYyvuJx2NJvv1ReobNZc1mwLHUZ87C//e3hUihrrJaoSpdJest2WVFypU+srQzLwxugsVe8pz7GAITDa/ge7DVBxq4LV45MVbJXMw+W5JLbqYk+OK2UJNcm/zlCAezkcyVxrozy32mDVNXWogTG2cFax9fVgn2dobU01vzgzQ/kQTWVgzc7c1VAg0KZUW1qUmjqDWdfcqnEuVdYj+dFmeb1PqRA7eTyXSARj7hwwu3LObsOr3NLFAMZhnTJjhQrmYk75n+PuUqVcVVgvMhiDInoocqWr9BKWXFlnVBkqumT2t2BL9gwmc6aFBlcfbaYxw8vl1cjyWUITl6tYvLJ4Jsg40d3qa2pq4BJ8esCSSh+kWgNqx83VBAyormnCKFQR9CoRkcvvFCueqHY7+Znq2fbUx8fIVNLINmZ3W/JUUsqpzFRS/d4+O4nfyci0vlHoXgp/I78vim2WLdzXPlV9RufSLe+0t87e+lT0a2bNu4Zr1wz+dEJ6aurPBFJOJv5Gasr1jFQ+7RHaS+K/w8gM2/PERGDdJb+r0hyOMBUECwpUmsLmRgFfZtfrkeTDciD+EYFMXhVR0EmnVYM97NUL30TTCd1U/I6Dx85M0hXmXD7lK1F7w14eiItwrrk+OC2LeZ9AOMLKziHRFhIy51Gy9i5+vMeIpytQBY/Uii/5jiZw5IKSshPcI3dUd3g8XtnRhevfA/gIdMnyo5cy2Tep1BF2qk35R/TnX/M+CW9OYGgsGpHcoQdIhKnQ7y6panILlzrxFUkKjcuc3kyVm1Qiic2k3Zd1PWJWCov2BoV8Apwakl3nJXA+QAAcoXblwtSt+IM8EvGPJjq96Q8iiXAav5UKO3PVE9T5ePx8qpuM8h7zMZH4mJkCgrqMU6ps8oxUC6U2Y5dW+jG0IrI/eUPY5NekL74EeEqor6gvqyfUF9VXybWmKJAoF02G1DDUl9UT9KLEp3oB1JfVE/QiyabXihlKaoaaoWaoGWqJWqKWqCXFKgNaozOm/oA4+HLwRPDF4KvkGnHs7pLgy8ET5CIp2t2lv4IvwwQab6GYXCT+jteQGu8lE3w5eIJejKTvXig4FBwKDpGBrS79CzIBi80uQWNu4FSISUVZMoDkJhYig8pmxbAlzWRrhRiegI9ehDnrJcd9SkhLFk3R4BmQbZU+py/oS/qK/kR/pr9U/foo5iyc8Z3IqOU80FLDfs7DC51B+MULRgB9+VktA0yYXUs7fGRK7aB2bIg+C+yUNHxmjQnwERkXExsyUFC6K2JDAPeEPcN3YvW/hswNpYaAWdAA2cXEhsz8TKDm4ZA5+1ecqhslbqJLB0L3Caa4QYzcTOwmwFV6GtQ3GSYOAvmzJhh4ludiSt1E9Qm1/Tv+4obYTSxGevZEYHTN37ffsKOiwOkW1I8Jl0WfK5mlxF9hkAQOPpHpXsepAb586OOVkjfrGY8fKg467+2U50gddTjVcdaYrRZJ8/jKCDbCRviCbwHfXvhughHYBkOwhw/To4EA6fLplVlOsCZJ+6trXPgUwLvZP48J7/tW3SLbtL0dngE6CwMQoMImXhsS/v+nwVSB5y9C3kSbktxCFBRYQ7lQSpN2KiAbpYBtqABAhiA0g4a6d4olM0PIkDWQrDygAMqGNIBkyAI8zQRk5zqBDJXUIJV6GzJBSiQQ3FgXaEB2A1AZxM41QDqtACX4oQAw4O9ULSiBDepgBMphJrSqQKiJUPx7khdDOC0pMTPg9VbxEIJU4EApLIMSSCplo2AXDMgeDkZggZwArIAdcBNeAgzZ8A5sVMb9UAzEyxwLJZAiQzRsgUfKpnoI1/pBE2AQCXYgARkygU093vIYmmkVqMENZgjWksraCABYTjAET2EQ1sEYLOS7c3x5AgWFj7mPbnfDtN8jj/D4mHCRSYnIyPBox9sXzdsO22qljbbYbZs9Pr/H8o0gIAVcImEiQLwo6vZ6el04qGMsAJ6EEo+G4BM1Okyi30eHUzsyM0JO+uhIBHNGR2EqG5UIQTehfDLDeGJ166CEiOJQbh4HWK9Th4AQhz47cbsWQaUask2a9bUo1bv0UhNpM4EuDclGnUb23TOS9xIXBrxnmheVZethAvp4xKlOApts0j/HA0leIrxnUrRIkjSSfxgtJiOWNBejuR2h5Sd90TU8UC5umvzuxOpzCnTAM2fqKch8Gimxzpej8bnQ4KogCqrHeGsgglTKpL+UonPASKVzyppq0iJq26+OUHC1FIuGks3XqLHYomVFuQikbXXUcmuuZrW66hs3H03FJj9jf/yn1PlE0Kc2YGGrx0k4+FaOBqeddQ4XD4zvvAsmXKwPvP+NpC65rMlVG33mczI/klNUDt69a65rdoOKmobW93QsGN6mXWu2w3bWnre1+w6mqzjTuznq8u7sa30GTE8E6OdJZL3h8zlDkZlmm2OWHebay+sZn2IlVipVZp4FFpqvvDLxtfaDw/y22Co8UVA0FAPFQjgoDkyThIziYxF2odvpf5ZLECWFQbJhXzAnHkqAEkGceNVq6RkrfD/8+4zY74APfeSIr0TCYYi1wjKrrbLG4iRByWpMZZolvhSdFEu9nlSJnnvhIJpsVIMCdjMlTUzSk5HM4JMVQoghhRyKdVBr3XTXLZPuhRqaVGn1mzXVj689kjE/+8WvOaxFx8DEwsaRg4sHxicgJCImISUjb6rraRhoiLIEezoDfbEtwtcZbPcVuaL7Qy1iOMMeumJDukiATtV9DJvVZgtDi+KaZ/5PQ+wXGShxRj3L5rhDRzTqAzCiUe8Doc8B2bJEfN2QrjoNllmNs5MFeno6p/d3xbL3bNDZ07u2/M6G4oa/fIA1Fezvi2ogEdK6iI3ta2mvF5GYjkMRNQ+moRXUKKjToEmLkvYO00C9kypQaY0mJSUlJVDHUvO1pS9wAwA=) format('woff2');
}
@font-face {
  font-family: 'Red Hat Mono';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(data:font/woff2;base64,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) format('woff2');
}

:root{
  /* Dark scale recolored from a near-black, barely-blue-tinted slate
     (#171a21/#12141a) to an actual deep navy/petrol blue -- same
     lightness steps as before (so contrast against --paper and against
     each other is unaffected), just a real hue instead of "almost
     black". Drives the sidebar, primary buttons, and body text color
     (--ink doubles as the page's main text color, not just buttons). */
  --ink:#17324a;
  --slate-900:#122536;
  --slate-800:#1b3854;
  --slate-700:#28496b;
  --slate-600:#3f6084;
  --slate-400:#8a9bb0;
  --slate-300:#c7cbdc;
  --slate-200:#e4e6ee;
  --paper:#f5f6fa;
  --amber:#e8a33d;
  --amber-dim:#c9862a;
  --ok:#3fb27f;
  --warn:#e8a33d;
  --danger:#e0605a;
  --sidebar-w:264px;
}
*{box-sizing:border-box;}
html,body{height:100%;}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:'Inter',system-ui,sans-serif;
  font-size:14.5px;
  -webkit-font-smoothing:antialiased;
}
.mono{font-family:'Red Hat Mono','Consolas','Courier New',monospace;}

/* Flatpickr's own stylesheet already mutes disabled days by default,
   but something in this page's own CSS/Bootstrap combination was
   overriding that down to plain white text -- invisible against the
   calendar's own white background, rather than the greyed-out look
   every other date picker shows for an unavailable date. Forced
   explicitly here rather than tracked down to its exact root cause,
   since the actual conflict is hard to pin down without live browser
   rendering, and this is the one property that actually needs fixing
   regardless of what's causing it. */
.flatpickr-day.flatpickr-disabled,
.flatpickr-day.flatpickr-disabled:hover {
  color: rgba(57, 57, 57, 0.3) !important;
  background: transparent !important;
  cursor: default !important;
}

/* ---------- Sidebar ---------- */
.sidebar{
  position:fixed; top:0; left:0; bottom:0; width:var(--sidebar-w);
  background:var(--slate-900);
  display:flex; flex-direction:column;
  z-index:1030;
  transition:transform .25s ease, width .25s ease;
  border-right:1px solid var(--slate-700);
}
.sidebar-brand{
  display:flex; align-items:center; gap:.65rem;
  padding:1.15rem 1.25rem;
  border-bottom:1px solid var(--slate-700);
  flex-shrink:0;
}
.sidebar-brand .mark{
  width:30px;height:30px;border-radius:8px;
  background:linear-gradient(155deg,var(--amber),var(--amber-dim));
  display:flex;align-items:center;justify-content:center;
  font-weight:800;color:var(--slate-900);font-size:.95rem;
  flex-shrink:0;
}
.sidebar-brand .name{color:#fff;font-weight:700;font-size:1.02rem;letter-spacing:.2px;}
.sidebar-brand .tag{color:var(--slate-400);font-size:.68rem;text-transform:uppercase;letter-spacing:1.2px;}

.sidebar-scroll{overflow-y:auto; padding:1rem .75rem 1.5rem; flex:1;}
.sidebar-scroll::-webkit-scrollbar{width:6px;}
.sidebar-scroll::-webkit-scrollbar-thumb{background:var(--slate-700);border-radius:4px;}

.nav-eyebrow{
  color:var(--slate-400); font-size:.68rem; font-weight:600;
  text-transform:uppercase; letter-spacing:1.3px;
  padding:1.1rem .6rem .4rem;
}
.nav-eyebrow:first-child{padding-top:.2rem;}

.nav-link-p{
  display:flex; align-items:center; gap:.7rem;
  color:var(--slate-200); text-decoration:none;
  padding:.55rem .6rem; border-radius:8px;
  font-size:.875rem; font-weight:500;
  cursor:pointer; user-select:none;
  transition:background .15s, color .15s;
}
.nav-link-p i.bi-icon{font-size:1.02rem; width:20px; text-align:center; color:var(--slate-400); flex-shrink:0;}
.nav-link-p .chev{margin-left:auto; font-size:.7rem; color:var(--slate-400); transition:transform .2s;}
.nav-link-p:hover{background:var(--slate-800); color:#fff;}
.nav-link-p:hover i.bi-icon{color:var(--amber);}

.nav-link-p.active-parent{background:var(--slate-800); color:#fff;}
.nav-link-p.active-parent i.bi-icon{color:var(--amber);}

.nav-link-p[aria-expanded="true"] .chev{transform:rotate(90deg);}

.badge-count{
  background:var(--slate-700); color:var(--slate-200);
  font-size:.68rem; font-weight:600; padding:.15rem .45rem;
  border-radius:20px; margin-left:auto;
}
.nav-link-p[aria-expanded] .badge-count{margin-left:0;}

.child-list{
  list-style:none; margin:.15rem 0 .35rem; padding:0 0 0 1.15rem;
  border-left:1px solid var(--slate-700);
  margin-left:1.15rem;
}
.child-list .nav-link-c{
  display:flex; align-items:center; gap:.55rem;
  color:var(--slate-400); text-decoration:none;
  padding:.42rem .6rem .42rem .85rem;
  font-size:.825rem; font-weight:450;
  border-radius:7px;
  position:relative;
  transition:background .15s, color .15s;
}
.child-list .nav-link-c:hover{background:var(--slate-800); color:#fff;}
.child-list .nav-link-c.active{color:var(--amber); font-weight:600;}
.child-list .nav-link-c.active::after{
  content:""; position:absolute; left:-1.15rem; top:0; bottom:0; width:2px; background:var(--amber);
}

.sidebar-foot{
  border-top:1px solid var(--slate-700); padding:.85rem 1rem; flex-shrink:0;
  display:flex; align-items:center; gap:.65rem;
}
.sidebar-foot .avatar{
  width:34px;height:34px;border-radius:9px; background:var(--slate-700);
  display:flex;align-items:center;justify-content:center; color:var(--slate-200); font-weight:600; font-size:.8rem;
}
.sidebar-foot .uname{color:#fff; font-size:.82rem; font-weight:600;}
.sidebar-foot .urole{color:var(--slate-400); font-size:.72rem;}

/* ---------- Main ---------- */
.main{ margin-left:var(--sidebar-w); min-height:100vh; display:flex; flex-direction:column; transition:margin-left .25s ease; }

/* Desktop collapse: toggled via body.sidebar-collapsed. Scoped to desktop
   widths only so it never fights the mobile transform-based show/hide. */
@media (min-width: 992px){
  body.sidebar-collapsed .sidebar{ width:0; border-right:none; overflow:hidden; }
  body.sidebar-collapsed .sidebar .sidebar-brand,
  body.sidebar-collapsed .sidebar .sidebar-scroll,
  body.sidebar-collapsed .sidebar .sidebar-foot{ opacity:0; pointer-events:none; }
  body.sidebar-collapsed .main{ margin-left:0; }
}
.sidebar-brand, .sidebar-scroll, .sidebar-foot{ transition:opacity .18s ease; }
.topbar{
  background:#fff; border-bottom:1px solid var(--slate-200);
  padding:.75rem 1.5rem; display:flex; align-items:center; gap:1rem;
  position:sticky; top:0; z-index:1020;
}
#sidebarToggle{
  border:1px solid var(--slate-200); background:#fff; border-radius:8px;
  width:36px;height:36px; display:flex;align-items:center;justify-content:center;
  color:var(--slate-600); flex-shrink:0;
}
.search-wrap{position:relative; max-width:360px; flex:1;}
.search-wrap input{
  background:var(--paper); border:1px solid var(--slate-300); border-radius:9px;
  padding:.5rem .75rem .5rem 2.25rem; font-size:.85rem; width:100%;
}
.search-wrap input:focus{ border-color:var(--amber); box-shadow:0 0 0 3px rgba(232,163,61,.15); outline:none; }
.search-wrap i{position:absolute; left:.75rem; top:50%; transform:translateY(-50%); color:var(--slate-400);}

.topbar-icon-btn{
  width:38px;height:38px;border-radius:9px; border:1px solid var(--slate-200);
  display:flex;align-items:center;justify-content:center; color:var(--slate-600); position:relative;
  background:#fff;
}
.topbar-icon-btn .dot{
  position:absolute; top:6px; right:7px; width:7px;height:7px;border-radius:50%;
  background:var(--danger); border:1.5px solid #fff;
}

.content{padding:1.75rem;}
.breadcrumb-row{display:flex; align-items:center; justify-content:space-between; margin-bottom:1.25rem; flex-wrap:wrap; gap:.75rem;}
.page-title{font-size:1.35rem; font-weight:700; margin:0;}
.page-sub{color:var(--slate-600); font-size:.82rem; margin-top:.15rem;}
.page-sub a{color:var(--slate-600); text-decoration:none;}
.page-sub a:hover{color:var(--amber-dim); text-decoration:underline;}

.btn-brand{background:var(--ink); border:1px solid var(--ink); color:#fff; border-radius:8px;}
.btn-brand:hover{background:var(--slate-900); color:#fff;}
.btn-outline-brand{border:1.5px solid var(--slate-600); color:var(--slate-600); border-radius:8px; background:#fff;}
.btn-outline-brand:hover{background:var(--paper); color:var(--ink); border-color:var(--ink);}

.stat-card{
  background:#fff; border:1px solid var(--slate-200); border-radius:12px; padding:1.1rem 1.2rem;
  height:100%;
}
.stat-icon{
  width:38px;height:38px;border-radius:9px; display:flex;align-items:center;justify-content:center;
  font-size:1rem; margin-bottom:.75rem;
}
.stat-value{font-size:1.55rem; font-weight:800; letter-spacing:-.5px;}
.stat-label{color:var(--slate-600); font-size:.78rem; margin-top:.1rem;}
.stat-formula{color:var(--slate-400); font-size:.65rem; margin-top:.3rem; line-height:1.3;}
.stat-delta{font-size:.74rem; font-weight:600; margin-top:.5rem; display:inline-flex; align-items:center; gap:.25rem;}

.panel{ background:#fff; border:1px solid var(--slate-200); border-radius:12px; }
.panel-head{ padding:1.05rem 1.2rem; border-bottom:1px solid var(--slate-200); display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:.6rem;}
.panel-head h6{margin:0; font-weight:700; font-size:.92rem;}
.panel-body{padding:1.2rem;}

table.admin-table{font-size:.83rem; margin:0;}
table.admin-table thead th{
  background:var(--paper); color:var(--slate-900); font-weight:700; text-transform:uppercase; font-size:.68rem;
  letter-spacing:.6px; border-bottom:2px solid var(--slate-300); padding:.7rem 1.2rem; white-space:nowrap;
}
table.admin-table thead th.sortable{ user-select:none; }
table.admin-table thead th.sortable:hover{ color:var(--amber-dim); }
table.admin-table thead th .sort-icon{ font-size:.65rem; vertical-align:middle; }
table.admin-table tbody td{padding:.75rem 1.2rem; border-bottom:1px solid #f0f1f5; vertical-align:middle;}
table.admin-table tbody tr:last-child td{border-bottom:none;}
table.admin-table tbody tr{transition:background-color .12s ease;}
table.admin-table tbody tr:hover > td{background-color:#fdf3e2;}
.status-pill{
  font-size:.7rem; font-weight:600; padding:.25rem .6rem; border-radius:20px; display:inline-flex; align-items:center; gap:.35rem; white-space:nowrap;
}
.status-pill.on{background:#e8f7f0; color:var(--ok);}
.status-pill.pending{background:#fdf3e2; color:var(--amber-dim);}
.status-pill.off{background:#fbeceb; color:var(--danger);}
.status-pill .dot2{width:6px;height:6px;border-radius:50%;background:currentColor;}

.cell-user{display:flex; align-items:center; gap:.6rem;}
.cell-user .av{width:30px;height:30px;border-radius:8px; background:var(--slate-200); display:flex;align-items:center;justify-content:center; font-weight:700; font-size:.72rem; color:var(--slate-600); flex-shrink:0;}

/* ---------- Forms ---------- */
.form-section{border-bottom:1px solid var(--slate-200); padding:1.25rem 1.2rem;}
.form-section:last-child{border-bottom:none;}
.form-section .fs-eyebrow{font-size:.68rem; font-weight:700; text-transform:uppercase; letter-spacing:1px; color:var(--amber-dim); margin-bottom:.9rem;}
.form-label{font-size:.8rem; font-weight:600; color:var(--slate-600); margin-bottom:.35rem;}
.form-control, .form-select{
  border:1px solid var(--slate-300); border-radius:8px; font-size:.86rem; padding:.5rem .7rem;
  background-color:var(--paper);
}
.form-control:hover, .form-select:hover{ border-color:var(--slate-400); }
.form-control:focus, .form-select:focus{border-color:var(--amber); box-shadow:0 0 0 3px rgba(232,163,61,.15); background-color:#fff;}
.form-control[readonly], .form-control:disabled, .form-select:disabled{ background-color:var(--slate-200); color:var(--slate-600); }
.input-group-text{background:var(--slate-200); border:1px solid var(--slate-300); font-size:.82rem; color:var(--slate-600);}
.form-hint{font-size:.72rem; color:var(--slate-400); margin-top:.3rem;}

/* ===== Searchable dropdowns (Tom Select skin) =====
   Any <select class="search-select"> is enhanced by enhanceSearchSelect()
   in custom.js into a type-to-filter dropdown. These rules re-skin Tom
   Select's own classes to match .form-control/.form-select above, so it
   reads as part of this app rather than a bolted-on widget. */
.ts-wrapper.single .ts-control{
  border:1px solid var(--slate-300); border-radius:8px; font-size:.86rem; padding:.42rem .7rem;
  background-color:var(--paper); min-height:calc(1.5em + .5rem + 2px); box-shadow:none;
  /* Single-select never needs to show the selected item AND the type-to-
     search box at once, so wrapping is turned off -- without this, Tom
     Select's own default (flex-wrap: wrap, meant for multi-select tags)
     pushes the search input onto its own second line the moment the
     control is clicked, which grows the control's height and shoves
     everything below it down the page. */
  flex-wrap: nowrap; overflow: hidden;
}
.ts-wrapper.single .ts-control:hover{ border-color:var(--slate-400); }
.ts-wrapper.single.focus .ts-control{ border-color:var(--amber); box-shadow:0 0 0 3px rgba(232,163,61,.15); background-color:#fff; }
.ts-wrapper .ts-control input{ font-size:.86rem; color:var(--ink); }
.ts-wrapper .ts-control input{ flex:1 1 auto; min-width:0; }
.ts-wrapper.single .ts-control .item{ color:var(--ink); }
/* A long selected value (a long customer/business name) truncates with
   an ellipsis instead of wrapping onto a second line -- wrapping here is
   what grew the control's height in the first place. */
.ts-wrapper.single .ts-control > .item{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100%; }
/* While the dropdown panel is open, hide the selected-item text so the
   search input has the full width to itself (exactly like a native
   <select> clears to let you type) -- it reappears once a pick is made
   or the dropdown closes. */
.ts-wrapper.single.dropdown-active .ts-control > .item{ display:none; }
.ts-dropdown{
  border:1px solid var(--slate-300); border-radius:8px; margin-top:4px;
  font-size:.86rem; box-shadow:0 8px 24px rgba(23,50,74,.14); z-index:1060;
}
.ts-dropdown .ts-dropdown-content{ padding:.3rem; max-height:280px; }
.ts-dropdown [data-selectable]{ padding:.45rem .6rem; border-radius:6px; color:var(--ink); }
.ts-dropdown .option.active{ background-color:var(--amber); color:#fff; }
.ts-dropdown .no-results{ padding:.5rem .6rem; color:var(--slate-400); }
.ts-wrapper.single .ts-control::after{ border-color:var(--slate-400) transparent transparent transparent; }
.ts-wrapper.disabled .ts-control{ background-color:var(--slate-200); color:var(--slate-600); }
/* Compact variant for product dropdowns inside line-item tables, to
   match the tighter .line-item-row sizing further down this file. */
.line-item-row .ts-wrapper.single .ts-control, .quotation-line-row .ts-wrapper.single .ts-control{
  padding:.32rem .6rem; font-size:.82rem; min-height:calc(1.3em + .4rem + 2px);
}
.form-actions{padding:1.1rem 1.2rem; display:flex; flex-wrap:wrap; justify-content:flex-end; gap:.6rem; background:var(--paper); border-top:1px solid var(--slate-200); border-radius:0 0 12px 12px;}
/* Pushes a destructive action (Cancel/Delete) to the far right on wide
   screens, separating it from the other buttons. On narrow screens,
   flex-wrap above already moves it to its own line, so the extra push
   is dropped -- keeping it would otherwise still try to right-align
   that single button relative to whatever fit on the line above it. */
.form-actions-push-right{ margin-left:auto; }
@media (max-width: 767px){ .form-actions-push-right{ margin-left:0; } }

/* Notification toasts: solid Bootstrap contextual backgrounds (not just a
   tinted icon), sized up slightly from Bootstrap's defaults. */
.app-toast{min-width:340px; max-width:420px; box-shadow:0 8px 24px rgba(0,0,0,.16); border-radius:10px;}
.app-toast .toast-header{background-color:transparent; border-bottom:none; padding:.75rem 1rem; font-size:.9rem; color:inherit;}
.app-toast .toast-header i{font-size:1.05rem;}
.app-toast .toast-body{padding:.35rem 1rem .85rem 1rem; font-size:.88rem; line-height:1.5;}
/* Bootstrap's own standard soft-alert palette (bg-subtle / text-emphasis /
   border-subtle values from Bootstrap 5.3's alert component), applied to
   the whole toast card rather than just a border accent. */
.app-toast.toast-success{background-color:#d1e7dd; color:#0f5132; border:1px solid #a3cfbb;}
.app-toast.toast-danger{background-color:#f8d7da; color:#842029; border:1px solid #f5c2c7;}
.app-toast.toast-warning{background-color:#fff3cd; color:#664d03; border:1px solid #ffecb5;}
.app-toast.toast-info{background-color:#cff4fc; color:#055160; border:1px solid #b6effb;}
.app-toast.toast-primary{background-color:#cfe2ff; color:#084298; border:1px solid #b6d4fe;}
.app-toast.toast-secondary{background-color:#e2e3e5; color:#41464b; border:1px solid #d3d6d8;}

.form-check-input{
  width:1.15em; height:1.15em; margin-top:.15em;
  border:1.5px solid var(--slate-400); background-color:#fff;
}
.form-check-input:hover{ border-color:var(--slate-600); cursor:pointer; }
.form-check-input:checked{ background-color:var(--amber); border-color:var(--amber-dim); }
.form-check-input:focus{ border-color:var(--amber); box-shadow:0 0 0 3px rgba(232,163,61,.15); }
.form-check-label{ cursor:pointer; }

.line-item-row .form-control, .line-item-row .form-select{padding:.4rem .6rem; font-size:.82rem;}

@media (max-width: 991.98px){
  .sidebar{ transform:translateX(-100%); }
  .sidebar.show{ transform:translateX(0); box-shadow:0 0 40px rgba(0,0,0,.25); }
  .main{ margin-left:0; }
  .scrim{ display:none; position:fixed; inset:0; background:rgba(10,12,18,.45); z-index:1025; }
  .scrim.show{ display:block; }
}


/* ===== Auth pages (login, password-reset) ===== */
body.auth-body{ background:var(--paper); }
.auth-wrap{ min-height:100vh; display:flex; align-items:center; justify-content:center; padding:2rem; }
.auth-card{ width:100%; max-width:400px; }
.auth-logo{ display:flex; justify-content:center; margin-bottom:1.25rem; }
.auth-logo img{ height:110px; width:auto; }
.auth-card h2{font-weight:800; font-size:1.5rem; margin-bottom:.25rem; text-align:center;}
.auth-card .sub{color:var(--slate-600); font-size:.86rem; margin-bottom:1.75rem; text-align:center;}
.auth-divider{display:flex; align-items:center; gap:.75rem; color:var(--slate-400); font-size:.75rem; margin:1.25rem 0;}
.auth-divider::before, .auth-divider::after{content:""; flex:1; height:1px; background:var(--slate-200);}
/* Google's reCAPTCHA checkbox has a fixed native width (304px) that
   can't be resized with normal CSS width/height, since it renders
   inside a cross-origin iframe. transform:scale() is the standard,
   reliable workaround — it visually scales the whole widget rather
   than trying to resize its internal iframe content. Tuned to look
   proportional against the .auth-card's 400px width; adjust the scale
   value here if the card's width ever changes. */
.step-dots{display:flex; gap:.4rem; margin-bottom:1.5rem; justify-content:center;}
.step-dots span{width:28px; height:4px; border-radius:4px; background:var(--slate-200);}
.step-dots span.active{background:var(--amber);}


/* ===== Settings tiles ===== */
.settings-grid{ display:grid; grid-template-columns:repeat(3, 1fr); gap:1rem; }
@media (max-width: 991.98px){ .settings-grid{ grid-template-columns:repeat(2, 1fr); } }
@media (max-width: 575.98px){ .settings-grid{ grid-template-columns:1fr; } }
.tile{
  background:#fff; border:1px solid var(--slate-200); border-radius:12px; padding:1.4rem 1.3rem;
  text-decoration:none; color:var(--ink); display:flex; flex-direction:column; gap:.9rem;
  transition:border-color .15s, box-shadow .15s, transform .15s;
}
.tile:hover{ border-color:var(--amber); box-shadow:0 6px 18px rgba(23,26,33,.06); transform:translateY(-2px); color:var(--ink); }
.tile-icon{
  width:44px; height:44px; border-radius:11px; display:flex; align-items:center; justify-content:center; font-size:1.15rem; flex-shrink:0;
}
.tile-title{ font-weight:700; font-size:.95rem; display:flex; align-items:center; justify-content:space-between; }
.tile-title .bi-arrow-up-right{ font-size:.8rem; color:var(--slate-400); }
.tile-desc{ color:var(--slate-600); font-size:.8rem; line-height:1.5; }
.tile-foot{ font-size:.72rem; color:var(--slate-400); display:flex; align-items:center; gap:.35rem; margin-top:-.3rem; }


/* ===== Sales report ===== */
.ref-link{ color:var(--amber-dim); text-decoration:none; font-weight:600; }
.ref-link:hover{ text-decoration:underline; }


/* ===== Sale detail (single-entry receipt view) ===== */
.receipt-head{display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:.75rem; padding:1.2rem; border-bottom:1px solid var(--slate-200);}
.receipt-meta{display:flex; flex-wrap:wrap; gap:1.75rem; padding:1.2rem; border-bottom:1px solid var(--slate-200);}
.receipt-meta .mi-label{font-size:.7rem; text-transform:uppercase; letter-spacing:.6px; color:var(--slate-400); margin-bottom:.15rem;}
.receipt-meta .mi-value{font-size:.88rem; font-weight:600;}
.totals-row{display:flex; justify-content:space-between; font-size:.86rem; padding:.3rem 0;}
.totals-row.grand{font-weight:800; font-size:1rem; border-top:1px solid var(--slate-200); margin-top:.5rem; padding-top:.7rem;}


/* ===== Bottle tracking (tabbed inventory workflow) ===== */
.bt-tabs{ border-bottom:1px solid var(--slate-200); margin-bottom:1.1rem; flex-wrap:wrap; }
.bt-tabs .nav-link{
  color:var(--slate-600); font-size:.84rem; font-weight:600; border:none; border-bottom:2px solid transparent;
  padding:.6rem .9rem; border-radius:0;
}
.bt-tabs .nav-link:hover{ color:var(--ink); }
.bt-tabs .nav-link.active{ color:var(--ink); background:none; border-bottom:2px solid var(--amber); }
.bt-note{
  background:#fdf3e2; border:1px solid #f3ddab; color:var(--amber-dim); border-radius:10px;
  padding:.7rem .9rem; font-size:.8rem; display:flex; align-items:flex-start; gap:.55rem; margin-bottom:1rem;
}
.bt-note i{ margin-top:.1rem; }


/* ===== QC results table (pass/fail highlighting + header tooltips) ===== */
#qcTable th{ text-align:center; white-space:nowrap; }
#qcTable th a{ color:var(--slate-600); font-weight:700; }
#qcTable th a:hover{ color:var(--ink); }
.qc-threshold{ display:block; color:var(--ok); font-weight:400; font-size:.65rem; margin-top:.1rem; }
.qc-expiry{ display:block; color:var(--slate-400); font-weight:400; font-size:.65rem; margin-top:.1rem; }
#qcTable td{ text-align:center; white-space:nowrap; }
#qcTable td.qc-pass{ color:var(--ok); font-weight:600; }
#qcTable td.qc-fail{ background:#ffe5e5; color:#c62828; font-weight:700; }


/* Toast contextual colors + sizing now live in common.py's CSS_BASE
   (see .app-toast rules there) so they're defined once, alongside every
   other shared design-token-based style, instead of duplicated here. */

/* Sale line-items table (add-sale.php): columns are set as percentage
   widths, which on a narrow mobile screen shrink the Qty/Price/Discount
   inputs down to a few unusable pixels each — the number spinner
   arrows alone can be wider than that. The wrapping .table-responsive
   div is already meant to handle overflow via horizontal scroll, but
   never gets triggered without a minimum width forcing the table to
   actually overflow instead of just shrinking every column to fit. This
   keeps every field a real, tappable size on any screen, scrolling
   sideways on narrow ones rather than squeezing down. */
#lineItemsTable { min-width: 640px; }
#lineItemsTable .qty,
#lineItemsTable .price,
#lineItemsTable .disc { min-width: 80px; }

/* Sales-restricted dashboard's target donut charts: 140px on desktop,
   shrinking on mobile where that size reads as oversized relative to
   the surrounding text — Chart.js's own responsive:true (the default)
   resizes the chart to fill whatever width this wrapper allows. */
.target-donut-wrap { max-width: 140px; margin: 0 auto; }
@media (max-width: 767px) {
  .target-donut-wrap { max-width: 90px; }
}

