/* Source Sans 3 — base64 self-contained font, shared across all pages */

        /* Source Sans 3 web font — base64 embedded for self-contained deployment */
        
        /* Source Sans 3 (Trapeze brand typeface) embedded as base64 so the app is
           fully self-contained and works with no network/font-CDN access. Latin subset,
           weights 400/600/700/900. */
        @font-face {
          font-family: 'Source Sans 3';
          font-style: normal;
          font-weight: 400;
          font-display: swap;
          src: url(data:font/woff2;base64,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) format('woff2');
        }
        @font-face {
          font-family: 'Source Sans 3';
          font-style: normal;
          font-weight: 600;
          font-display: swap;
          src: url(data:font/woff2;base64,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) format('woff2');
        }
        @font-face {
          font-family: 'Source Sans 3';
          font-style: normal;
          font-weight: 700;
          font-display: swap;
          src: url(data:font/woff2;base64,d09GMgABAAAAADzsABEAAAAAkvAAADyHAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUYagR4b0nockTYGYD9TVEFURACEWhEICoGTfPRIC4UKAAE2AiQDihAEIAWFQAeNUQwHG4N/JcrtE8XtALyve1nHZBybAN2Jyki6R4xCUq45b/b/ZyQdMdbG1wZcnKr1UGQ7IarupPXJ0lqqKmnV0O7m40wSZtymJnU5MuSeTX01PkJGdx4oTrj6WaPvGjIJGaYfzMnaVHyjUXzBh3iR95vk+z6Xfgqs/0C+5EAKzDbJpBftwQ8DW8HRjqwoIYkFBULClkQFk/7YcPR1KMX3SfsVHS4C4xY+qua8RNR+vT377u5zANiGFZACLI9ogSWWjwMqH9apCIWOwCG+n+e3+efc93iEiIBIiQwQQZ1iJlYvcK7KrJXbXIZR2/+rSFfd/D82PnfPm21XNASDJWlwAo3wX2/ASwRqhufn1lM/6DliwCKLdbAoFmwwSqIUmTBiygkYdyiogHVpJBdWX4VetZ6XoVep0Zy5ESrXkXAMHq8b579lLcc/H/eh576fSTCgoQSjxW0R3XbhnbBEFVq0Wus7XNPCJU0udHkqINmNjZ/s6mZE2VcouT/3U99Kt5sw876I+wRUeEn8+rWyeyDQbyenUnFHwuViLFDD7vzjADnijZ21AUYFgAXw/6fO967D1mHpshMME9Dc6w7MIxEFwd9fdkhW6FknK/KrQirEw9z+GA9R/WbJQ9YSAqSw3aupkHRsKPy6KyTbiApfNVWErTCyDf4N4P1/delXyvohdhDAspJzCca+vVOH/YBCzPKdiXMN6EnZ0KUk0yn1XASAUM5JCDWp1+1gYsqf/TNyR0srH3Ztbyt8ng858NVTx4zMjAxnuma21V0zmpXmkqRLUbsfdvfuPiS1RvobSRfkFINuHWIEyMjQZoZPsAExNIBnYwNkwiJghsAAABOtTngJzy3TMAwEm6eHqF/7tDuvb442NAEAR0I94bYSY1P+6m/o/7kN/eMNgkpFIbqTd4kwqCIcocTyYRnJwkbIuNy39mpnE3O50P4oIBAuQkboCEtz8JL9PzQBVkBYskCqwpIkSniLqIgVsURhUqXqfdn3VThfYWoyZnpBSQeup5h+QWWl7oaRi979PdbjKGWUUkRERIILElyQIO77/Nrn9C3WzmSwEeS4FXFt5eOrJtbmUO5EKPPDoBYH0fuGNbIYTtsOJuIxf+APTbb/sypAOzADjV78dXmE8smQ/4XyRZ/7gfJtY0goMQBB8HEgkDozsuOHa3zzIxCYAtCNoGODyjAq1DCO6GGMTCHCFhEIhQqFwkVC0WKhRMlQms6QhQXK0gPqow/UzwAoWy6UrwAqVgpVqISqDYVqjITGGQdjg8qoqJiiINDJV5/igL5F/c/5ZLhg10+f0H8k10P5rsslkDjXUcD/44OgsSZ9cWrW/d7+Ax8XaI75VXriqTvxhPcPZjtS0UCDatBnNbD5A9tkyQYbfI5A8Wa+iST34n2EYR/wACxYX9UP5OdhzB6YRGLytyE6Yc33V8d7jpAPSwJufQUkp72JZ4jonvl0CZLuTTUYAAG3ngq42Rn/0Bx/d8xcO/DuTX/dzz10WCzex1LycY9Wbc9GzwlppOLDagFKOwQq+VLjnm/PrImuOWxVmsyzwAY77UYwqiZEE5Z50AK0DSg7Xc0yDcRLz/00sYAjGSXgROxFwAMEiRvfMr+KDXZhqcLSzjRLFQ1JCpGZntAgnWZlzUOFcddKj8Ehca4wiGtDJe9dKByu4yrqe8DeHYD+iSUxkU97O0lus/op3gJHOCBQzG1PulcZgCy3s/6vCCgCM6ysr+pE6xzXWvMvUWOQ0NDKn9qcnWpjIMC/Pr/leY5vjSwWgPVvYYjiF3qIBuw75HkkDDCljdh+Gbwjjp9RCHprVm3Fv2wFL5lqLLTISqustgbBxcZGKCigTJkoNWrQIZrNLmsWu6wZdlmzuG9NGztnK7hU6W+qI+55fSm/gYz3DulFf1A94PeXOsK6s/QeOHC8fQ04KPVPCnzV3HvlfnwdZHMsiN3j5N/A8MUNtUN/ATge9EgEuglrP6N51O7mhf6D12w3T1SCSJZj8BUFCZLxzhDRovVoXpq/QDLAQPuvXcr6hNHxWqk0bPGdNUf7cu33cdwOycZ0VjM0EZ/QUD9XLRMVAfH5jbFT1cTxwODVSeMLERYvercqRxw5iHH5JSPI0yNDfigQ657XljElPst1mqKivcdSKME3B5IPlQC6j4CoWWJwr7S2r2A54hEA0BQcfY/BFoUQEaXLkKmxK+BCLOpuQonw5Ph4Rm41sgwHZZRJmFEHCVgGuBm2qXX0jongRBMOTZp40nWkX6K+M58vBNjtN3JSruSW09I7SwO+7PFjcOslYE0aPTOcJaCaiRxdY+p1mRYtXwiVDs2CuFKcdiDgt4eejFJl5ToP2NkxwAtl+zWYQZ0vh45l/YCUoAEi1aiKzyoo6B8UMDRn2y0wjI9khHEhkK9qFdelixe/eaFlhU9ERk7LiYE3HwVqtWozx1z/+d98iy2x1DLLrbDWOuttttX2rFEAhIIVKzb4ryuJyCgyE5AbQ2vWnIxmMB5vs+JjIgVGq3XrjI73VSG3GUP/G9d8Y1lsxBJjW2rEMmcjMrS2hxNrjAcSQT9gaxHr0Tdf74sfTJbXgaCeNMbTCtZL+AckKAETt5mU7u7ZPHtDs/j3nkO1DslG5CIcSeVKRDFrJkoIp9VozT6WB74LHWo1qxKUiCLBpVNvm2pYrF2W82xqC5JYlRg1w7TZKWwsekuWIxD4ibihRx2EfxY6Fv5oAPqtJrSW04E39v6dJKSPLKpDp1NhldSzekaw8pTSodWJTsfL88cCB89F6T4NJN0Q0z6jAASe79FCrCr1BTp7pfoSDOup5ClnL+vfI/ORdyNqxdrRoGKw+Wz71kWK6G4p+NuAgnVU3mJKVSfgPkLOchzSm0uq6lbiLBe7eWmssTgYGadmVTDZ9B7NT3FRzD4Q7x0XJ/4OcWGgIQL6novFIjde+pmhs29vCuBezatAqckw8T17cB+7ixnuqgz10n7qLyblsj3ZEXZirX6GGjnqcfqEdqK0ghCjFEQYXSmlCAbq5j1yQ/+Co8JchpcGleQ1jkoOXcvws4Upph3JoSYM5GHvXTvaM9OHBCAeBeBEQI0EuGEioS37EkbQOVPKSPH3qqFEx6dQ9ZFr+eq3dGltqeXx7ndXtv7azE+6AHPSHg4Bs/Xh2VXQZ2T+W19E/xf9RP19uBwUUxw5myDOAQiIfFnmvcF6PATo+KEyGYlRRErGY3p2aI+lIfROFaxq1bm14ndyETVhgLZoKkJQpLVG4FESzKRCVEnSqfqPaq1eBvmXCOWwojg/XMwHmwuKpOzA1Yx+Nf2tg7YAQhIimpdDn+nLdkQNyVwz9JVsmUvhvhArrdYX66OB7K7JckV90z6R6CheuMk/DcxRnc5/3vJlDULMyz23XKhLxVQauRAr6k14qFif644CiO4DTYb2xued6QAY8K+tECAYoB0PizUhDjEpPiUNER09OSNP9nzFcZLAIlA3+eIUqdRDtREGGGmUXGOMk4/oiSDYaDQKBwfFipUOhIQoYmIUCQkhO3asSElxyMg4kpNTvKbJQEnEnoQK4ZAsahpIy5qOLUcselxOLWZgvE1nLmiugDqiuUHuaCY2PPB4YnjR8ubAh4YvAb/k8xeCLZROGEpUBYnSZ4YuOLqCiOVHLUsfRF8DoUEGs5UtD1f+gFZArChpxSqhqheWasMwhhtBoEYNJ2o3S62xrI0Do1lMmpJx7/EZKXqkvSrzYO7mm9wC95zku+tAjQwlMpQunfPjjAvO7jJod65ub8PueNji2Nnm2Nnh2Nnp+NjtuNnrdHTQ8XKIfMdzLluljIUl8oOIsVh1/lNI4wKD8FgD9MHDQwMNSvZkrAAYQY2NEBHgACMx+AAVBoMgQH8SNgAwkBgLLuRS4J4oZU2QrQ1O5LJ65io00Af7Qg4RDjgIPodHbiEncwAM1HDnlO6NGOcVDvIfDwYNbfAtxO99DP9Z77tpg3pDpeiVwHdPXbdPo4kKZUNSbDJaPvLUmmmW2erUa9CoSbMWO73w0iuvEwDKE4gxi9hsanXU6sUHDdQaayizI3WRlhqemZFZFbPR6tDqEw1ojSVNQXNFS4QxK4mrCxqc29C14ngHJSuXzVkuD3mkaY0Azdt1inXT9MRRt0C/KdatzCTMWlgoLrArxe1AHRTUNSjrEWwVMOIJqSENEM4ybFzKAxS4I2IECOQg7SCMAW4QFC260wSlEWQFuAAV2cgcG64R0YmAE8v+xTACCES0EZpLSBKEQiiEzs8mkYO+gVs9BnmDzS9bgwlAcGCrc+Gw2Rgfw42BhpKEAILyHYJqwD2/z2fTdQOvviwTO1g4BCSUaAlPKVMnLJbhjV79x0LPs6h87SkTv93Lzmp3yB7bbLDKEvO0qtduuolqDbfKcu2a1IoLqWJnpCYjwEJRCwehBDlIsFe/ffXeS4/7u/Cay2HDxO7WPrHrFU/qYplqHK1W29np/dnHHLALJugmhep2Ickb/r10bKKR9GBJfRrxeOfWgy6fAIGdesFNnwS25i70yUlRh82pxcFpoy6e1FScR/xcc90ScL51qXFmQw+ghIWYZmyRICe+N/EuMiwkk+6MRkNK4KZayQhFqfm40YuQqgMqUmtE4Pc1V6QA0WIFS5QsTJo0kTJ0ZmZhESNLD7H66CNBPwMkypYrRb4C6YqV6qRCpa6qDZWpxkjdjTNOTwToBDohwHQdiQ6LlePVyGxRuJ8rRri73JvzB9BvUC0DNgKSWwCMATBJ0CcPyrRAc/B3cdEYEnbUNEw8eMKRMlCP2SB21V2Rv3tk1xxzwC5brLPCIv9pNttU440yqM+/a7dWDVKqBbhZ6SlJ8DCQYJTHapH7+gwC/PY51z5767mHbrvqvJOO2GeHTdZY1oEWmKMx12aabGyuobVzOYzzNmLTmNT0MLU1zeOLaHtbY2kt9nVfPM4DkAmwg8MEq6eu9gJSP9B7EITddbNyVgNQySan3MbFhxr/SCNBShCSHEU9rA0VTUhJQYIBf0LIpHMY3aotTYQPutBKhhcBWnTE0h0vcTiW4CL8gNK7v6806fxYWATw2gO57EEs9hD+EmYR3OSOX9vP87hwuFQxOVw4hhIBRVuhtL7VE4CPuLD9pssx1Z6TSaaG3ycSWfBtO4Xw0ZZ/A2bjM2+wm7HRwBWzGl/zuz/nbPr+s+j3lOaHHv8Z7HOQ8fb1uCDprbl9EbMdEf6+/+cj8OO0F96gWV1kEEJEVq1KpS3JnYgrWZ01AP2v1gRsyM/OPGue7S+tj1cfAx7Vj+rz8jlwio/v+HZivTxplXxmgtYpN4i3NLl+n0GREBw6BuGh1s7QGotqOxnCdRi8dfxK+H4JPZtE1+6Ek0457YyzzjnvgosuuewKgkAIPPYIYoBKL574KISaBPIHAgxCoHYXgMBER0EqSAwEGIjANA5prd2Vg++9JwiL5YIFBsu900owRsBAtLOQa6YQ3FVMXsppQaJrw79+zXU33HTLbXfcdc9Dj9z3AEEZbwZwVhuezbbgZxbyfCo2KKaMAYoEPPSJeGhzn+TjSYKrgIKBQ0RGxcTFJyQmJVdJRcvAFNlUeyzBQ9gDzd+r1GE3e1pTcVzUgYGRmsf9NfzF0UrQjbc8XBbFkvxYNJAbJQE8dhTKBkZEx91vMBJZg5DoPXRza+NRS2Vxzuh7uTGhTJzdSxL5HSQ8ErEu3JBA9Iqwg0noTEZvCkqzwaB2MYJ6vC/43p9FT01OjB+3CEQiKdU4QbiWiNaUAwko1fWupL2cwSMkpaKRz5VnndAtCcITEkv3Zoy/q0lO198LCvEEM4uTqoteBspTblhbTWPEPKeaP2d6FNAPxpVcFnAQ+xp0rdzlgElINXg3ZDYUZyjVUBdDvQwNNJRnqNzQMMEa4ePpeDYXiiu3SSW9MBRtl4NJiGVNbKD1IkWlKFIOAQkNq9bfEwY2Dh4BEQkZBSU1DR09Y4jQc8rUFCUmxLdVQfykDwlRwvQ1KCZW5qos75HmL8TnlvQxE6SykaErO1l6U+pnII3B8ugVKeei2ggeCBk/bLXAfumt5x667arzTjpinx02WWOZBeZoNNNkY9UY0KvTMhlJET5OZloKIhw0BChwS5GGv7776LWn7rvpsrPaHbLHNhusQnBgbpqDEOnh9vrKo0WLm3iXvm2SbSKjFoyICI0aMTIREfKhqzyIARERGtWSZfSGnwYNGlYzlRUdYGQiImQlOirhJFR4FHEKCRV2Zx2NowcEEXA4HG7QXGbqLU4hoVeycEtqcFrlKmmPxPxMVp6V7W02vzsjqopURIa94vmNfJ49sUA5tazA0v1bgqzNO25QuiiKoilC6NpgG1AAsOBuf4MFNP+l8fcjqK7SvAOeC8jHaQyMwYIZDxJgwJJMOGbf72colOA3tbgU0Ilul1fzDRAggEzdpcBK5QNCKrvRJe7nXSMSi5iHIJF66Ge4UfY75Z5X/mFHdJd2bDd3+yBFU1zK8XDfuZQ3yieNUqPW6DQGjY8mWBNDWaPVaeu0DTqxzk6xzP9hzVMws576G2GBA06773Ud/B0v3TxQB8WZpevxer7s5/XrL/0P/A78CMDNwK3A6SD7NWE0uwUAUsfpuZzzTrYBnL4bkK6u9YC5a/W17tS1pyQxOtQZ2AvsB46bCNwF3oJ0AgBpIIMcAGewx2pJWb9Y/G+RI174YLSFKmKpvb5os1arnTPUf70//fDLfIdttds2f2yKBdvtssNfaJ43XnrulT32xYUDHlvtH/x1MB4C/HXM8RgYZ78N8eGoJ9b46JPPFogWI1YciwSJkiRLkeqbNBk66ayLrjJVyZYjV54aRYqVKFWm3HcVqg0x1DDDjTRCusoGCe7w27Zo+ari4o8Xwvqfj4AsDigngswP+r8CMPQHQPN4UN0L0AQKCiKwBwSoVBv6+4G63ixKZcrW9LhZ/ZodZErNdRPy4kGWgVRsWXltQAlX80opeSoYe3K6g09bJbCn71K1W4nWgay0FJTpbVdFY4uIJNt7GvijpKak3obue0ACrfwwYreqlPIpBBw5n0aLoahjtBBIWVdKY1uDN7xRIDKShZvOD2aiQK0SYU3FrhbZDrGt9bHx7ZjohuOE4bgQ21apgiEAzi9UTCkn10aAJ4I+if0IYvfqPfNFcyHFoSZTnfn2wjWsWxDJqtUx11xX9i48jnM5GBMTWCvEfA7H79odUFFUJbJSRF+2AlbL4tA0eIKy0kMiHZfQHKxJI4Amq9UYqwJodUiNqAELnDRDLBaZqhaiVGjp0P6nQdgDAEuZvYBElASQc5TDsC6tS5AwIK9xRxRz8MM0wV00EAtmmW3uq3OVCYxJfR5HySBEtBWuCCV6SIMu5NCZmlbQF72J0NLJKjC6TzXYIcim9cUr1emWBgQ+QNfWJdsuZDfC4KKCCL3vQAdlRS0CCVVklsonaWpvK4BQRpbXcAKjkFwyosL6h2aFxUEz0q3CLpSmyJDQ7kitVPIQKODOnWNKENrukvpIsi8piaziLseQBq5r3UKhGMak7lffxmEyhGBdptc+Uspqndo2a9VQzvTdFT0FlH+1WkocG85izeilYKN5C9/iWB2dqQa3xTOERgR2O05ZH7tEihleyobMVixbGzRY8gLhiqTomxxq2AVdoZ2TEpdf6EPnFNJCMUCc4QlHv37QcygSIyQ6vX3RUalP4zCxQ0gbUw1TWUOTOJnj/LgaTM1yoIw8pFPd6PBQpv6ea1tc0aqKbOafhh9nt2nqAp9RwefIZFgmgfe8ZHJaT2KG+YYPniQR8gakN2gCT6u+N7YTYMpQ4idPVKNJ0y9S5Q6FXeLZJLAmp9Ekus5U63paAnsAMsLCg6+rggNpdiNyKFHLonjbBFy5By/8dHwWHtQcWAB7/nRZMY+LBC2ZTLdxNyMWQejQ1lB3zH+cfgEdrDjyU3Q9bqEc4po+FKZ6e9VM1aQrx/rrNysbnOcCyCQ/IC6PXJh6bECZb7dmdJD0xYoug64DmF7HxhDKP7vU57X815W/LvlWTgp8hWjFqOOS5K3dY2WNUFvEm2uTDJLa6xxXh4reAqL7a8XOw4bhAT7Z0082/tP0GRlTqQxWzrmAY2k4dGOiUXUBR3j0BUs4AgQS6gYoZQveCGEtC33VS37epbjcBOSa9cXKWi4OLVNwEEAqqoHI+N+ZNaY/NyzRSJJaXHAXBFaynzu3QbKxIqGb0aJWKTchJRC+LebbbZ1jV9yK2hqvnUZ++V5ROSpaFQxHQUEgx8qZXLbvR1LvAL28T2CyNOL2+6QvQHjQZOMpOFj00GU4cNzJnsVGtnD2jKSA0AUkAu+E9nT52mXF3Q/44nHaTYZ5ZSL1vFuKYqrAwbVT5gkSWokBXNXAibzLjsbW3tLBGtAYOMbuMNlCQMvYHCX+osu1fKXZTMva+w7mgETPZChFGy2j+Fkan6FYXcdt3/BQt4UuPIrbQ4DwWUjycxINAR0v/ATFcn2tD75xP8a/+U0cfZRhpnjOWgMr2WNrWI/NGdxnI2F5uoqakbjxLAjwGBNUma5vDJPZPuRs7LsOhTYOWZDUT+Q07IT4nCjkwu9JMV6DwP/NEHNt6xP8BIZNHVcq9Iaz90kxhdL9TqKDVo/or1xruYNNDfRoMNuMW2eSosQ7c6MWJxR1tedhH6bvqlYkeoW6RlOrtM8TJ/pwr7oRY8m6FF+YkkEtmuqEo/9YKHPljbSHeN7W4Zy8GwNj40l0N1rwPXNy1dNdK7wuuiobuMyci5PC0qATNRJYX/PvtEu3WaDugTLVYWyVquPuj+XkYy5WWfNB+Tv9Vt7QfTH/TMKcHXzQjIRJc++K1w5ta5l3Ggkdq38chJ8mJwd3CLtx3H2joApedHcxtJGvqM9zcLAShn1wuHsTMmOfrdyqWV3NqF6bqok/3xKfb8dgfoRCA+irI15GpsdCEX1e51ikFovDlxgFo0HF+kyTBmayB0rf34hvmS/1vRqZX2wy8yCYKLGX1rxACpDxlibBDGq+wH2EENbxE2+AcBueYLIppnjyxjiH1q6kFcg6GGoWYkKWz+sJSNp7Mjynn8dlEB63YuF0l16H4Iue3dhhMzHDdmFnypGNti+WFoeHBSxMbaHHtSOmmqZ77ViH3bPZLvowuNLimavSE6DIEfNsGTrFu8u730oUNXdGdga8AguTCUqUKFdqHLa5IXGpkQ2E0XsVNEjlYtiFMLv3G85UcbmbA+kYRkeiCluzVZJ4tWgohbv8AyOQCYeouBhNyRe30Ixhsh6Q8h5OEIZDPinYjD1WN2ryK8jNUJLM/ZoW22Z8hB+OgB5BUpBYmxBRzn0XuBNlVlOOD5OIc554yehy7HdyYliwi10LUiSHCaGpnAbmME+7IK9Eg/btOi80Rw0+Zgy5msD53U9BLQ5kDSaku+bhW8SRZJDfEqb2zWUQnGnR+xLX8twjMGrGK7XqFv9sqhVJL5xYcu7UeJ4OMXfjYdIX+k5AqYdsINZGbTxuBe/KtTYuJmPy9BDSgfxUKXLSRpvxCVnGbhukkW6HJG+sNH9N++aquIWK0A1967wsG7GiYJLJXUiaavPZRngo6DFSfA4g7JdJm/eoAHJqz9mzY2CTKd2FFL8G7iuuqwRN6uL2ee5f2NJrCpQDO2W/mNP88EA9HT7VZpBFI+G9U/BSZkOAfeyQGTTeEnByV5HfXWJu4KRfRE4AN1rDURFY+EGt4EBaB5L/kHZT8zqnp+DWWITvtfGxb+WfCzFOSCy1CXKJQjdiXfTjp16TfJn2kxlT41+zSnhW9/Gg/JjmlaRKZsER7M5T1A1MtlJCR/6Ct3Rl424rjAJTRM3Zwvj3LLFD+MEtrjJzoCpRJZ88UD2ZWq6+Fquva2RTa8JyZHqVQ4pGsz307ndY+lGThQ47682TBPEmK3/U6/HlnYrPPm/OHp80MFe3mbi8bJxo3GmQP0mgMkIeUGdqKr4TTmKDcJs54iRigYDPXNFDtqQo+/ljnzGrNkz53w15XEO1Gl/2nJo4e1H/8s1qR1lbH5M1tcv58m+s8SHsW0yuHFWFjXl5HPVRUDp+fa16AjapPoUgcvJSP1GUSd+bRv9sUxj5SsH2I4OvgqY5PS5XDWg7bBpTY3KdXd7s4yVyRR93i+E1RfjPi6ub+ct//Tf3ij5r5ih4xGmoILWCo7RfcUZq39W8seyfWQ4Otwf2PlGkohEvdYfQVcXXumlBMWQjNrX1/N5eInryNVaFq3M6g/WPOTRbPptOHWD72I0Qp5HzK83LfLPzm6HGzLnMeV9ftu48YK5OHrs2eW+151Vsz5PQXkXPqzFP6e4KbRb4N920dxOMTqOU75uCugxOk8OW6OM6M+sdyjvoLLLCeTiqf1HIe0YfBQ2w6ruronM9YcmaWGK50Ghqli70JwcG6Hy3jF9ntnEzVVIp67EWT/z+FhHwbzq3bJstONXbG9w65awXDhDUEbYwHQgIkxGGmkB+JXuSnfmC8bsjH24vzSe37578kh0P85/8C46wmi1V1bPLw9I1iUSf0OJqkf6UktW/kSfzy/h1FhsnE5IaEDXne7sHfxCAXuGzKWb+fvBrdvos/GM4TnoTuAazN2j+7R3x/r94/j7b3plHzMLOBqP9YDDo4NK9RxZ9tWHP/eXe5kepEL5w1Zdtfxv13qXT9PTP/wZT92/a8COlML4kboIU8+k/4j3+kM1DpiXxgjjlx76D7D5ohpOqvoDsxau1X26ejAcozZ9DseL8pQQWWHIiXLWjq7NqbiKQTK4LeOY6uzw71oUTa4RmBa3eYqHVmiVCgUUiGLXzZ6kA/k0fuVexHOmgz9GYFTnCNyJuwwGZ4o9QO5NlIlCFEBOwy6mNTiZlUuEE4rd6IbVrawc1NFdyRfIKGel4A9ux5BKkbvrWsZJhS/q9trqVAkfy2waf9nGJ5Bmt7yXUFnhL5pUVoAItq0Vkf70wSeWLniAi22euVtNKXmbYJUptvF1h1/VwN/gzv1sVVNbLhIrdr89HqaPTZKtIqUn3qMA1+Mn8X/nNcOCHmRtolipqNtQ622/AOslMhgnnNPRPtYYoWXNVPQ1ceHzyXo94DO6A22agcRtbmWMsJN7+3CQY3z+5iyduLmp1QOvEbdvs4nGLeGtF+zrIUdQWEYq3rJq8omcvg/mdkHOpf5WeDWCn0o7o96uHT0dfhq74zMmH7ztsO+nab54433QDerjzEf0E2PvVU4vv08w9jbW/BX2Osz+tmdv91L6vgL6XfKYgfyH8xaPnwWWY0Mqm23ih8fi2kgKBEEf+Ncan/mebyl3KNsclwiY/fnAb9LdDV9iHjdGqlc9MVaC/ADEwqoVyEzpVcXnmoUXe8zYCXZ8wiHp9Md1gxpjIYR9Gm+VCXh0RNZG4Srkf2KOz12DORiKubL/BLnITdthTLxYj6dKbfP5NKgV7XKip+TZKAbexdvndQ2FtNmNUcEc2FHiPzFwe3ALtiqUtyGGyS65S70NiVm8Se8R2QELXSoMlGwlbs11GnavOKOyyVShwjgUtr7AjAsx7NzmLSy5Qieb7xTWeOgJILa2kxUJyG1n3q6p9PQb/Kqvkg3xPpOCTLLj9HJzBtQrIlnJIcJiEv1VK7zHa+DpNsI5diWwpOF0Qhe6dV6GWu5N0ZfGb0IZZxeXl3FBtg9Ymt4VGhJ7nEa9XEDhtRGIbh0B/ndRNFX9QhlnDkOM+efLWMQHhGjBfnnmoMHmuiieLuDrrFDNU5XMUwuBAEFgub90C7Tq0Z/6lc9QHVjyut+fBc0tlh7FVMuoMGwOWQv1CZd2nnMBya3A+9KFTIK208NALPBJp2MNRW7F9MNipZN0M+mx0HvSDnx9jKBJNPXr7qkjEo6xhMpopDQOktSY+37SWRF6JBV8JzGcPD26BXvRQWfq4QbTSF9PlMkYl+cWdUGBrgH5I31oyBXLP7ijw5qwk2j7bheuv0McqDn9KP1R6Wi8TNw7tSZKwkadm8fkTETjhORkFvA6TtjFthgjOiiBT364oO/DgEf1ZF9vZXh1TJml/h4f3hnDE02Ul8ju/rv1CwxWKXDU88D8uwc7Y87YebwF8x/DOXDb3LI9BLMruQ7eyJ8EVWNi96f8j+w4FP+Rzz9wayrMv+szDBycP/jhr+nq23LsD2mDrnTB/vXnPj6Bx5McZ0edNd7jdUHuRZ6X88/XKz/uK3e1Q+xJ3RPT5XQM/Huc+Ey6y10J6mL2R8wwQ7MCpN/fzg7NV+6FVuFXU4M7p/1rfz/MIn+o6BU0Er2OFQe4JVMHn2K69Hy1mTkx2XPlk1vnmnjLHLNQHd47p3tw8/8tI/2iAB1jtrwjPZ3sDr4jeyYKSyskv83+NXxp5YzuU30GETKw67Z7mhbPljj7QzwsayPuCRuP4tfV+9dfNOGNbe3vjU9ttjfP538fPj7y6fUF+fgB9P1oTZ0iSgaAkHWcBbFh9VUHpYDhp0/nmbbbQI0tpEDirom5RhmoBZprTrj6WPRX0OxqyIkd65FYkbL9c/rwuciWJuqUE+cMtAuliLSp7KV3sYss+dbKE1qSJ121HSLAk879oMlHyiOjsvIMCxuu0uCZJy+I+lwXC8DL3HWcd0G//cHypYJqOVmwE5lsz76F9Qtrxq7JrG30psZV7u/G1ipLyVZ7YXZbrbdlI1LsvNxhN5fZsFJCVGleSnljNrUTZn6CQnuzhKX6HPj41/tquvy4At5+3GYzuEVO243KoQ6INL4QEQmuNSdBjQ0ixpMZ/ConE0JS4hpsi0JVJ/je1ieU5QjjA5wfDBHzYJD9AY/ivp5dxwhyUbSNYAuO6kFpxsheGxl1FVHQ6dwZXU4lDn3XgydspIpXD8PrWzyyqlh5d2FEvlnr59G0F0xJ4m2OXvZkt4njCfABHY7vW1Fnl0rXUVSrYTgZxga+7kkB4b5zDPvM+nvgo2ib30/udtR1uJ9mUtBJGQy0rdNtbQurVHa6vPnb29l3geYH5bP/M/CLn3F86Y8ogOXNTYrTPLfJ8eX6go0VYGVVX8r12hZ9rZ18ho9NoNIvGESWC8QZ/6V1diOtoA3+2uVGeX94a65Usl4p5vqBIWRUL2vls6+dO4be9JMLsHgLNwfiuRdfy73qxq2pd3fF+A0gVypnRiNRGSRXiug/sR2Dh9MVHrr8tyq5T+4tKgOZVBazlpezDbLDaQGfshf7mSBl8fHhiIDvw3Dm+TaxrQHUyu/LPyoMdt1ueLJfN3TrzsT0zVMULlLJLDz1rnMVCd5J+LqYPsXhhObzr1w6N3Mw9CyET1PKvXqJIWhpYDMvOH9m7L7+vVWT79+7NH2lZiV2FysQTqPRE2JWBEvHTn5NVwJm7e0UurXHjF3VDuRxgqkFnfsTZIRDfcqW1Dvm8bzTIbcaMVFFj0Oi7m7tyfadQU3nwE8ojqN/zo2uvOugc0XoG4Zwb6WzXWJAHsLRxJq37fU/N6Uae1tLEUfrUUqWDCWl3/uuiM0c6eYD1lwSFi6GdjR9E70r2ft7y5epTI+A3VETQv082175gY3Aov63WSFYK8HVPWLhl5vb810sH2L9JVGmuMmFzmZs65ACDohjd5mUPVNdw17qiaY7clBZ86EssSBEYL9CaqoOE5C84VGUtg5awYLB+R2H9hJ9FVsa4krjNqq6vl4HtUAA5wcmZsj8Q8xdSKpuznzlUNg3VgkJYxDK+OiBnPw+7CekkLplSHkhzdcn2TJC0LJmBbhI+5MlUgWUi/GqmAYutYGCIswzcSRjkiGmI4AnQtV7rKSLh0NPgMcyUFn7vT9zutGcdSSf+Z3ikI82kJsOK0e7T5+dQmGY6jThGt3o5A9U1PDkyQEVXZ0A7296h3drpdUWLT7tFzN4lzpX4flQmHkOl+/D4vkCx+OmfoB/c/0UuzXXjF/WMAKEc8A3mbe1C8YM82vohr/eNRrnNmJbKUgalrifToxzbjx7Og7mCDsoh225tuDT/UKrSaumnDZVsoWvBHIzFZHEYLDaCw0IC7xNEf1ZjKVjYXxw+fLiUnuKw6lgyudsaSefA0BcIKTTRCE1IpOKfAgrrH1a2Bgcl3sqqbLbCZl+ZXV8kkeZl976IQv79RoI/bA95VPUyXWWMLvXqmO8+9sCc3PwTMxd75hTgy/PKGENapWd0Sul3ZgwHu4EgHJFvwG6QCf7hru1pJDybDB4XChqbRGK7weXsdlL/P3rrtigmth6+WEp5lsaaB9n1V3B3l1jPzSvPUa20zgmMLkcnOKNaN93+Ku9avmOsAoUqbe26NgPeZftvzvMuc3cGXryk88PMUyI2R3SSyTxp5LCNp4DVZJfrUXD1hLHVfmNiwv6hsSXNVDZI3+7q9M3KRjB5Ig3XKHu7s0smGiLWsK71PCg3QOaO2jcCLY+3BIDQFGh9vDXwRi34Zof1Rohht1DwfhAHjlvlFIudEb5uNQUqyGkeZ5FPpJEloaRMI1zk5/DS5IqMpn0Cv1BjdUNuq0ZEJmpM1uvhnBKV37K8j4MfP0nohhUUPcCfyW7wQ0Dsz6/6fQWenNk+tu88VWcaztRLn214FjTUXtW2dUlQriy6qN9fNNCHQbtGXH+vrgaT4MeosoOLra4aHCKSn6uoSJ+3Ei8yLSKRKShzG/6isLjm63biux18Id9VzQldj+gJt+0J2e9dxN+GuQm59iBLrU1z3rGmm0dw+H0V5cMv2CnXVwip6/6Cc/D6zPWfEK5Vckebr9remOU4BM+B6iW2AWEqrhjxBxRDqdgA32YbEKSq5UMBv3wkFR8QWvWqDMvp4iwzGDlNTmeGqVJnmA4np8lo4CxzuDIsm1cdF0vjep0yHhfLRZ/k8j/eRpLnG0kyHA9HE4lsB80E8IVSVSOvTOl0lakauUqZkisi+vgpeYj3q94uErX9yuOZmXWUW9n2TA39Jg1ejOb49B8Q9cuQpT8Wwd6WIkGq49NEojiR+HRM281qQloglIXZ1KNNNiztg9T77ar90PQVaQDz894Nws46/eb6DufR/PBec233/an4Ax0OTpvFHqKyBb9XEqODQdZ5Ig4RKaFyeLh8bPzFhe+lhdcnkxSSjhJSKoj1Jk8Lz23KyTL16vVRt7Ar6GyjaVghxA/UyDv1aIMa/rMcva5ndSnxYaSZRH0QdEWdrWquLu4INKcQe2oq9jSNtBNey6ubMxWR+hRNn5yCa5I1gYswsVvKrbU0pbucLk9Nlvgie6SiMA7jcCJxmEqnQw0OYGus6964M74euBdhfI4LGOJNPAJT8NzbSRyBJWA3ka9+vW8gBc7D5GHOnFmGWY9BL0Hh3hUbmTswiAOoii9uHkUzRcR4L0Qjv//o+3fSGNvtRPD2s6xVENvHDX3j9Cs3/TFxItgFU2T+7nFasdjbCoIQU3b0g5vCJ77ruSP25NgSudeqZ/fYaOAFWDC+os7IrQsrtLyhEq71vf+jfows0K3AVpwj4HZj4T/eMiJ+VWrMVjU78Aao0qMbBDUVj6RY2rPClvKuRRZwEWaNWoS0N+6H1vJIsqBarQ2oZeW32r7TN7NMUdQi+XOyomJVOTwLR6IKL0qvV5TS/3VB0ZDXwP8wfsfqHPrEB8WVP0/AXkTD/7/fhvicoLIWCj9lr53MwMuEFGBXzVVODFGv13mUIVcD5CJa3mbDsGLg1wTJRGqCEITFdnEJVacfDtoW4+UEfCX+9RQT5EDxP55eVez4o8V5KTZDxIXxNItYbQqBtctFKa4yoWlcgliGQb6ymmH72SNjm50u75XqtVDZl4WB0p6rlVCqrEQMzi/neThCf6VK6PNweXwPV+BTVQr8Hg4vTNrD4e0hEffwOHtAr4jb81JhoZZa8Otl6mJ3LKmsXBK0u1JQwFG/nflqOpxdOpzqnWV+TC5NIqVzGExbF4nU1QZ+RXU3e7clFbCj6fwoFRs9ZqVdywi0slit0GSuFbGrgrkchZqhokOXbbSLTLNIK61pkrc13t94f8OzWxq3AE/1KX2wkoq0IS1kkzJdLzUYqkXPeD0FjVju/6b2n3/tyTYMLaq5VBK3QbQ0uDK1y79Ltss/vI2yQzZxDGN+HDqmsDwmnZjdRhm23p5dU6ALzJfz2Ld2djhm+wNuXUyy3WtjjuPZYXyDzUFsaOIQjyzxKVfW6IY+dXoKlL7R0ePWZHzAIgv06yx94bCnL6/ziTyku6w1pKJy8Uffu5qcHgv+mWJtrThJTKTPhc+BVbD6fbHXaHCh7tyx9mPnumsyoPVrv9YOBle4PZunNk8PlqnpKXzjSTfmb+/6+TXdt1TaNzT6+zTqB7S2iS7gTdvVY62vcEOPataLIDzWA9Q/ZB2qTAJee2DDsbZjh7sPh8oN+AdW1ST12j05sIQbEo4K1kN4nAio/ZH0W29/BMLwd3Kwyytikr84caToryEqnwisrTvX8OSEKODMZo6FwTTzeEyzhcHhmhksx1lm8yV1kDUUqopMTFApNeDQeH0hi70FRhgGfwa1js8F7EuREMwuaB+bawXSoKlrwDE+19LfwhR05C4H2LtG6bTrRaSI3byP7oSd7VVRiEWidheXEZEMVga099JsopSKxVgE+i7RJWQvZ6rtDr2IGHGYAbbwwMHRe/rOAN3eoxunDwzvBMaC6JNrtlFeAxYN6J7RWjmwXAYdmIYMhOdTXt+2JvoUOKYZO7Px5d5bHYPCgVcuj+/c6b6y1gGdJrDo0dGvxopKuW5pqIJgDbEx1q/GJ0+znGALAedJ3Npf6/glvvxMIZRst1UWFD/eKS9KctjBTLCOUwd2vpqRZYAm9j06/T3mqCsoVJM3kknEyYMkuIgRBmFj942g+CIpRwKR28yabY/RLQG8rAvytWVlihNLwuYFATSBwmj6G4zWLtDuLSn1OQGves2DvQNP7/wS+FZa9XyBVWexOBLwcR5mZfkkEnV3efndKOQk2Gl0VAqFDoXRZFdIV3vlZ4h2BPLFEe3I4wTC/GDh8wx5m6R24dFFx8tLXisHLT/Mn8RJJPzTtzwa43izu5Eib5UsaNK6FZzpJDmYpCa2EYitRFKcSEj8REpExzhJch1oRMdo9GmwRdP7wEa4t1f5IElffXr1aKdkM9h9OTexcXDvDOqhXVgV6+oe7bPk/eiZeg11jmqXQfR8jKhvlHSCaZgG3cF00/PUWais6CNFVaGHyTW8+DVZoQuVEUZgBBQTKWa3YPUPri4pemgrVzPXHiKcgjYXFz+U62ywqWlTh0cDvTbiOuHgOFa7Eedhn8yX3nX7NLT1dViJYP2AYn94oUXKp/5qhjv2kYcv4otL9kddbfh1r1RgYa13MYAhx3CUjDm0bnRiajw6c7SMeXjdmr7pseiYnW6uK9H4VMsk+nQd0dg0VYJu9baFBEvYLm1zaGOJLg/cu2Ziakx/UFB8keggEu1Ekp1IdDxOMiqJuAf37s73TY+Fx/bVHnwIdHl6tIPyZoRUfOve6MzY1JqJLfvm7vDY2HQ+ycO45nHCB/PFuNaqwqpKnoKWQjdreackXsEnHdrxBjaTdMHH8cVrpc37RL4L4FA8QrOzMzc2Nd1RqF/H5p0HsBhXuMAFrrgcejsuOPiLx6fPrqptXibz8dmghpEShVPPZQeg1K0rTG23/nInk2Uea5ziErv2wKjZAs+yIdY4qRciFj9wIPdErHFSD2YBTwz4Lxwfzwbq74tY4xQXdZIse8QaJ/WipJJ1QviexMyGykDCgFjiGOfYtKM2arKhkSU8xRJHNVrZEWnmkCW4xhLHYAnt/cOTAi6GfNwbRv0xUSxxjLMaiyyhxxJHNTZZcQiWEI7b9f1hp3DaUXSWJpfx16uU3Q/c7cHjZoFMrhVkMWVbQdLWbFLvOcC9o567oT7LWr5QjVroDYt1MUvCklrRvfDvH7G8WO5mZbnSHsUqWVXx3t8KfJTkREv26Uk9Je3S0hN6Uk/paT2jZ/WcntcLelEv6WWu7GfgKbA8a3zbYXIKC4PR20YGyvYe2Mac2DqDlna6jVhGnezKmFM7Lob7+s4Duv+rSkxYdDpDCwC0rX1zwuVaxWqnMlWpQjUj9NBJ+dz2wd8/AN2oH/v7f+q5XxLg0A1jay2xUfVv329efQfGAGA28GQu3cTO6p4sn0FQFp2EVqv7SWsyrWii7SwV5IMmh37jc8VWTaD5Py/mVN8/Qf2GKLareKN6OwHVyyF9r/llppcKyjIM0aOQrpXLcZcI6V1gZ/ftB2VAKpeo3m16rptc3geIK+L2iZf3aLJ97KFBvyKX/aY3+oGmC7pxe7p132Lyaf6jGwOe4xxfkCXVPQxYDVf0PO0nN2/o6PZkBsUgOapjI10p17HthRZ9T4eHc/l1uH8Rfozirmkpjb+3STmB0klGJDvr+waC9J+S9gF8AG/4ysJmenebx7ThAMqp5ns6Ta2VUpOXtq6Amr2+3cXX4JPtxGV2RV9tKPrk2l4CO+pA/nDs84d57F3/l1JO+f5lL07g3OF0Cc9X+lnf7WxBIWxihYXt9Ax0AkcoldO6M2k9QVfwhqyKwSfAnSOs8WKe5ihwZryLv5Y3ug7G2SjXVreCec8nv2PtXrjLrsJ7Mo1CyuKJBJPQgCPIweXr11nUWx8lNOHNNmcZre7dtl/gbUiDG799WWPwxh7VfzReXHtjJ8PRra1+fO06NCzbqXLR9drT6rLvIFD1ZPxZ63vqS/X/yhT1POD5Y+EcAS+u+5v/DtnH/LNzM8QgAAENfz+CRleDnXnRUPfrzuKdKEM7KHPuz/UudZyZZoQ0w0ORXnNme6sJce1/2U5rqVMIf8Eu/VArqtbQUhfkSFpRLifSJ70/jnuCEpBVsY6fdw7ppxRcx5C5N9PjWOMUfp3FEg0q3egyhygg1D09etyZlPmoyTx6T3xfY/avNlXecTG7Rp98s+pCBwb8igPyWQiCwgV+TmeQkjbYdFKvlMcZClLiqQnvsXIUiveEfgwlL41ahqMtE1lA3LEu5XSUegIDSk1D4Sh+hnoj/RQeh0p3Soh7spBv8R5uXcku8y4Z6eiuSKXCodw4g5nJggQiNO366nyKa96TYrYmmmOF47trTSTzwHOCONCCFGxBBi7gBq5L68aeX7szTgk4+RwvyelcWUED1Zn5xB3eCQqjiknf7Xi91KrrBOeVXC7pmqCUwXrQAdDxUQeA4iH1tRl5xci/j+Ajx1dHp+NBkZzjanLuF/xklWDAE7qBiTrQpaNZhw+ZXNV8IYPEryefcX7IvZfTzNHoamJeww5tg6WQsB+knI4cFejBmwzz9SKIMOc6Os/lwHQI2b0tdf3J1YaBJyEwgifwwe6iUP122ZhTk/LgZjoCA8n8QSd0w3QAb+NgxtSTMUEJg8XxHRkdfhbYD2mQBf1hLNSfuyxThnM9QB0J7jBerIKDEASeEAXBUAg5sFYki2W8xrfDwmgW4CjzLf7/Hf3037sYrfgVovQB+SIFvObCQQA4xXKtLK4rluKLEfDtVQjQrRkFG1wAZ5pnLkSeLb+Q4CT7QkpShAtpwR5eyJJl6oUMX5kgmNRdCRH4pKARvIwX9y8NfeMBa5Qo0l+xbgbLkyNXpUSV+iuUZ+D0uEqlgnnwUMH1cnnQldExqdCF8sOUKJfDQ7o4KbooUaXcQIN1YZ5fwUesoVaXW0jhOXV3UbpzCw2SSeVcukQLmnEmnvx4C5GLZqWBVl3N4EVeLgpJvFlgcOvS2QYbajB4c38rjYqmgtzDNcnkNHb0j3ezGFHShchS+gFNg1aKaHrydi42G6TEgOYg50NCQ3rrTPq7myYDD+udPbhwozGEobKu0blBFTtaV4fZQTTidipUttL0V8T+LBfyRGcvFEB0n159lrcfI4sDFT0nBkbOXLjqyI37sxnJS8C348uPvwCBggQLESrsyRql8Y+cJl1b+FfXTZbueuipl97WOuG4dQYYaLZBThms3ckInHtq2X+VoyDbJeddsF6OOhtcddkVuV554U005MtToEihYguUKFOqXEUFyECVStWGuBYbOTDUcMOMMFKNhTaaYrRRao3x2i4vvY0L3PDQCvnQwpaEHSkZOQUle6qKUYA2KFSmXAUEJFQiNhyorUZbTGcRHpZttttiqyOO2me/lVYR2mSzwyaJYoUvXKQ++hHrK8Jz1iaabJqppnPERAYDCwePgIiEjIKKho6BiYWNg4uHT0BIRExCSkZOobL/zcufqr3YJmgusPH2FEQbxxeffSXwzns7aHSg1cCsvyXGFULPwFi0Ga67Yaab7rhbBDMLKxs7BycXN48qXj5+AUEhYRFR1WLiEpJqpKTVqpNRr0GjJs2WadGqTbsOnbp06/GwFCNWPPElkFCiasRXu+1FIFiWasLmTPn0tV602adXdwxL8Yzz7riuLN+leZZ6w3w/3X0hzHtsCn9+5ly7GrrVMIm0/5uYmt3eMS7HtVdsd4JXii9S9wRfiu5V5L/U8bPySERhxMqVq9BJnVSuQoVydRHe/uqc/G8xid5N6LvC473mXvf0P1s7zI/FySk4yUlyCgpOcipLmKPgDGd/bDQbs3zVo9zZB+t2NV2D7yV4Ok+JxNk1bZhej/3iazYlkS1Dvivd30fLewc/z+yJXFbSuxL97ULzmldhzII5gTyE5z0qKqrWfI0a5ZuIXETGvsUyPSFKXNxhoxPcb8bEZB/GVbVbp2qpTkUppnqpT235Bg6iyEZO7ehU/ZWSsFvH/G8q+KbrMbiphEtrNpo8gpNouTQ90WfHo/G48nZ+PNIW/v2bIJsBAAA=) format('woff2');
        }
        @font-face {
          font-family: 'Source Sans 3';
          font-style: normal;
          font-weight: 900;
          font-display: swap;
          src: url(data:font/woff2;base64,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) format('woff2');
        }
        
/* MoD PulsePoint — Application Styles
 * MoD PulsePoint Application Styles
 * Font-face declarations are kept inline in HTML for self-contained deployment.
 */

/* ── Accessibility: skip navigation link ──────────────────────────────────── */
.skip-nav {
    position: absolute;
    top: -100%;
    left: 0;
    padding: 8px 16px;
    background: var(--primary-red, #A20234);
    color: #fff;
    font-size: 14px;
    font-weight: 600;
    font-family: var(--font-primary, sans-serif);
    text-decoration: none;
    z-index: var(--z-toast);
    border-radius: 0 0 4px 4px;
    transition: top 0.15s ease;
}
.skip-nav:focus { top: 0; outline: 3px solid #fff; outline-offset: 2px; }

/* ── Accessibility: keyboard focus indicator (2.10) ───────────────────────────
 * WCAG 2.1 AA 2.4.7 — any keyboard-focusable element must have a visible
 * focus indicator. Global :focus-visible covers all interactive elements
 * (buttons, links, dropdowns, custom widgets with tabindex="0").
 * Uses outline rather than box-shadow so it renders outside element bounds. */
:focus-visible {
    outline: 2px solid var(--blue, #00A3E0);
    outline-offset: 2px;
    border-radius: 2px;
}
/* Override for elements that already have their own styled focus states */
.skip-nav:focus-visible { outline: 3px solid #fff; outline-offset: 2px; }

:root {
            --primary-red: #A20234;
            --primary-grey: #45555F;
            --charcoal: #1D2429;
            --slate: #5B727C;
            --slate-text: #4A6170;   /* WCAG AA ≥4.5:1 on --off-white; use for body-text contexts */
            --light-grey: #DCE5E9;
            --off-white: #EEF2F4;
            --red: #F03030;
            --orange: #FF9E18;
            --green: #87BE50;
            --teal: #2FC4BE;
            --blue: #00A3E0;
            --lavender: #A4A0EE;
            --dark-red: #C70505;
            --burnt-orange: #C25700;
            --forest-green: #338533;
            --dark-teal: #07828D;
            --dark-blue: #007099;
            --purple: #825AE2;
            --surface: #FFFFFF;
            --surface-alt: #EEF2F4;
            --surface-raised: #FFFFFF;
            --surface-sunken: #E7ECEF;
            --border-soft: #DCE5E9;

            /* Column group divider — painted via <col> background gradient so it
               applies to every cell in the column automatically without per-cell
               border assignments. Defined as a CSS custom property so dark mode
               can override it with a single rule. */
            --col-divider: #DCE5E9;   /* = var(--light-grey), visible on white body rows */

            /* ---- Design scale tokens ---- */
            /* Typeface stack (system fallback if web font unavailable) */
            --font-sans: 'Source Sans 3', 'Segoe UI', system-ui, -apple-system, Tahoma, Geneva, Verdana, sans-serif;

            /* Type scale */
            --text-xs: 12px;
            --text-sm: 14px;
            --text-xxs: 11px;  /* compact table data cells */
            --text-lg: 20px;
            --text-xl: 28px;
            --text-2xl: 40px;

            /* Spacing — 8px-based */
            --space-2: 8px;

            /* Radii */
            --radius-sm: 6px;
            --radius-md: 10px;
            --radius-lg: 16px;

            /* Elevation ladder */
            --shadow-sm: 0 1px 2px rgba(29,36,41,.06), 0 1px 3px rgba(29,36,41,.08);
            --shadow-md: 0 4px 12px rgba(29,36,41,.08), 0 2px 4px rgba(29,36,41,.04);
            --shadow-lg: 0 12px 32px rgba(29,36,41,.12), 0 4px 8px rgba(29,36,41,.06);

            /* Motion */
            --ease: var(--ease-standard);
            --ease-spring: cubic-bezier(.34, 1.56, .64, 1);
            --duration: 180ms;

            /* ── Semantic surface & text tokens (light mode) ── */
            --ch-text-primary: #1D2429;
            --ch-text-secondary: #45555F;
            --ch-text-muted: #5B727C;
            --ch-text-faint: #9CA3AF;
            --ch-bg-page: #EEF2F4;
            --ch-bg-card: #FFFFFF;
            --ch-bg-card-alt: #F3F4F6;
            --ch-bg-row-hover: #F3F4F6;
            --ch-bg-row-stripe: #F9FAFB;
            --ch-border: #DCE5E9;
            --ch-border-strong: #B8C4CC;
            /* ---- Named z-index scale ---- */
            --z-base:           1;      /* base layer — stacking context floor */
            --z-sticky:         2;      /* sticky table header */
            --z-resize-handle:  9;      /* widget ew-resize handle */
            --z-filter-dialog:  10;     /* col filter popover — above table rows */
            --z-col-resize:     20;     /* column resize handle (active drag) */
            --z-dropdown:       50;
            --z-popover:        100;
            --z-overlay:        1000;
            --z-tooltip:        2000;
            --z-modal:          9000;
            --z-popover-menu:   9500;   /* floating menus above table */
            --z-modal-backdrop: 9900;   /* semi-opaque overlay behind modals */
            --z-toast:          9999;   /* skip-nav + system toasts */
            --z-modal-top:      10300;  /* primary modal dialogs */
            --z-modal-front:    10400;  /* nested / stacked modal layer */
            /* ---- Additional text tokens ---- */
            --text-2xs: 11px;
            --text-md:  18px;
            --text-3xl: 48px;
            /* ---- Default accent (overridden per-card) ---- */
            --accent: var(--blue);
            /* ---- Semantic UI state tokens ---- */
            --primary-red-hover: #8B0129;
            --error-bg: rgba(240, 48, 48, 0.08);
            --success-bg: rgba(51, 133, 51, 0.10);
            --font-primary: 'Source Sans 3', 'Segoe UI', system-ui, sans-serif;
            /* ---- Motion easing ---- */
            --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
        }

        body.dark-mode {
            --charcoal: #EEF2F4;
            --slate: #B8C4CC;
            --light-grey: #5B727C;
            --off-white: #1D2429;
            --surface: #2D3748;
            --surface-alt: #232C38;
            --surface-raised: #353F4D;
            --surface-sunken: #1A222B;
            --border-soft: #3A4654;
            /* --bg alias — used by admin panels and any element that wants the
               page-level background without referencing ch-bg-page directly */
            --bg: #1D2429;
        
            /* ── Dark mode semantic token overrides ── */
            --ch-text-primary: #E5E7EB;
            --ch-text-secondary: #B8C4CC;
            --ch-text-muted: #9CA3AF;
            --ch-text-faint: #5B727C;
            --ch-bg-page: #1D2429;
            --ch-bg-card: #2D3748;
            --ch-bg-card-alt: #353F4D;
            --ch-bg-row-hover: #374151;
            --ch-bg-row-stripe: #2D3748;
            --ch-border: #3A4654;
            --ch-border-strong: #4A5568;

            /* Column divider: override to a dark-mode-appropriate border color */
            --col-divider: #3A4654;   /* = var(--ch-border) */
        }
        body.dark-mode {
            background:
                radial-gradient(80% 50% at 50% -5%, rgba(0,163,224,0.10), transparent 70%),
                linear-gradient(180deg, var(--surface-sunken) 0%, var(--ch-bg-page) 30%);
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        /* Branded text selection — a tint of the primary red rather than the OS
           default blue, so even highlighting text feels on-brand. */
        ::selection {
            background: rgba(162, 2, 52, 0.18);
            color: inherit;
        }
        ::-moz-selection {
            background: rgba(162, 2, 52, 0.18);
            color: inherit;
        }

        body {
            font-family: var(--font-sans);
            /* Subtle layered depth: a faint cool wash plus a soft glow behind the
               top of the page so the white cards read as floating, rather than a
               flat gray field. Kept very low-contrast — felt, not seen. */
            background:
                radial-gradient(80% 50% at 50% -5%, rgba(0,163,224,0.045), transparent 70%),
                linear-gradient(180deg, var(--off-white) 0%, var(--off-white) 30%);
            background-attachment: fixed;
            color: var(--charcoal);
            padding: 0;
            -webkit-font-smoothing: antialiased;
            -moz-osx-font-smoothing: grayscale;
            transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
        }

        /* ---- Focus rings — keyboard-only via :focus-visible ---- */
        /* Consistent accessible focus ring for all interactive elements.
           Suppressed for mouse/touch (only visible on keyboard navigation).
           Two-layer effect: coloured outline (WCAG 3:1 contrast) + soft glow. */
        a:focus-visible,
        button:focus-visible,
        input:focus-visible,
        select:focus-visible,
        textarea:focus-visible,
        [tabindex]:not([tabindex="-1"]):focus-visible,
        [role="button"]:focus-visible,
        [role="menuitem"]:focus-visible,
        [role="tab"]:focus-visible {
            outline: 2px solid var(--blue);
            outline-offset: 2px;
            box-shadow: 0 0 0 4px rgba(0, 163, 224, 0.20);
            border-radius: var(--radius-sm);
        }
        *:focus:not(:focus-visible) { outline: none; box-shadow: none; }

        /* Stat cards lift gently on hover for a responsive, "alive" feel. */
        .main-stat-card:hover,
        .main-stat-card:focus-within {
            transform: translateY(-2px);
            box-shadow: var(--shadow-md);
            /* transform creates a stacking context; an explicit z-index is required
               so this context is ordered ABOVE the table (thead z-index:2, rows z-index:0).
               Without this, the tooltip is clipped by table elements that follow in the DOM. */
            z-index: var(--z-dropdown);
        }

        /* Modal content animates in (fade + slight rise) instead of snapping. */
        @keyframes modalIn {
            from { opacity: 0; transform: translateY(8px) scale(0.99); }
            to   { opacity: 1; transform: translateY(0) scale(1); }
        }

        /* Staggered entrance: cards and rows fade+rise in, each slightly after
           the previous, for a polished "settling into place" feel on load. */
        @keyframes riseIn {
            from { opacity: 0; }
            to   { opacity: 1; }
        }
        .stagger-in {
            animation: riseIn 420ms var(--ease) both;
        }
        .stagger-in:nth-child(1) { animation-delay: 0ms; }
        .stagger-in:nth-child(2) { animation-delay: 45ms; }
        .stagger-in:nth-child(3) { animation-delay: 90ms; }
        .stagger-in:nth-child(4) { animation-delay: 135ms; }
        .stagger-in:nth-child(5) { animation-delay: 180ms; }
        .stagger-in:nth-child(6) { animation-delay: 225ms; }
        .stagger-in:nth-child(7) { animation-delay: 270ms; }
        .stagger-in:nth-child(8) { animation-delay: 315ms; }
        /* Rows past the 8th share the final delay so long tables don't feel slow. */
        .stagger-in:nth-child(n+9) { animation-delay: 340ms; }

        /* Respect users who prefer reduced motion. */
        @media (prefers-reduced-motion: reduce) {
            *, *::before, *::after {
                animation-duration: 0.001ms !important;
                transition-duration: 0.001ms !important;
            }
        }
        .skeleton-bar {
            animation: skeleton-shimmer 1.4s ease infinite;
            display: block;
            height: 14px;
            width: 100%;
            border-radius: var(--radius-sm);
            background: linear-gradient(90deg, var(--surface-alt) 25%, var(--border-soft) 37%, var(--surface-alt) 63%);
            background-size: 400% 100%;
        }

        .content-wrapper {
            padding: 20px;
        }

        .header {
            background: rgba(255, 255, 255, 0.96);
            -webkit-backdrop-filter: saturate(160%) blur(6px);
            backdrop-filter: saturate(160%) blur(6px);
            padding: 20px 30px;
            border-bottom: 3px solid var(--primary-red);
            margin: 0 0 20px 0;
            box-shadow: var(--shadow-sm);
            display: flex;
            justify-content: space-between;
            align-items: center;
            position: sticky;
            top: 0;
            z-index: var(--z-popover);
        }
        /* Solid fallback where backdrop-filter isn't supported. */
        @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
            .header { background: var(--surface); }
        }

        .header h1 {
            color: var(--primary-red);
            font-size: var(--text-xl);
            font-weight: 700;
            line-height: 1.15;
            letter-spacing: -0.01em;
        }

        .controls {
            display: flex;
            gap: 10px;
            align-items: center;
        }

        /* ── Unified button base ──────────────────────────────────
           .btn shared base; variants add color context.
           .btn-app is reserved for header-level primary actions.
           ─────────────────────────────────────────────────────── */
        .btn {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: var(--space-2);
            padding: 9px 18px;
            border: none;
            border-radius: var(--radius-sm);
            font-size: var(--text-sm);
            font-weight: 600;
            font-family: var(--font-sans);
            cursor: pointer;
            transition: background var(--duration) var(--ease),
                        color var(--duration) var(--ease),
                        box-shadow var(--duration) var(--ease);
            white-space: nowrap;
        }
            transition: background var(--duration) var(--ease),
                        color var(--duration) var(--ease),
                        box-shadow var(--duration) var(--ease),
                        transform var(--duration) var(--ease);
            white-space: nowrap;

        .btn:active { transform: scale(0.98); }

        /* Header action buttons: one primary (filled brand red), the rest ghost
           (neutral until hover) so color signals importance, not decoration. */
        .btn-app {
            min-width: 165px;
            height: 44px;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: var(--space-2);
            padding: 10px 20px;
            border-radius: var(--radius-sm);
            font-size: var(--text-sm);
            font-weight: 600;
            font-family: var(--font-sans);
            cursor: pointer;
            transition: background var(--duration) var(--ease),
                        color var(--duration) var(--ease),
                        border-color var(--duration) var(--ease),
                        box-shadow var(--duration) var(--ease),
                        transform var(--duration) var(--ease-spring);
        }
        .btn-app.is-primary {
            background: var(--primary-red);
            color: #fff;
            border: 1px solid var(--primary-red);
            box-shadow: var(--shadow-sm);
        }
        /* Inline icons inherit button text color and align with the label. */
        .btn-icon {
            width: 17px;
            height: 17px;
            flex: 0 0 auto;
            display: inline-block;
            vertical-align: middle;
        }
        .btn-app.is-primary:hover {
            background: var(--primary-red-hover);  /* fallback: no color-mix */
            background: color-mix(in srgb, var(--primary-red) 80%, black);
            border-color: var(--primary-red-hover);
            border-color: color-mix(in srgb, var(--primary-red) 80%, black);
            box-shadow: var(--shadow-md);
            transform: translateY(-1px);
        }
        .btn-app.is-ghost {
            background: transparent;
            color: var(--primary-grey);
            border: 1px solid var(--border-soft);
        }
        /* Navigation buttons (Dashboard / Workspace / Settings links) share
           btn-app is-ghost with min-width:auto overriding the default 165px.
           Used on: workspace header, dashboard header, admin header. */
        a.btn-app { text-decoration: none; }
        /* ── Cross-page nav buttons: consistent 40px height, fixed 140px width ──
           Width is sized to the longest label ("Engagements") so every nav button
           across all pages renders at exactly the same dimensions. */
        .btn-app.is-nav {
            height: 40px;
            width: 140px;
            min-width: 0;
            box-sizing: border-box;
            padding: 0 16px;
            font-size: var(--text-sm);
            font-weight: 600;
        }
        .btn-app.is-ghost:hover {
            background: var(--surface-alt);
            border-color: var(--slate);
            color: var(--charcoal);
            transform: translateY(-1px);
        }
        body.dark-mode .btn-app.is-ghost {
            color: var(--charcoal);
            border-color: var(--border-soft);
        }
        body.dark-mode .btn-app.is-ghost:hover {
            background: var(--surface-alt);
        }

        /* .btn-secondary → see unified definition below */

        /* Back to Settings button — consistent teal across all modals */
        .btn-back {
            background: var(--dark-teal);
            color: white;
            padding: 9px 18px;
            transition: background var(--duration) var(--ease);
        }
        .btn-back:hover { background: var(--teal); }


        .btn-success {
            background: var(--forest-green);
            color: white;
        }

        .btn-success:hover {
            background: var(--green);
        }

        .btn-save {
            background: var(--purple);
            color: white;
        }
        .btn-save:hover {
            background: var(--lavender);
        }

        /* .btn-secondary: neutral ghost variant */
        .btn-secondary {
            background: var(--surface-alt);
            color: var(--charcoal);
            border: 1px solid var(--border-soft);
        }
        .btn-secondary:hover { background: var(--light-grey); }

        /* btn-refresh: compact secondary/ghost button used on list headers */
        .btn-refresh {
            display: inline-flex;
            align-items: center;
            gap: 5px;
            padding: 5px 12px;
            font-size: var(--text-xs);
            font-weight: 600;
            font-family: var(--font-sans);
            cursor: pointer;
            border-radius: var(--radius-sm);
            border: 1px solid var(--border-soft);
            background: var(--surface);
            color: var(--slate);
            transition: background var(--duration) var(--ease),
                        color var(--duration) var(--ease),
                        border-color var(--duration) var(--ease);
            white-space: nowrap;
        }
        .btn-refresh:hover {
            background: var(--surface-raised);
            color: var(--charcoal);
            border-color: var(--slate);
        }
        body.dark-mode .btn-refresh {
            background: var(--ch-bg-card-alt);
            color: var(--ch-text-secondary);
            border-color: var(--ch-border);
        }
        body.dark-mode .btn-refresh:hover {
            background: var(--ch-bg-row-hover);
            color: var(--ch-text-primary);
            border-color: var(--ch-border-strong);
        }

        /* Legacy ghost alias */

        .table-container {
            background: var(--surface);
            border-radius: var(--radius-md);
            box-shadow: var(--shadow-sm);
            overflow: hidden;
        }
        /* Virtual scroll spacer rows — must be invisible even when height = 0 */
        tr.virtual-spacer,
        tr.virtual-spacer td {
            padding: 0 !important;
            margin: 0 !important;
            border: 0 !important;
            line-height: 0 !important;
            font-size: 0 !important;
            background: transparent !important;
        }


        .sortable {
            cursor: pointer;
            -webkit-user-select: none;
            user-select: none;
            position: relative;
        }
        
        .sortable.dragging {
            opacity: 0.5;
            background: var(--blue) !important;
        }
        
        .sortable.drag-over {
            border-left: 3px solid var(--blue);
        }

        /* Drag feedback for the main grid's reorderable headers — broader than
           .sortable above since group banners and Date Installed sub-columns
           are draggable (they move with their group) but aren't sortable. */
        #headerRow1 th.dragging, #tableHeaderRow th.dragging {
            opacity: 0.5;
            background: var(--blue) !important;
        }
        #headerRow1 th.drag-over, #tableHeaderRow th.drag-over {
            border-left: 3px solid var(--blue);
        }

        /* Drag feedback for reorderable modal-table headers */
        tr[data-reorder] th.dragging {
            opacity: 0.5;
            background: var(--blue) !important;
        }
        tr[data-reorder] th.drag-over {
            border-left: 3px solid var(--off-white);
        }
        tr[data-reorder] th {
            -webkit-user-select: none;
            user-select: none;
        }

        table {
            width: 100%;
            border-collapse: collapse;
        }

        th {
            background: var(--primary-grey);
            color: white;
            padding: 4px 10px !important;
            text-align: left;
            font-weight: 600;
            font-size: 11px !important;
            z-index: var(--z-dropdown);
        }

        

        .sortable:hover {
            background: var(--primary-grey);
        }

        .sort-indicator {
            display: inline-block;
            margin-left: 5px;
            font-size: var(--text-xs);
            min-width: 8px;
            opacity: 0;          /* hidden by default — no icon on unsorted columns */
            transition: opacity var(--duration) var(--ease);
        }

        .sort-indicator.asc,
        .sort-indicator.desc {
            opacity: 1;
        }

        .sort-indicator.asc::after {
            content: '↑';
            color: white;
            font-weight: 700;
        }

        .sort-indicator.desc::after {
            content: '↓';
            color: white;
            font-weight: 700;
        }

        /* Faint hint on hover — only visible on unsorted columns */
        th:hover .sort-indicator:not(.asc):not(.desc) {
            opacity: 0.35;
        }
        th:hover .sort-indicator:not(.asc):not(.desc)::after {
            content: '↕';
        }

        .filter-btn {
            background: transparent;
            border: none;
            color: rgba(255, 255, 255, 0.7);
            font-size: inherit;
            cursor: pointer;
            padding: 2px 6px;
            margin-left: 8px;
            border-radius: var(--radius-sm);
            transition: background var(--duration) var(--ease), color var(--duration) var(--ease), border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
        }

        .filter-btn:hover {
            background: rgba(255, 255, 255, 0.2);
            color: white;
        }

        .filter-btn.active {
            background: var(--teal);
            color: white;
        }

        .sortable > span {
            display: inline-block;
        }

        td {
            padding: 4px 10px !important;
            border-bottom: 1px solid var(--light-grey);
            font-size: 11px !important;
        }

        tbody tr:not(.virtual-spacer) {
            background: var(--surface);
        }

        tbody tr:nth-child(even):not(.virtual-spacer) {
            background: var(--ch-bg-row-stripe);
        }

        tbody tr:not(.virtual-spacer) {
            transition: background var(--duration) var(--ease);
        }
        tbody tr:not(.virtual-spacer):hover > td {
            /* background moved to tr rule below — td-level hover was causing
               stuck states when virtual scroll detached rows mid-hover */
        }
        
        /* Hover background + accent on the tr itself so the existing
           background transition fires correctly on mouse-enter and mouse-leave */
        tbody tr:not(.virtual-spacer)[data-hovered] {
            background: rgba(0, 163, 224, 0.05);
            box-shadow: inset 3px 0 0 rgba(69,85,95,0.6);
            box-shadow: inset 3px 0 0 color-mix(in srgb, var(--primary-grey) 60%, transparent);
        }

        body.dark-mode tbody tr:not(.virtual-spacer)[data-hovered] {
            background: var(--ch-bg-row-hover);
        }
        body.dark-mode tbody tr:not(.virtual-spacer)[data-hovered] td {
            color: var(--ch-bg-page) !important;
        }
        
        body.dark-mode tbody tr:not(.virtual-spacer)[data-hovered] td span {
            color: var(--ch-bg-page) !important;
        }
        
        body.dark-mode tbody tr:not(.virtual-spacer)[data-hovered] .cs-filter-pill {
            background: var(--ch-bg-card) !important;
            color: var(--ch-text-primary) !important;
        }

        /* Column separators on data rows — mirror the header group-boundary borders.
           The indicator bar is now inside td:nth-child(1) (customer name), so all
           nth-child references shift by 1 vs the old separate-indicator-column layout. */
        #dataTable tbody tr td:nth-child(1),
        #dataTable tbody tr td:nth-child(2),
        #dataTable tbody tr td:nth-child(3),
        #dataTable tbody tr td:nth-child(5),
        #dataTable tbody tr td:nth-child(7) {
            border-right: 1px solid var(--light-grey);
        }
        #dataTable tbody tr td:nth-child(4),
        #dataTable tbody tr td:nth-child(6) {
            border-left: 1px solid var(--light-grey);
        }

        /* Indicator bar — lives inside the customer name td (td:nth-child(1)).
           padding-left on td:first-child is set via CSS (not inline) so the
           comfortable-density override can properly increase it. */
        #dataTable tbody tr td:first-child {
            position: relative;
            padding-left: 22px !important;  /* 12px bar + 10px gap — must beat td shorthand */
        }
        .indicator-bar {
            position: absolute;
            top: 0;
            left: 0;
            bottom: 0;
            width: 12px;
            /* Full-height bar with rounded right corners only */
            border-radius: 0 4px 4px 0;
            transition: background var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
        }
        /* Subtle vertical sheen */
        .indicator-bar::after {
            content: '';
            position: absolute;
            inset: 0;
            border-radius: inherit;
            background: linear-gradient(90deg, rgba(255,255,255,0.28), rgba(255,255,255,0) 60%);
            pointer-events: none;
        }
        .indicator-bar:hover {
            opacity: 0.8;
            transform: scaleX(1.3);
        }

        /* Row tints removed — status is indicated by the left-edge indicator bar only. */

        .status-G .indicator-bar {
            background: var(--blue);
        }

        .status-Y .indicator-bar {
            background: var(--teal);
        }

        .status-R .indicator-bar {
            background: var(--orange);
        }

        .status-U .indicator-bar {
            background: var(--green);
        }

        .status-NOTV21 .indicator-bar,
        .status-NONE .indicator-bar {
            background: var(--purple);
        }

        .status-BLACK .indicator-bar {
            background: var(--primary-grey);
        }

        .editable {
            cursor: pointer;
            position: relative;
        }

        .editable:hover {
            background: rgba(255, 158, 24, 0.10);
        }

        input[type="text"], select {
            width: 100%;
            padding: 6px;
            border: 2px solid var(--teal);
            border-radius: var(--radius-sm);
            font-size: var(--text-sm);
            font-family: inherit;
        }

        .modal {
            display: none;
            position: fixed;
            z-index: var(--z-overlay);
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            background: rgba(0,0,0,0.5);
            -webkit-backdrop-filter: blur(3px);
            backdrop-filter: blur(3px);
        }

        .modal-content {
            animation: modalIn var(--duration) var(--ease);
            background: var(--surface);
            margin: 5% auto;
            padding: 0;
            width: 90%;
            max-width: 1200px;
            border-radius: var(--radius-md);
            box-shadow: var(--shadow-lg);
            max-height: 85vh;
            overflow: auto;
        }

        .modal-header {
            background: var(--primary-red);
            color: white;
            padding: 14px 22px;
            border-radius: var(--radius-md) var(--radius-md) 0 0;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .modal-header h2 {
            font-size: 17px;
            font-weight: 600;
            letter-spacing: 0.01em;
            margin: 0;
        }

        .close {
            color: white;
            font-size: var(--text-3xl);
            font-weight: bold;
            cursor: pointer;
            line-height: 20px;
        }

        .close:hover {
            opacity: 0.8;
        }

        .modal-body {
            padding: 30px;
        }

        .progress-section {
            margin-top: 30px;
        }

        .progress-section h3 {
            color: var(--dark-blue);
            font-size: var(--text-xl);
            margin-bottom: 15px;
        }

        .progress-table {
            width: 100%;
            background: var(--surface);
            border-radius: var(--radius-sm);
            overflow: hidden;
        }

        .progress-table th {
            background: var(--dark-blue);
            color: white;
            padding: 5px 8px;
            font-size: 11px;
        }

        .progress-table td {
            padding: 4px 8px;
            text-align: center;
            border-bottom: 1px solid var(--light-grey);
        }

        .alert {
            padding: 15px 20px;
            border-radius: var(--radius-sm);
            margin-bottom: 20px;
            display: none;
        }

        .alert-success {
            background: rgba(135, 190, 80, 0.15);
            color: var(--forest-green);
            border-left: 4px solid var(--green);
        }

        .alert-error {
            background: rgba(240, 48, 48, 0.12);
            color: var(--dark-red);
            border-left: 4px solid var(--red);
        }


        /* ── Row action menu button (⋮) ──────────────────────────────────────
           Shows on row hover / keyboard focus as a keyboard-accessible
           alternative to the right-click context menu. */
        .row-menu-btn {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            margin-left: 8px;
            padding: 2px 7px;
            background: none;
            border: 1px solid transparent;
            border-radius: var(--radius-sm);
            cursor: pointer;
            font-size: 15px;
            line-height: 1;
            color: var(--slate);
            opacity: 0;
            transition: opacity 0.15s, background 0.15s, border-color 0.15s;
            vertical-align: middle;
            flex-shrink: 0;
        }
        tr:hover .row-menu-btn,
        tr.row-expanded .row-menu-btn,
        .row-menu-btn:focus-visible {
            opacity: 1;
            border-color: var(--light-grey);
        }
        .row-menu-btn:hover {
            background: var(--light-grey);
            color: var(--charcoal);
        }
        /* Ensure name cell can clip the button neatly */
        #dataTable td:nth-child(2) {
            white-space: nowrap;
        }
        .scrollable-table {
            /* overflow-y: scroll — scrollbar always present, giving a consistent
               content width so the table always fills edge-to-edge with no gap. */
            overflow-y: scroll;
            max-height: calc(100vh - 260px);
            position: relative;
            scrollbar-width: thin;
        }
        .scrollable-table::-webkit-scrollbar       { width: 8px; }
        .scrollable-table::-webkit-scrollbar-track { background: var(--off-white); }
        .scrollable-table::-webkit-scrollbar-thumb { background: var(--light-grey); border-radius: 4px; }
        .scrollable-table::-webkit-scrollbar-thumb:hover { background: var(--slate); }
        /* ── Sticky header: stick the whole thead as a unit ─────────────────────
           Using position:sticky on individual <th> cells inside a multi-row
           thead with rowspan elements is a known browser inconsistency — the
           row-height offset for the second row misbehaves.
           Sticking <thead> itself as a single block is the reliable approach. */
        #dataTable thead {
            position: sticky;
            top: 0;
            z-index: var(--z-sticky);
            /* Promotes thead to its own compositor layer, preventing the 1px
               subpixel rendering gap Chrome/Edge can show between a sticky
               thead and the tbody content beneath it. */
            will-change: transform;
        }
        .scrollable-table thead th {
            background: var(--primary-grey);
            color: white;
        }
        #dataTable {
            width: 100%;
            min-width: 100%;
            /* table-layout:fixed — widths are set once from the <colgroup> by
               initColumnResize and never recalculated by the browser. This prevents
               columns from shifting as virtual scroll swaps rows in/out of the DOM.
               All 9 columns are managed explicitly; cols 4-9 are converted to px
               on first render just like cols 1-3. */
            table-layout: fixed;
            /* Override the global `table { border-collapse: collapse }` reset.
               Using `separate` + `border-spacing:0` gives identical visual results
               for cells with no border, but makes each cell's border completely
               independent — no shared-border resolution, no even/odd pixel-rounding
               artifacts when colspan/rowspan groups are involved. */
            border-collapse: separate;
            border-spacing: 0;
        }

        /* Under table-layout:fixed every cell is clipped to its column width.
           Apply overflow:hidden + ellipsis to all data cells so long text never
           breaks the layout, and to all header cells so they don't overflow either. */
        #dataTable td {
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        #dataTable th {
            overflow: hidden;
        }
        /* Environment cell: allow pills to wrap rather than ellipsis */
        #dataTable td.env-cell {
            white-space: normal;
            overflow: visible;
        }

        /* ── Per-unit column dividers ────────────────────────────────────────
           Divider lines use background-image gradients applied directly as
           inline style.backgroundImage in JS (not as a CSS class), so they
           stack additively over any inline background already on the cell.
           The gradient occupies only the rightmost 2px (header) or 1px (body)
           and is transparent elsewhere — cannot bleed across cell boundaries
           regardless of border-collapse mode, compositing, or overflow. */
        /* (No CSS class rules needed — dividers are set inline by JS) */
        .col-resize-handle {
            position: absolute;
            right: -3px;
            top: 0;
            bottom: 0;
            width: 7px;
            cursor: col-resize;
            z-index: var(--z-col-resize);
            background: transparent;
            transition: background 0.15s;
        }
        .col-resize-handle:hover { background: rgba(255,255,255,0.45); }
        .col-resize-handle.resizing { background: rgba(255,255,255,0.7); }
        /* Prevent text selection while dragging a column */
        body.col-resizing { -webkit-user-select: none; user-select: none; cursor: col-resize !important; }
        body.col-resizing * { cursor: col-resize !important; }

        /* Sub-header row (Version / Date Installed) background is set inline per-column
           to match TEST/PRODUCTION/DEV tinted gradients. */
        /* Modal search / text inputs should be transparent in dark mode
           so they don't flash white against the dark card background. */
        body.dark-mode .modal input[type='search'],
        body.dark-mode .modal input[type='text'] {
            background: transparent;
            color: var(--ch-text-primary);
            border-color: var(--ch-border-strong);
        }

        body.dark-mode .scrollable-table thead th {
            background: var(--ch-bg-card-alt);
        }

        .main-stats {
            display: grid;
            grid-template-columns: repeat(5, 1fr);
            gap: 20px;
            margin-bottom: 20px;
            /* Establish a stacking context above the table so tooltips are never
               obscured by table rows or the sticky thead (z-index:2).
               Value of 10 is above the table (z-index:2) but below the sticky page
               header (z-index:var(--z-popover)=100) so cards scroll under the header.
               Tooltip visibility is handled by the body-level #statCardTooltip
               (position:fixed; z-index:9999) which is independent of this context. */
            position: relative;
            z-index: var(--z-filter-dialog);
        }
        /* The first three cards are the compliance cluster; the last two are
           secondary "tracking" cards. A divider gap separates the groups. */
        /* (Group divider removed — all five cards now render uniformly.) */
        .main-stat-card.tracking-group-start {
            margin-left: 0;
        }
        @media (max-width: 1100px) {
            .main-stats { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
            .main-stat-card.tracking-group-start { margin-left: 0; }
            .main-stat-card.tracking-group-start::before { display: none; }
        }

        .main-stat-card {
            --accent: var(--blue);
            position: relative;
            background: var(--surface); /* fallback for browsers without color-mix */
            /* Luminous wash tinted to each card's own accent color. */
            background:
                radial-gradient(140% 160% at -5% -5%, color-mix(in srgb, var(--accent) 32%, transparent), transparent 58%),
                radial-gradient(70% 80% at 105% 110%, color-mix(in srgb, var(--accent) 10%, transparent), transparent 55%),
                linear-gradient(155deg, color-mix(in srgb, var(--accent) 16%, var(--surface)) 0%, var(--surface) 65%);
            padding: 25px;
            border-radius: var(--radius-lg);
            box-shadow: var(--shadow-sm);
            /* border-top IS the accent bar — inherits border-radius natively,
               always perfectly flush with the card corners. */
            border-top: 5px solid var(--accent);
            border-left: 1px solid var(--border-soft);
            border-right: 1px solid var(--border-soft);
            border-bottom: 1px solid var(--border-soft);
            border-left: 1px solid color-mix(in srgb, var(--accent) 20%, var(--border-soft));
            border-right: 1px solid color-mix(in srgb, var(--accent) 20%, var(--border-soft));
            border-bottom: 1px solid color-mix(in srgb, var(--accent) 20%, var(--border-soft));
            transition: transform var(--duration) var(--ease-spring),
                        box-shadow var(--duration) var(--ease);
        }

        /* All five stat cards share one treatment — same surface, shadow,
           padding, and value size. Color (the top accent bar) is the only
           difference between them. */
        .main-stat-card.hero,
        .main-stat-card.tracking {
            box-shadow: var(--shadow-sm);
            padding: 25px;
        }
        .main-stat-card.hero h3 { color: var(--slate); }
        .main-stat-card .main-stat-value { font-size: var(--text-2xl); }

        .main-stat-card:hover {
            box-shadow: var(--shadow-lg);
            transform: translateY(-3px);
        }

        .main-stat-card.active-filter {
            box-shadow: var(--shadow-lg);
            /* Fallback for Firefox <113 / Safari <16.2 (no color-mix() support) */
            background: linear-gradient(155deg, rgba(162,2,52,0.08) 0%, var(--surface) 65%);
            background:
                radial-gradient(140% 160% at -5% -5%, color-mix(in srgb, var(--accent) 42%, transparent), transparent 58%),
                radial-gradient(70% 80% at 105% 110%, color-mix(in srgb, var(--accent) 14%, transparent), transparent 55%),
                linear-gradient(155deg, color-mix(in srgb, var(--accent) 22%, var(--surface)) 0%, var(--surface) 65%);
            border-top-width: 7px;
            border-color: var(--border-soft);
            border-color: color-mix(in srgb, var(--accent) 35%, var(--border-soft));
        }

        .main-stat-card.test { --accent: var(--teal); }
        .main-stat-card.no-compliance { --accent: var(--orange); }
        .main-stat-card.upgrade-in-progress { --accent: var(--green); }
        .main-stat-card.non-v21 { --accent: var(--purple); }

        /* Empty-data state: dim the card and its (now "—") value so a fresh,
           data-less install doesn't read as five alarming zeros. */
        .main-stat-card.stat-empty { opacity: 0.55; }
        .main-stat-card.stat-empty .main-stat-value { color: var(--slate); font-weight: 700; }
        .main-stat-card.stat-empty .main-stat-subtitle { font-style: italic; }

        .main-stat-card h3 {
            color: var(--slate);
            font-size: var(--text-2xs);
            text-transform: uppercase;
            letter-spacing: 0.3px;
            margin-bottom: 10px;
            display: flex;
            align-items: center;
            gap: 6px;
        }

        /* Inline sparkline — a tiny trend of the metric over recent snapshots,
           turning a static number into a small story. Drawn from stats history. */
        .stat-spark {
            display: none;  /* sparklines removed per user request */
            width: 100%;
            height: 22px;
            margin-top: 10px;
            overflow: visible;
        }
        .stat-spark .spark-line {
            fill: none;
            stroke: var(--accent);
            stroke-width: 2;
            stroke-linecap: round;
            stroke-linejoin: round;
            vector-effect: non-scaling-stroke;
        }
        .stat-spark .spark-area {
            fill: var(--accent);
            opacity: 0.10;
        }
        .stat-spark .spark-dot {
            fill: var(--accent);
        }
        .stat-spark.spark-empty { display: none; }

        .stat-info-icon {
            font-size: var(--text-sm);
            cursor: help;
            position: relative;
            display: inline-flex;
            align-items: center;
            opacity: 0.9;
            transition: opacity var(--duration) var(--ease);
        }
        
        .stat-info-icon svg {
            width: 16px;
            height: 16px;
            fill: var(--light-grey);
            transition: fill var(--duration) var(--ease);
        }

        .stat-info-icon:hover {
            opacity: 1;
        }
        
        .stat-info-icon:hover svg {
            fill: var(--slate);
        }

        .stat-info-icon .tooltip {
            /* Hidden permanently — replaced by #statCardTooltip (body-level,
               position:fixed) which escapes all stacking contexts. */
            display: none !important;
        }

        /* Caret and hover-show rules removed — JS tooltip (#statCardTooltip) handles display */

        body.dark-mode .stat-info-icon .tooltip {
            background: var(--surface);
            color: var(--charcoal);
        }

        body.dark-mode .stat-info-icon .tooltip::after {
            border-color: transparent transparent var(--surface) transparent;
        }

        .main-stat-value {
            font-size: var(--text-3xl);
            font-weight: 900;
            letter-spacing: -0.02em;
            font-variant-numeric: tabular-nums;
            color: var(--charcoal);
            margin-bottom: 5px;
        }

        .main-stat-subtitle {
            color: var(--slate);
            font-size: var(--text-sm);
        }

        .history-controls {
            display: flex;
            gap: 15px;
            align-items: center;
            margin-bottom: 20px;
            padding: 15px;
            background: var(--off-white);
            border-radius: var(--radius-sm);
        }

        .history-controls label {
            font-weight: 600;
            color: var(--slate);
        }

        .history-controls select {
            padding: 8px 12px;
            border: 2px solid var(--light-grey);
            border-radius: var(--radius-sm);
            font-size: var(--text-sm);
        }

        /* Dark Mode Styles */
        body.dark-mode .header {
            background: rgba(29, 36, 41, 0.72);
            border-bottom-color: var(--dark-red);
        }
        @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
            body.dark-mode .header { background: var(--ch-bg-card); }
        }

        /* Ensure logo stays crisp regardless of backdrop-filter compositing */
        #headerLogoBox img,
        .admin-header-logo img {
            image-rendering: -webkit-optimize-contrast;
            image-rendering: crisp-edges;
            transform: translateZ(0);
            backface-visibility: hidden;
        }

        /* In dark mode, invert the logo to white — standard practice for logos
           with dark elements on a dark background. Covers all logo placements. */
        body.dark-mode #headerLogoBox img,
        body.dark-mode .admin-header-logo img,
        body.dark-mode .u-logo-full,
        body.dark-mode .u-logo-sm {
            filter: brightness(0) invert(1);
        }

        body.dark-mode .main-stat-card {
            background: var(--ch-bg-card); /* fallback */
            background:
                radial-gradient(140% 160% at -5% -5%, color-mix(in srgb, var(--accent) 48%, transparent), transparent 58%),
                radial-gradient(70% 80% at 105% 110%, color-mix(in srgb, var(--accent) 18%, transparent), transparent 55%),
                linear-gradient(155deg, color-mix(in srgb, var(--accent) 24%, var(--ch-bg-card)) 0%, var(--ch-bg-card) 65%);
            color: var(--ch-text-primary);
            border-color: rgba(255,255,255,0.08);
            border-color: color-mix(in srgb, var(--accent) 30%, rgba(255,255,255,0.08));
        }
        body.dark-mode .main-stat-card.hero,
        body.dark-mode .main-stat-card.tracking {
            background: var(--ch-bg-card);
            background:
                radial-gradient(140% 160% at -5% -5%, color-mix(in srgb, var(--accent) 48%, transparent), transparent 58%),
                radial-gradient(70% 80% at 105% 110%, color-mix(in srgb, var(--accent) 18%, transparent), transparent 55%),
                linear-gradient(155deg, color-mix(in srgb, var(--accent) 24%, var(--ch-bg-card)) 0%, var(--ch-bg-card) 65%);
        }
        
        body.dark-mode .main-stat-card h3 {
            color: var(--ch-text-muted);
        }
        
        body.dark-mode .main-stat-card .main-stat-value {
            color: white; /* was ch-bg-card-alt (dark bg) — use white for legibility */
        }
        
        body.dark-mode .main-stat-card .main-stat-subtitle {
            color: var(--ch-text-muted);
        }
        
        body.dark-mode .main-stat-card.active-filter {
            background: var(--ch-bg-row-hover);
        }

        /* ── Dark mode: toast notifications ── */
        body.dark-mode #appToast {
            background: var(--ch-bg-card-alt);
            color: var(--ch-text-primary);
            border: 1px solid var(--ch-border-strong);
        }
        body.dark-mode #appToast.toast-error {
            /* Fallback for Firefox <113 / Safari <16.2 */
            background: rgba(199,5,5,0.15);
            background: color-mix(in srgb, var(--dark-red) 20%, var(--ch-bg-card-alt));
            border-color: var(--dark-red);
        }
        body.dark-mode #appToast.toast-warning {
            /* Fallback for Firefox <113 / Safari <16.2 */
            background: rgba(194,87,0,0.15);
            background: color-mix(in srgb, var(--burnt-orange) 20%, var(--ch-bg-card-alt));
            border-color: var(--burnt-orange);
        }

        /* ── Dark mode: environment pills (inline style override) ── */
        body.dark-mode .cs-filter-pill {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-primary) !important;
            border: 1px solid var(--ch-border);
        }
        body.dark-mode .cs-filter-pill:hover {
            background: var(--ch-bg-row-hover) !important;
            color: var(--ch-text-primary) !important;
        }

        /* ── Dark mode: quick-filter active state distinction ── */
        body.dark-mode .quick-filter-pill {
            background: var(--ch-bg-card) !important;
            color: var(--ch-text-muted) !important;
            border-color: var(--ch-border) !important;
        }
        body.dark-mode .quick-filter-pill:hover {
            background: var(--ch-bg-row-hover) !important;
            color: var(--ch-text-primary) !important;
        }
        body.dark-mode .quick-filter-pill.active,
        body.dark-mode button[data-filter-active="true"] {
            background: var(--primary-red) !important;
            color: white !important;
            border-color: var(--primary-red) !important;
            box-shadow: 0 0 0 2px rgba(162,2,52,0.4) !important;
        }

        /* ── Dark mode: custom scrollbar ── */

        /* ── 3.1: Dark mode — global search input ── */
        body.dark-mode #globalSearchInput {
            background: var(--ch-bg-card) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary) !important;
        }
        body.dark-mode #globalSearchInput::placeholder { color: var(--ch-text-muted) !important; }
        body.dark-mode .filter-summary-bar { background: var(--ch-bg-card-alt); border-color: var(--ch-border); }
        body.dark-mode #filterSearchInput {
            background: var(--ch-bg-card-alt) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary) !important;
        }
        body.dark-mode .version-operator-btn {
            background: var(--ch-bg-card-alt) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary) !important;
        }
        body.dark-mode .version-operator-btn:hover { background: var(--ch-bg-row-hover) !important; }
        body.dark-mode #versionFilterInput {
            background: var(--ch-bg-card-alt) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary) !important;
        }
        /* Column filter dialog checkbox list */
        body.dark-mode #filterCheckboxList label { color: var(--ch-text-secondary); }
        body.dark-mode #filterCheckboxList { background: var(--ch-bg-card); }
        /* Stale data banner */
        body.dark-mode #staleDataBanner {
            background: rgba(199,87,0,0.18) !important;
            border-color: var(--burnt-orange) !important;
        }

        body.dark-mode ::-webkit-scrollbar { width: 8px; height: 8px; }
        body.dark-mode ::-webkit-scrollbar-track { background: var(--ch-bg-card); }
        body.dark-mode ::-webkit-scrollbar-thumb {
            background: var(--ch-border-strong);
            border-radius: 4px;
        }
        body.dark-mode ::-webkit-scrollbar-thumb:hover { background: var(--ch-text-muted); }


           background so CS Data, Opportunities, and Asset Info look consistent. */
        body.dark-mode #csInfoSection,
        body.dark-mode #oppInfoSection,
        body.dark-mode #assetInfoSection {
            background: var(--ch-bg-card) !important;
            border-color: rgba(255,255,255,0.12);
        }

        /* Filter bar and custom-fields panel inside asset section */
        body.dark-mode #assetFilterBar,
        body.dark-mode #assetDetailsCustomFields {
            background: var(--ch-bg-card-alt) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary);
        }

        /* Global dark mode modal fix: all modal-content surfaces use dark card bg */
        body.dark-mode .modal-content {
            background: var(--ch-bg-card) !important;
            color: var(--ch-text-primary);
        }

        /* Inline charcoal/slate text is invisible on dark backgrounds */
        body.dark-mode [style*='var(--charcoal)'],
        body.dark-mode [style*='color:var(--charcoal)'],
        body.dark-mode [style*='color: var(--charcoal)'] {
            color: var(--ch-text-primary) !important;
        }
        body.dark-mode [style*='color:var(--slate)'],
        body.dark-mode [style*='color: var(--slate)'] {
            color: var(--ch-text-muted) !important;
        }

        /* btn-secondary has no dark override — fix text/bg */
        body.dark-mode .btn-secondary {
            background: var(--ch-bg-card-alt);
            color: var(--ch-text-primary);
            border-color: var(--ch-border);
        }
        body.dark-mode .btn-secondary:hover {
            background: var(--ch-bg-row-hover);
        }

        /* Filter pills in dark mode active state */
        body.dark-mode .quick-filter-pill[style*='background: var(--slate)'] {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-primary) !important;
            border-color: var(--ch-border-strong) !important;
        }

        body.dark-mode .table-container {
            background: var(--ch-bg-card);
        }


        /* ── SVG sprite icons (.si) ───────────────────────────────────────── */
        .si {
            display: inline-block;
            width: 1em;
            height: 1em;
            stroke: currentColor;
            fill: none;
            stroke-width: 2;
            stroke-linecap: round;
            stroke-linejoin: round;
            vertical-align: -0.15em;
            flex-shrink: 0;
        }
        .si-sm  { width: 14px; height: 14px; }
        .si-md  { width: 18px; height: 18px; }
        .si-lg  { width: 22px; height: 22px; }
        .si-xl  { width: 26px; height: 26px; }

        /* ── Customer Tab Bar ─────────────────────────────────────────────── */
        #customer-tab-bar {
            display: flex;
            align-items: flex-end;
            background: var(--off-white);
            border: 1px solid var(--light-grey);
            border-bottom: 2px solid var(--light-grey);
            border-radius: var(--radius-md) var(--radius-md) 0 0;
            padding: 0 6px;
            gap: 3px;
            overflow-x: auto;
            overflow-y: visible;
            min-height: 52px;
            scrollbar-width: none; /* Safari */ overflow: -moz-scrollbars-none;
            position: relative;
            z-index: var(--z-sticky);
        }
        #customer-tab-bar::-webkit-scrollbar { display: none; }

        .ctab {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            padding: 0 18px;
            height: 44px;
            border: 1px solid transparent;
            border-bottom: none;
            background: none;
            cursor: pointer;
            font-size: var(--text-sm);
            font-family: inherit;
            color: var(--slate);
            font-weight: 600;
            white-space: nowrap;
            border-radius: var(--radius-sm) var(--radius-sm) 0 0;
            transition: background 0.12s ease, color 0.12s ease;
            position: relative;
            flex-shrink: 0;
            max-width: 220px;
            margin-bottom: -1px;
        }
        /* Closeable tabs get right padding to make room for the × */
        .ctab-customer {
            padding-right: 32px;
        }
        .ctab:hover {
            background: var(--surface);
            color: var(--charcoal);
            border-color: var(--light-grey);
        }
        /* ── Fixed tabs (All Customers + All Products): identical behaviour ── */
        .ctab-queue,
        .ctab-product-search,
        .ctab-config-matrix {
            background: var(--off-white);
            border-color: var(--light-grey);
            box-shadow: inset 0 4px 0 var(--primary-grey);
            color: var(--primary-grey);
            font-weight: 500;
        }
        .ctab-queue:hover,
        .ctab-product-search:hover,
        .ctab-config-matrix:hover {
            background: var(--off-white);
            background: color-mix(in srgb, var(--surface) 55%, var(--off-white));
            color: var(--charcoal);
            border-color: var(--light-grey);
        }
        .ctab-queue.ctab-active,
        .ctab-product-search.ctab-active,
        .ctab-config-matrix.ctab-active {
            background: var(--surface);
            border-color: var(--light-grey);
            border-bottom: 2px solid var(--surface);
            margin-bottom: -2px;
            box-shadow: inset 0 4px 0 var(--primary-grey);
            color: var(--charcoal);
            font-weight: 700;
        }
        /* ── Product tabs (per-product from All Products) ── */
        .ctab-product {
            padding-right: 32px;
            background: var(--off-white);
            border-color: var(--light-grey);
            box-shadow: inset 0 4px 0 var(--primary-grey);
            color: var(--primary-grey);
            font-weight: 500;
        }
        /* Product tab icon always stays dark-teal */
        .ctab-product svg { color: var(--dark-teal); opacity: 0.9; }
        .ctab-product:hover {
            background: var(--off-white);
            background: color-mix(in srgb, var(--surface) 55%, var(--off-white));
            color: var(--charcoal);
            border-color: var(--light-grey);
        }
        .ctab-product.ctab-active {
            color: var(--dark-teal);
            font-weight: 700;
            border-color: var(--light-grey);
            border-bottom: 2px solid var(--surface);
            margin-bottom: -2px;
            box-shadow: inset 0 4px 0 var(--dark-teal);
            background: var(--surface);
        }
        /* ── Customer tabs (per-customer) ── */
        .ctab-customer {
            background: var(--off-white);
            border-color: var(--light-grey);
            box-shadow: inset 0 4px 0 var(--primary-grey);
            color: var(--primary-grey);
            font-weight: 500;
        }
        /* Customer tab icon always stays primary-red */
        .ctab-customer svg { color: var(--primary-red); opacity: 0.85; }
        .ctab-customer:hover {
            background: var(--off-white);
            background: color-mix(in srgb, var(--surface) 55%, var(--off-white));
            color: var(--charcoal);
            border-color: var(--light-grey);
        }
        .ctab-customer.ctab-active {
            color: var(--primary-red);
            font-weight: 700;
            border-color: var(--light-grey);
            border-bottom: 2px solid var(--surface);
            margin-bottom: -2px;
            box-shadow: inset 0 4px 0 var(--primary-red);
            background: var(--surface);
        }
        body.dark-mode .ctab-customer {
            background: var(--ch-bg-card);
            border-color: var(--ch-border);
            color: var(--light-grey);
        }
        .ctab-label {
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
            flex: 1;
            min-width: 0;
        }
        .ctab-shortname {
            font-size: 10px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.04em;
            background: rgba(162,2,52,0.12);
            background: color-mix(in srgb, var(--primary-red) 12%, transparent);
            color: var(--primary-red);
            padding: 1px 5px;
            border-radius: 10px;
            flex-shrink: 0;
        }
        .ctab-active .ctab-shortname {
            background: rgba(162,2,52,0.18);
            background: color-mix(in srgb, var(--primary-red) 18%, transparent);
            color: var(--primary-red);
        }
        .ctab-close {
            position: absolute;
            right: 7px;
            top: 50%;
            transform: translateY(-50%);
            width: 16px;
            height: 16px;
            border-radius: 50%;
            background: none;
            border: none;
            cursor: pointer;
            font-size: 14px;
            line-height: 1;
            color: var(--slate);
            display: inline-flex;
            align-items: center;
            justify-content: center;
            padding: 0;
            flex-shrink: 0;
            transition: background 0.12s, color 0.12s;
            -webkit-user-select: none;
            user-select: none;
        }
        .ctab-close:hover {
            background: rgba(162,2,52,0.15);
            background: color-mix(in srgb, var(--primary-red) 15%, transparent);
            color: var(--primary-red);
        }

        /* ── Queue panel and customer detail panel ────────────────────────── */
        #queue-panel {
            border-radius: 0 0 var(--radius-md) var(--radius-md);
        }
        #queue-panel .table-container {
            border-radius: 0 0 var(--radius-md) var(--radius-md);
            border: 1px solid var(--light-grey);
            border-top: none;
        }
        #customer-detail-panel {
            background: var(--surface);
            border: 1px solid var(--light-grey);
            border-top: none;
            border-radius: 0 0 var(--radius-md) var(--radius-md);
            /* Slide-in from right */
            animation: detailSlideIn 0.2s ease forwards;
        }
        #customer-detail-panel.closing {
            animation: detailSlideOut 0.2s ease forwards;
            pointer-events: none;
        }
        @keyframes detailSlideIn {
            from { opacity:0; transform:translateX(32px); }
            to   { opacity:1; transform:translateX(0);    }
        }
        @keyframes detailSlideOut {
            from { opacity:1; transform:translateX(0);    }
            to   { opacity:0; transform:translateX(48px); }
        }
        /* Inline save checkmark that fades */
        .inline-saved {
            display: inline-flex;
            align-items: center;
            gap: 4px;
            font-size: var(--text-xs);
            font-weight: 700;
            color: var(--forest-green);
            opacity: 1;
            transition: opacity 0.5s ease 1.5s;  /* fade after 1.5s, over 0.5s */
            pointer-events: none;
        }
        .inline-saved.fade { opacity: 0; }
        #customer-detail-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            flex-wrap: wrap;
            gap: 16px;
            padding: 20px 24px 18px;
            border-bottom: 2px solid var(--light-grey);
            background: var(--off-white);
        }
        #customer-detail-name-block {
            display: flex;
            align-items: center;
            gap: 14px;
            min-width: 0;
        }
        #customer-detail-shortname-badge {
            flex-shrink: 0;
            width: 50px;
            height: 50px;
            border-radius: var(--radius-sm);
            background: var(--primary-red);
            color: white;
            font-size: 28px;
            font-weight: 900;
            letter-spacing: -0.01em;
            display: flex;
            align-items: center;
            justify-content: center;
            text-transform: uppercase;
            line-height: 1;
            text-shadow: 0 1px 3px rgba(0,0,0,0.25);
        }
        #assetDetailsCustomerName {
            margin: 0 0 2px;
            font-size: 18px;
            font-weight: 700;
            color: var(--charcoal);
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        #customer-detail-subtitle {
            font-size: var(--text-xs);
            color: var(--slate);
            font-weight: 500;
        }
        #customer-detail-loading {
            display: inline-flex;
            align-items: center;
            gap: 7px;
            font-size: var(--text-sm);
            color: var(--slate);
            font-weight: 500;
        }
        .ctab-spinner {
            display: inline-block;
            width: 14px;
            height: 14px;
            border: 2px solid var(--light-grey);
            border-top-color: var(--primary-red);
            border-radius: 50%;
            animation: ctab-spin 0.7s linear infinite;
        }
        @keyframes ctab-spin {
            to { transform: rotate(360deg); }
        }
        #customer-detail-body {
            padding: 20px 24px;
            transition: opacity 0.15s ease;
        }

        /* dark mode tab bar */
        body.dark-mode #customer-tab-bar {
            background: var(--ch-bg-card);
            border-color: var(--ch-border);
        }
        body.dark-mode .ctab { color: var(--ch-text-muted); }
        body.dark-mode .ctab:hover { background: var(--ch-bg-card-alt); color: var(--ch-text-primary); }
        body.dark-mode .ctab.ctab-active { background: var(--ch-bg-card-alt); border-color: var(--ch-border); }
        body.dark-mode #customer-detail-panel { background: var(--ch-bg-card); border-color: var(--ch-border); }
        body.dark-mode #customer-detail-header { background: var(--ch-bg-card-alt); border-color: var(--ch-border); }
        body.dark-mode #assetDetailsCustomerName { color: var(--ch-text-primary); }
        body.dark-mode #queue-panel .table-container { border-color: var(--ch-border); }
        body.dark-mode .ctab-shortname { background: var(--ch-bg-card); color: var(--ch-text-muted); }

        /* responsive tab bar */
        @media (max-width: 600px) {
            .ctab { padding: 0 10px; height: 36px; font-size: 12px; max-width: 160px; }
            #customer-detail-header { flex-wrap: wrap; padding: 14px 16px; }
            #customer-detail-body { padding: 14px 16px; }
            #customer-detail-shortname-badge { width: 40px; height: 40px; font-size: 22px; }
            #assetDetailsCustomerName { font-size: 16px; }
        }

        body.dark-mode .progress-table {
            background: var(--ch-bg-card);
        }
        body.dark-mode .progress-table th {
            background: var(--ch-bg-card-alt);
            color: white;
        }
        body.dark-mode .progress-table td {
            color: var(--ch-text-primary);
            border-bottom-color: var(--ch-border);
        }

        body.dark-mode table thead {
            background: var(--ch-bg-page);
            color: white; /* was ch-bg-card-alt (dark bg) — use white for legibility */
        }
        
        body.dark-mode table th {
            color: white; /* was ch-bg-card-alt (dark bg) — use white for legibility */
        }
        
        body.dark-mode table td {
            color: var(--ch-text-primary);
            border-bottom-color: var(--ch-border-strong);
        }

        /* Version cells use brand blue/teal; brighten them in dark mode so they
           stay legible on the dark rows (inline styles set the light-mode color). */
        body.dark-mode .prod-version-cell {
            color: var(--blue) !important; /* intentional: brightened beyond var(--blue) for legibility on dark bg */
        }
        body.dark-mode .test-version-cell {
            color: var(--teal) !important; /* intentional: brightened beyond var(--teal) for legibility on dark bg */
        }

        body.dark-mode table tbody tr {
            background: var(--ch-bg-card);
        }

        body.dark-mode table tbody tr:nth-child(even) {
            background: var(--ch-bg-row-hover);
        }

        body.dark-mode table tbody tr:hover {
            background: var(--ch-text-faint) !important;
        }

        body.dark-mode .modal-header {
            background: var(--primary-red);
        }
        
        body.dark-mode .modal-body {
            color: var(--ch-text-primary);
        }
        
        body.dark-mode .modal-body p {
            color: var(--ch-text-muted);
        }
        
        body.dark-mode .modal-body h3,
        body.dark-mode .modal-body h4 {
            color: var(--ch-bg-card-alt);
        }

        body.dark-mode input,
        body.dark-mode select {
            background: var(--ch-bg-card-alt);
            color: var(--ch-text-primary);
            border-color: var(--ch-border-strong);
        }
        
        body.dark-mode input::placeholder {
            color: var(--ch-text-muted);
        }
        
        body.dark-mode textarea {
            background: var(--ch-bg-card-alt);
            color: var(--ch-text-primary);
            border-color: var(--ch-border-strong);
        }

        body.dark-mode .editable:hover {
            background: var(--ch-border-strong);
        }

        /* Dark-mode polish for inline elements that use literal colors */
        body.dark-mode kbd {
            background: var(--ch-bg-row-hover) !important;
            color: var(--ch-bg-card-alt) !important;
            border-color: var(--ch-border-strong) !important;
        }

        body.dark-mode code {
            background: var(--ch-bg-row-hover) !important;
            color: var(--blue) !important;
        }

        body.dark-mode .user-menu-item:hover {
            background: var(--ch-bg-row-hover);
        }

        body.dark-mode a {
            color: var(--blue);
        }

        /* Theme Toggle Button */

        /* Exception Badges */

        /* Filter Chips */
        .filter-chip {
            display: inline-flex;
            align-items: center;
            gap: 6px;
            padding: 4px 10px;
            background: var(--blue);
            color: white;
            border-radius: var(--radius-lg);
            font-size: var(--text-xs);
            font-weight: 600;
            cursor: pointer;
            transition: background var(--duration) var(--ease), color var(--duration) var(--ease), border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
        }

        .filter-chip:hover {
            background: var(--dark-blue);
            transform: translateY(-1px);
        }

        .filter-chip-close {
            font-size: var(--text-sm);
            line-height: 1;
            opacity: 0.8;
        }

        .filter-chip-close:hover {
            opacity: 1;
        }

        /* Keyboard Navigation - Focus Indicators */
        /* Additional specificity for role-based elements — handled in the consolidated
           focus block above. This section kept for legacy comment continuity. */

        .btn:focus,
        .sortable:focus,
        .editable:focus {
            outline: 3px solid var(--blue);
            outline-offset: 2px;
        }

        /* Skip to main content link */
        .skip-link {
            position: absolute;
            top: -40px;
            left: 0;
            background: var(--blue);
            color: white;
            padding: 8px 16px;
            text-decoration: none;
            z-index: var(--z-overlay);
            border-radius: 0 0 4px 0;
        }

        .skip-link:focus {
            top: 0;
        }

        /* Context Menu */
        .context-menu {
            position: fixed;
            background: var(--surface);
            border: 2px solid var(--light-grey);
            border-radius: var(--radius-sm);
            box-shadow: var(--shadow-md);
            padding: 8px 0;
            z-index: var(--z-tooltip);
            min-width: 200px;
            display: none;
        }

        .context-menu-item {
            padding: 10px 16px;
            cursor: pointer;
            display: flex;
            align-items: center;
            gap: 10px;
            color: var(--charcoal);
            font-size: var(--text-sm);
            transition: background var(--duration) var(--ease);
        }

        .context-menu-item:hover {
            background: var(--off-white);
        }

        .context-menu-item:active {
            background: var(--light-grey);
        }

        .context-menu-separator {
            height: 1px;
            background: var(--light-grey);
            margin: 4px 0;
        }

        body.dark-mode .context-menu {
            background: var(--ch-bg-card);
            border-color: var(--slate);
        }

        body.dark-mode .context-menu-item {
            color: var(--charcoal);
        }

        body.dark-mode .context-menu-item:hover {
            background: var(--ch-bg-row-hover);
        }
        
        body.dark-mode .filter-chip {
            background: var(--blue);
            color: white;
        }
        
        body.dark-mode .filter-chip:hover {
            background: var(--dark-blue);
        }
        
        body.dark-mode #filterSummaryText {
            color: var(--ch-text-primary);
        }
        
        body.dark-mode
        
        /* ── 3.1: Dark mode — filter dialog & search (workspace) ── */
        body.dark-mode .filter-dialog {
            background: var(--ch-bg-card) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary) !important;
        }
        body.dark-mode .filter-dialog h3 {
            color: var(--ch-bg-card-alt);
        }
        
        body.dark-mode .checkbox-list label {
            color: var(--ch-text-primary);
        }
        
        body.dark-mode .checkbox-list label:hover {
            background: var(--ch-bg-row-hover);
        }
        
        /* Only style buttons that don't carry their own background — avoids
           overriding inline-styled toolbar and action buttons in dark mode.
           Also excludes all named colour-variant classes so they keep their brand colours. */
        body.dark-mode button:not([style*="background"]):not(.btn-app):not(.filter-btn):not(.sort-indicator):not(.btn-save):not(.btn-success):not(.btn-back):not(.btn-solid-red):not(.btn-forest-green):not(.btn-burnt-orange):not(.btn-primary-grey):not(.btn-refresh) {
            background: var(--ch-bg-card-alt);
            color: var(--ch-text-primary);
        }
        body.dark-mode button:not([style*="background"]):not(.btn-app):not(.filter-btn):not(.sort-indicator):not(.btn-save):not(.btn-success):not(.btn-back):not(.btn-solid-red):not(.btn-forest-green):not(.btn-burnt-orange):not(.btn-primary-grey):not(.btn-refresh):hover {
            background: var(--ch-bg-row-hover);
        }
        
        body.dark-mode .stat-info-icon svg {
            fill: var(--slate);
        }
        
        body.dark-mode .stat-info-icon:hover svg {
            fill: var(--charcoal);
        }
        
        body.dark-mode .history-controls label {
            color: var(--ch-text-muted);
        }
        
        body.dark-mode .version-operator-btn {
            background: var(--ch-bg-row-hover) !important;
            color: var(--ch-text-primary) !important;
            border-color: var(--ch-border-strong) !important;
        }
        
        body.dark-mode .version-operator-btn[style*="background: var(--blue)"] {
            background: var(--blue) !important;
            color: white !important;
        }
        
        body.dark-mode a {
            color: var(--blue);
        }
        
        body.dark-mode a:hover {
            color: var(--teal);
        }
        
        body.dark-mode th {
            color: var(--ch-bg-card-alt);
        }
        
        body.dark-mode .sortable:hover {
            background: var(--ch-bg-row-hover);
        }
        
        body.dark-mode .filter-btn {
            background: var(--ch-bg-row-hover);
            color: var(--ch-text-primary);
            border-color: var(--ch-border-strong);
        }
        
        body.dark-mode .filter-btn.active {
            background: var(--teal);
            color: white;
        }
        
        
        body.dark-mode .alert-success {
            background: #2a3a2a;
            background: color-mix(in srgb, var(--forest-green) 12%, var(--charcoal));
            color: var(--green);
            border-left-color: var(--green);
        }
        
        body.dark-mode .alert-error {
            background: #2e1d1d;
            background: color-mix(in srgb, var(--dark-red) 12%, var(--charcoal));
            color: var(--red);
            border-left-color: var(--red);
        }
        
        
        body.dark-mode
        
        /* Shared style for the yellow informational note boxes. Individual
           boxes may still set their own margin inline; everything else lives
           here so the look stays consistent and dark mode is handled in one place. */
        .info-note {
            padding: 12px;
            background: rgba(255, 158, 24, 0.10);
            border-radius: var(--radius-sm);
            color: var(--charcoal);
        }
        .info-note p {
            margin: 0;
            color: var(--charcoal);
            font-size: var(--text-sm);
        }
        
        body.dark-mode .info-note {
            background: color-mix(in srgb, var(--burnt-orange) 12%, var(--ch-bg-card)) !important;
        }

        /* Compact, collapsible compliance note — far lighter than a full banner.
           Collapsed by default; the detail expands inline on click. */
        .stat-note {
            margin: 4px 2px 16px;
            font-size: var(--text-xs);
            color: var(--slate);
        }
        .stat-note summary {
            cursor: pointer;
            list-style: none;
            display: inline-flex;
            align-items: center;
            gap: 6px;
            padding: 4px 0;
            color: var(--slate);
            -webkit-user-select: none;
            user-select: none;
            width: fit-content;
        }
        .stat-note summary::-webkit-details-marker { display: none; }
        .stat-note summary::after {
            content: '▸';
            font-size: var(--text-xs);
            transition: transform var(--duration) var(--ease);
        }
        .stat-note[open] summary::after { transform: rotate(90deg); }
        .stat-note summary:hover { color: var(--charcoal); }
        .stat-note p {
            margin: 6px 0 0;
            padding-left: 2px;
            line-height: 1.5;
            max-width: 70ch;
        }
        
        body.dark-mode .info-note p {
            color: var(--ch-text-primary) !important;
        }
        
        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }

        /* ── 3.3.1: Loading overlay spinner ring — theming-system compatible ──
           All visual properties live here so dark-mode overrides work without
           !important and inline styles cannot block them.                      */
        .spinner-ring {
            width:         50px;
            height:        50px;
            margin:        0 auto 20px auto;
            border:        4px solid var(--light-grey);
            border-top:    4px solid var(--blue);
            border-radius: 50%;
            animation:     spin 1s linear infinite;
        }
        .dark-mode .spinner-ring {
            border-color:     rgba(255,255,255,0.15);
            border-top-color: var(--blue);
        }
        @media (prefers-reduced-motion: reduce) {
            .spinner-ring { animation: none; }
        }

        /* ── 3.4.1: Offline detection — persistent banner + mutating action lock ─
           body.is-offline disables every Save / Import button in the app so the
           user cannot attempt writes that will fail while the network is down.   */
        #mod-offline-banner {
            /* Injected by _showOfflineBanner() in mod_core.js */
            position: fixed;
            top: 0; left: 0; right: 0;
            z-index: 99998;
            background: var(--charcoal);
            color: var(--off-white);
            text-align: center;
            padding: 6px 16px;
            font-size: 12px;
            font-weight: 600;
            letter-spacing: 0.3px;
            font-family: Source Sans Pro, Franklin Gothic Book, sans-serif;
            box-shadow: 0 2px 6px rgba(0,0,0,.4);
        }
        body.is-offline .btn-save,
        body.is-offline .btn-import,
        body.is-offline [data-offline-disable] {
            opacity: 0.45;
            pointer-events: none;
            cursor: not-allowed;
        }
        body.is-offline .btn-save::after,
        body.is-offline .btn-import::after {
            content: ' (offline)';
            font-size: 0.85em;
        }

        /* ── 3.3: Named spinner class — prefers-reduced-motion safe ── */
        .mod-spinner {
            width: 40px; height: 40px;
            border: 3px solid rgba(255,255,255,0.3);
            border-top-color: white;
            border-radius: 50%;
            animation: spin 0.8s linear infinite;
            flex-shrink: 0;
        }
        @media (prefers-reduced-motion: reduce) {
            .mod-spinner {
                animation: none;
                border-top-color: rgba(255,255,255,0.8);
                border-right-color: rgba(255,255,255,0.4);
                /* Static cue: partial arc shows intent without motion */
            }
        }
        
        body.dark-mode #loadingOverlay > div {
            background: var(--ch-bg-card);
        }
        
        body.dark-mode #loadingMessage {
            color: var(--ch-text-primary);
        }
        
        body.dark-mode #csInfoSection {
            background: var(--ch-bg-row-hover) !important;
            border-left-color: var(--burnt-orange);
        }
        
        body.dark-mode #csInfoSection h3 {
            color: var(--orange);
        }
        
        body.dark-mode #csInfoSection span {
            color: var(--ch-text-primary) !important;
        }
        
        body.dark-mode #csInfoSection .modal-body span {
            color: var(--ch-text-primary) !important;
        }
        
        body.dark-mode #csInfoSection > div > div span {
            color: var(--ch-text-primary) !important;
        }
        
        /* Locked-layout asset info table: prevent column-width drift between customers */
        #assetDetailsTableBody td {
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }

        body.dark-mode #assetDetailsTableBody tr {
            background: var(--ch-bg-card) !important;
        }
        
        body.dark-mode #assetDetailsTableBody tr:nth-child(even) {
            background: var(--ch-bg-row-hover) !important;
        }
        
        body.dark-mode #assetDetailsTableBody td {
            color: var(--ch-text-primary);
        }
        
        body.dark-mode label {
            color: var(--ch-text-primary) !important;
        }
        
        body.dark-mode span[style*="color: var(--slate)"],
        body.dark-mode span[style*="color: var(--charcoal)"] {
            color: var(--ch-text-muted) !important;
        }
        
        body.dark-mode div[style*="color: var(--slate)"],
        body.dark-mode div[style*="color: var(--charcoal)"],
        body.dark-mode p[style*="color: var(--slate)"],
        body.dark-mode p[style*="color: var(--charcoal)"] {
            color: var(--ch-text-muted) !important;
        }
        
        body.dark-mode
        
        body.dark-mode .settings-card h3 {
            color: var(--ch-bg-card-alt) !important;
        }
        
        body.dark-mode .settings-card p {
            color: var(--ch-text-muted) !important;
        }
        
        body.dark-mode #unmappedList {
            background: var(--ch-bg-page) !important;
            border-color: var(--ch-border-strong);
        }
        
        body.dark-mode #unmappedMappingTableBody tr {
            background: var(--ch-bg-card) !important;
        }
        
        body.dark-mode #unmappedMappingTableBody tr:nth-child(even) {
            background: var(--ch-bg-row-hover) !important;
        }
        
        body.dark-mode #unmappedMappingTableBody td {
            color: var(--ch-text-primary) !important;
        }
        
        body.dark-mode #unmappedMappingTableBody select {
            background: var(--ch-bg-row-hover);
            color: var(--ch-bg-card-alt);
            border-color: var(--ch-border-strong);
        }
        
        body.dark-mode #unmappedList > div {
            background: var(--ch-bg-row-hover) !important;
            border-left-color: var(--orange);
        }
        
        body.dark-mode #unmappedList > div > div {
            color: var(--ch-text-primary) !important;
        }
        
        body.dark-mode #cleanupStatusTableBody tr {
            background: var(--ch-bg-card) !important;
        }
        
        body.dark-mode #cleanupStatusTableBody tr:nth-child(even) {
            background: var(--ch-bg-row-hover) !important;
        }
        
        body.dark-mode #cleanupStatusTableBody tr:hover {
            background: var(--ch-border-strong) !important;
        }
        
        body.dark-mode #cleanupStatusTableBody td {
            color: var(--ch-text-primary);
        }
        
        body.dark-mode #changeHistoryTableBody tr {
            background: var(--ch-bg-card) !important;
        }
        
        body.dark-mode #changeHistoryTableBody tr:nth-child(even) {
            background: var(--ch-bg-row-hover) !important;
        }
        
        body.dark-mode #changeHistoryTableBody td {
            color: var(--ch-text-primary);
        }
        
        body.dark-mode #dataQualityContent table {
            border-color: var(--ch-border-strong);
        }
        
        body.dark-mode #dataQualityContent tbody tr {
            background: var(--ch-bg-card) !important;
        }
        
        body.dark-mode #dataQualityContent tbody tr:nth-child(even) {
            background: var(--ch-bg-row-hover) !important;
        }
        
        body.dark-mode #dataQualityContent td {
            color: var(--ch-text-primary);
        }
        
        body.dark-mode #dataQualityContent h3 {
            color: var(--ch-bg-card-alt) !important;
        }
        
        body.dark-mode #globalSearchInput {
            background: var(--surface-sunken);
            color: var(--ch-bg-card-alt);
            border-color: var(--border-soft);
        }
        
        body.dark-mode #globalSearchInput:focus {
            border-color: var(--blue);
        }
        
        body.dark-mode #globalSearchInput::placeholder {
            color: var(--ch-text-muted);
        }
        
        body.dark-mode #globalSearchBox {
            background: transparent !important;
            box-shadow: none;
        }
        
        body.dark-mode #clearSearchBtn {
            background: var(--ch-border-strong) !important;
            color: var(--ch-bg-card-alt);
        }
        
        body.dark-mode #clearSearchBtn:hover {
            background: var(--ch-text-faint) !important;
        }
        
        body.dark-mode #clearAllBtn {
            background: var(--purple) !important;
            color: white;
        }
        
        body.dark-mode #clearAllBtn:hover {
            background: var(--lavender) !important;
        }
        
        body.dark-mode .customer-note-icon .note-tooltip {
            background: var(--surface);
            color: var(--charcoal);
        }
        
        body.dark-mode .customer-note-icon .note-tooltip span {
            border-color: white transparent transparent transparent !important;
        }

        /* Screen reader only text */
        .sr-only {
            position: absolute;
            left: -10000px;
            width: 1px;
            height: 1px;
            overflow: hidden;
        }

        /* Toast notification */
        #appToast {
            position: fixed;
            bottom: 24px;
            left: 50%;
            /* Hidden state: centred horizontally, shifted 16px below final position */
            transform: translateX(-50%) translateY(16px);
            background: var(--forest-green);
            color: #fff;
            padding: 12px 22px;
            border-radius: var(--radius-md);
            font-size: var(--text-sm);
            font-weight: 600;
            /* Layered shadow: ambient lift + crisp edge ring for legibility */
            box-shadow: var(--shadow-lg), 0 0 0 1px rgba(0,0,0,0.08);
            z-index: var(--z-toast);
            opacity: 0;
            pointer-events: none;
            transition: opacity 0.2s ease, transform 0.2s ease;
            max-width: min(480px, calc(100vw - 32px));
            text-align: center;
        }
        #appToast.toast-visible {
            opacity: 1;
            transform: translateX(-50%) translateY(0);
            pointer-events: auto;
        }

        /* Loading skeleton */
        
        @keyframes skeleton-shimmer {
            0% { background-position: 100% 50%; }
            100% { background-position: 0 50%; }
        }

            #appToast { transition: opacity var(--duration) var(--ease); }


        /* ── 3.1: Dark mode gaps — workspace-specific components ────────────── */
        /* tes-cell (empty-state table cell), tes-icon, tes-cta (import button) */
        body.dark-mode .tes-cell    { background: var(--ch-bg-page); }
        body.dark-mode .tes-icon    { color: var(--ch-text-muted); }
        body.dark-mode .tes-headline { color: var(--ch-text-primary); }
        body.dark-mode .tes-cta     { background: var(--primary-red) !important; color: #fff !important; }

        /* Column resize handle */
        body.dark-mode .col-resize-handle       { background: rgba(255,255,255,0.08); }
        body.dark-mode .col-resize-handle:hover { background: rgba(255,255,255,0.22); }
        body.dark-mode .col-resize-handle.resizing { background: rgba(255,255,255,0.45); }

        /* Skeleton loading rows in dark mode */
        body.dark-mode .skeleton-bar {
            background: linear-gradient(90deg,
                var(--ch-bg-card-alt) 25%,
                var(--ch-border) 37%,
                var(--ch-bg-card-alt) 63%);
            background-size: 400% 100%;
        }
        body.dark-mode tr.skeleton-row td { border-color: var(--ch-border); }

        /* Filter funnel active state in dark mode */
        body.dark-mode .filter-btn.active { background: var(--teal); color: #fff; }

        /* Customer detail overlay row actions */
        body.dark-mode .row-detail-label { color: var(--ch-text-muted); }
        body.dark-mode .row-detail-section { border-right-color: var(--ch-border); }

        /* Compliance/status chips in dark mode */
        body.dark-mode .filter-chip      { background: var(--ch-bg-card-alt); color: var(--ch-text-primary); border-color: var(--ch-border); }
        body.dark-mode .filter-chip:hover { background: var(--ch-bg-row-hover); }
        body.dark-mode .filter-chip-close { color: var(--ch-text-muted); }
        body.dark-mode .filter-chip-close:hover { color: var(--ch-text-primary); }


        /* ── 3.4: Utility classes for most-repeated inline style patterns ───── */
        /* Replaces the most common inline combinations across the workspace HTML */
        .d-flex          { display: flex; }
        .ai-center       { align-items: center; }
        .flex-row        { display: flex; align-items: center; }
        .flex-row-gap    { display: flex; align-items: center; gap: 8px; }
        .flex-between    { display: flex; align-items: center; justify-content: space-between; }
        .text-muted-xs   { font-size: var(--text-xs); color: var(--slate); }
        .text-muted-sm   { font-size: var(--text-sm); color: var(--slate); }
        .fw-700          { font-weight: 700; }
        .fw-600          { font-weight: 600; }
        .cursor-pointer  { cursor: pointer; }
        .nowrap          { white-space: nowrap; }
        .text-center     { text-align: center; }
        .pad-cell        { padding: 3px 8px; }
        /* Dark mode adapts automatically via CSS var() tokens */
        body.dark-mode .text-muted-xs,
        body.dark-mode .text-muted-sm { color: var(--ch-text-muted); }

        /* Print Styles */
        @media print {
            body {
                background: white !important;
                color: black !important;
            }
            
            /* Hide interactive elements */
            .header, 
            button:not(.print-only), 
            .filter-btn,
            .context-menu,
            .modal,
            #globalSearchBox,
            .info-note {
                display: none !important;
            }
            
            .table-container {
                box-shadow: none !important;
                margin: 0 !important;
                padding: 0 !important;
            }
            
            table {
                border-collapse: collapse !important;
                width: 100% !important;
                page-break-inside: auto !important;
            }
            
            thead {
                display: table-header-group !important;
                background: var(--primary-grey) !important;
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
            }
            
            th {
                background: var(--primary-grey) !important;
                color: white !important;
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
                padding: 8px !important;
                font-size: var(--text-2xs) !important; /* print — small but WCAG AA exempt for print */
                border: 1px solid var(--charcoal) !important;
            }
            
            tr {
                page-break-inside: avoid !important;
                page-break-after: auto !important;
            }
            
            tbody tr:nth-child(even) {
                background: var(--off-white) !important;
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
            }
            
            td {
                padding: 6px !important;
                font-size: var(--text-xs) !important; /* print — small but WCAG AA exempt for print */
                border: 1px solid var(--light-grey) !important;
            }
            
            .cs-filter-pill {
                background: var(--light-grey) !important;
                border: 1px solid var(--slate) !important;
                padding: 2px 5px !important;
                color: black !important;
                -webkit-print-color-adjust: exact !important;
                print-color-adjust: exact !important;
            }
            
            @page {
                margin: 0.5in;
                size: landscape;
            }
        }

        /* ============================================================
           RESPONSIVE / MOBILE LAYER  (full-parity mobile support)
           Tablet (<=900px) and phone (<=600px). Additive only — desktop
           layout above these widths is unchanged.
           ============================================================ */
        @media (max-width: 900px) {
            .content-wrapper { padding: 12px; }
            .header {
                flex-direction: column;
                align-items: stretch;
                gap: 12px;
                padding: 14px 16px;
            }
            .header h1 { font-size: var(--text-xl); }
            .controls { flex-wrap: wrap; gap: 8px; }
            .controls .btn-app { flex: 1 1 auto; min-width: 0; }
            .main-stats { grid-template-columns: 1fr 1fr; gap: 12px; }
            .main-stat-card.tracking-group-start { margin-left: 0; }
        }

        @media (max-width: 600px) {
            .content-wrapper { padding: 8px; }
            /* Only the table-container should scroll sideways, never the page. */
            html, body { overflow-x: hidden; }
            .header { padding: 12px; gap: 10px; }
            .header h1 { font-size: 19px; }
            .controls .btn-app { height: 40px; font-size: var(--text-sm); padding: 8px 10px; gap: 4px; }
            .controls > div[style*="margin-left: 20px"] { margin-left: auto !important; }

            .main-stats { grid-template-columns: 1fr; gap: 10px; }
            .main-stat-card { padding: 12px 16px; }
            .main-stat-card h3 { margin-bottom: 2px; }
            .main-stat-card .main-stat-subtitle { margin-top: 0; }
            .main-stat-card .main-stat-value { font-size: 30px; margin-bottom: 0; }

            /* Data table scrolls horizontally on phone so every column stays
               reachable (full parity), with momentum scrolling. */
            .table-container {
                overflow-x: auto;
                -webkit-overflow-scrolling: touch;
                border-radius: 0;
                max-width: 100%;
            }
            #dataTable { min-width: 720px; table-layout: fixed; }
            /* Fixed-layout truncation — long customer names ellipsis cleanly */
            #dataBody td {
                overflow: hidden;
                text-overflow: ellipsis;
                white-space: nowrap;
            }
            /* Env cell holds wrappable pills — let them wrap on multiple lines */
            #dataBody td.env-cell { white-space: normal; }

            .modal-content {
                width: 96% !important;
                max-width: 96% !important;
                margin: 3% auto !important;
                max-height: 92vh !important;
            }
            .modal-header { padding: 12px 16px !important; }
            .modal-header h2 { font-size: 15px !important; }

            .cs-filter-pill { padding: 8px 12px; font-size: var(--text-sm); }

            #appToast { left: 12px; right: 12px; top: 12px; bottom: auto; text-align: center;
                        transform: translateY(-12px); }
            #appToast.toast-visible { transform: translateY(0); }

        }

        /* Touch devices: larger tap targets regardless of width */
        @media (hover: none) and (pointer: coarse) {
            .btn-app, button, .cs-filter-pill, select { min-height: 40px; }
            tbody tr { min-height: 48px; }
        }

        /* User Menu Items */
        .user-menu-item {
            display: flex;
            align-items: center;
            gap: 12px;
            padding: 12px 16px;
            cursor: pointer;
            transition: background var(--duration) var(--ease);
            font-size: var(--text-sm);
            color: var(--charcoal);
        }
        
        .user-menu-item:hover {
            background: var(--off-white);
        }
        
        .user-menu-item:active {
            background: var(--light-grey);
        }

/* ── Additional styles ── */
.user-picker-card {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 10px;
            padding: 16px 10px 14px;
            border-radius: var(--radius-md);
            border: 2px solid var(--light-grey);
            cursor: pointer;
            background: var(--surface);
            transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease), transform var(--duration) var(--ease);
            -webkit-user-select: none;
            user-select: none;
        }
        .user-picker-card:hover {
            border-color: var(--primary-red);
            box-shadow: 0 4px 16px rgba(162,2,52,0.12);
            transform: translateY(-2px);
        }
        .user-picker-card:active {
            transform: translateY(0);
        }
        .user-picker-card:focus-visible {
            outline: 3px solid var(--blue);
            outline-offset: 2px;
            border-color: var(--primary-red);
        }
        .user-picker-avatar {
            width: 52px;
            height: 52px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: var(--text-lg);
            font-weight: 700;
            color: white;
            flex-shrink: 0;
        }
        .user-picker-name {
            font-size: var(--text-sm);
            font-weight: 600;
            color: var(--charcoal);
            text-align: center;
            line-height: 1.3;
        }
        .user-picker-role {
            font-size: var(--text-xs);
            color: var(--slate);
            text-transform: uppercase;
            letter-spacing: 0.5px;
            font-weight: 500;
        }
        /* Customer/asset mapping toggle helpers */
        .cm-hidden { display: none !important; }

        /* ── Tab bar for paired modals ─────────────────────────────────────── */
        .modal-tab-bar {
            display: flex;
            gap: 0;
            border-bottom: 2px solid var(--light-grey);
            background: var(--surface-alt);
            padding: 0 20px;
        }
        .modal-tab {
            padding: 12px 22px;
            border: none;
            border-bottom: 3px solid transparent;
            background: none;
            cursor: pointer;
            font-size: var(--text-sm);
            font-weight: 600;
            font-family: var(--font-sans);
            color: var(--slate);
            margin-bottom: -2px;
            transition: color var(--duration) var(--ease),
                        border-color var(--duration) var(--ease);
            white-space: nowrap;
        }
        .modal-tab:hover {
            color: var(--primary-grey);
        }
        .modal-tab.active {
            color: var(--primary-red);
            border-bottom-color: var(--primary-red);
        }
        body.dark-mode .modal-tab-bar {
            background: var(--ch-bg-card-alt);
            border-bottom-color: var(--ch-border);
        }
        /* .modal-tab dark mode: see consolidated !important rules below */
        body.dark-mode .modal-tab.active {
            color: var(--red);
            border-bottom-color: var(--red);
        }

/* Sort indicators in opp and asset tables — hidden when unsorted */
.opp-sort-icon, .asset-sort-icon {
    display: inline-block;
    margin-left: 4px;
    font-size: var(--text-xs);
    font-weight: 700;
    min-width: 8px;
    opacity: 0;
    transition: opacity var(--duration) var(--ease);
}
/* Active sort: always visible */
.opp-sort-icon:not(:empty),
.asset-sort-icon:not(:empty) {
    opacity: 1;
}
/* Hover hint on unsorted columns */
th:hover .opp-sort-icon:empty::before,
th:hover .asset-sort-icon:empty::before {
    content: '↕';
    opacity: 0.4;
}

        /* ═══════════════════════════════════════════════════════════
           FEATURE: SKELETON LOADING (#4)
        ═══════════════════════════════════════════════════════════ */
        @keyframes shimmer {
            0%   { background-position: -600px 0; }
            100% { background-position:  600px 0; }
        }
        .skeleton-cell {
            display: inline-block;
            height: 13px;
            border-radius: 4px;
            background: linear-gradient(
                90deg,
                var(--light-grey) 25%,
                var(--off-white)  50%,
                var(--light-grey) 75%
            );
            background-size: 600px 100%;
            animation: shimmer 1.4s infinite linear;
        }
        body.dark-mode .skeleton-cell {
            background: linear-gradient(
                90deg,
                var(--surface-raised) 25%,
                var(--border-soft)    50%,
                var(--surface-raised) 75%
            );
            background-size: 600px 100%;
        }
        tr.skeleton-row td { padding: 3px 8px; border-bottom: 1px solid var(--light-grey); }
        body.dark-mode tr.skeleton-row td { border-color: var(--border-soft); }

        /* ═══════════════════════════════════════════════════════════
           FEATURE: TABLE DENSITY TOGGLE (#5)
           normal (no attr) = Compact  |  comfortable = Spacious
        ═══════════════════════════════════════════════════════════ */
        #dataTable[data-density="comfortable"] td,
        #dataTable[data-density="comfortable"] th {
            padding: 16px 12px !important;
            font-size: var(--text-md) !important;
        }
        .density-btn {
            display: inline-flex;
            align-items: center;
            gap: 5px;
            padding: 6px 10px;
            border: 1px solid var(--border-soft);
            border-radius: var(--radius-sm);
            background: var(--surface);
            color: var(--slate);
            font-size: var(--text-xs);
            font-weight: 600;
            cursor: pointer;
            transition: all 0.15s;
            white-space: nowrap;
        }
        .density-btn:hover { border-color: var(--blue); color: var(--blue); }
        .density-btn .density-icon {
            display: flex;
            flex-direction: column;
            gap: 2px;
            width: 14px;
        }
        .density-btn .density-icon span {
            display: block;
            background: currentColor;
            border-radius: 1px;
            width: 14px;
        }
        /* Compact icon: 4 thin bars */
        .density-btn[data-mode="compact"]    .density-icon span { height: 2px; }
        /* Normal icon: 3 medium bars */
        .density-btn[data-mode="normal"]     .density-icon span { height: 3px; }
        .density-btn[data-mode="normal"]     .density-icon span:nth-child(1),
        .density-btn[data-mode="normal"]     .density-icon span:nth-child(3) { opacity: 0.5; }
        /* Comfortable icon: 2 thick bars */
        .density-btn[data-mode="comfortable"] .density-icon span { height: 5px; }
        .density-btn[data-mode="comfortable"] .density-icon span:nth-child(2) { display: none; }

        /* ═══════════════════════════════════════════════════════════
           FEATURE: INLINE ROW EXPANSION (#2)
        ═══════════════════════════════════════════════════════════ */
        /* ── Row detail overlay (position:fixed, escapes table stacking context) ── */
        #rowDetailOverlay {
            /* Sizing, colour and shadow are set inline by JS. This block handles
               the inner layout and transition behaviour. */
        }
        #rowDetailOverlay .row-detail-inner {
            /* Use max-height:none — the overlay is shown/hidden by display:block/none,
               no CSS transition needed (avoids the max-height flicker that caused
               the previous <tr> approach to show behind adjacent rows mid-animation). */
            max-height: none;
            overflow: visible;
        }
        .row-detail-inner {
            display: grid;
            grid-template-columns: 1fr 1fr 1fr 1fr auto;
            gap: 0;
            overflow: hidden;
            max-height: 0;
            transition: max-height 0.28s var(--ease-standard);
            background: var(--off-white);
            background: color-mix(in srgb, var(--primary-red) 6%, var(--off-white));
        }
        body.dark-mode .row-detail-inner {
            background: var(--surface-raised, var(--off-white));
            background: color-mix(in srgb, var(--primary-red) 10%, var(--surface-raised));
        }
        .row-detail-inner.open { max-height: 120px; }
        .row-detail-section {
            padding: 14px 18px;
            border-right: 1px solid var(--border-soft);
        }
        .row-detail-section:last-child { border-right: none; }
        .row-detail-label {
            font-size: var(--text-xs);
            font-weight: 700;
            letter-spacing: 0.06em;
            text-transform: uppercase;
            color: var(--slate);
            margin-bottom: 6px;
        }
        .row-detail-value {
            font-size: var(--text-sm);
            font-weight: 600;
            color: var(--charcoal);
        }
        body.dark-mode .row-detail-value { color: var(--off-white); }
        .row-detail-actions {
            display: flex;
            flex-direction: column;
            justify-content: center;
            gap: 8px;
            padding: 14px 16px;
        }
        .row-detail-actions a,
        .row-detail-actions button {
            font-size: var(--text-xs);
            font-weight: 600;
            padding: 6px 16px;
            border-radius: var(--radius-sm);
            border: 1px solid var(--border-soft);
            background: transparent;
            color: var(--primary-grey);
            cursor: pointer;
            text-align: center;
            text-decoration: none;
            display: block;
            white-space: nowrap;
            transition: background var(--duration) var(--ease),
                        border-color var(--duration) var(--ease),
                        color var(--duration) var(--ease),
                        transform var(--duration) var(--ease-spring);
        }
        .row-detail-actions a:hover,
        .row-detail-actions button:hover {
            background: var(--surface-alt);
            border-color: var(--slate);
            color: var(--charcoal);
            transform: translateY(-1px);
        }
        body.dark-mode .row-detail-actions button,
        body.dark-mode .row-detail-actions a {
            color: var(--charcoal);
            border-color: var(--border-soft);
        }
        body.dark-mode .row-detail-actions button:hover,
        body.dark-mode .row-detail-actions a:hover { background: var(--surface-alt); }
        tr.data-row.row-expanded > td:first-child::before {
            content: '▾';
            color: var(--primary-red);
            font-size: var(--text-md);
            margin-right: 4px;
        }
        /* ═══════════════════════════════════════════════════════════
           FEATURE: DYNAMIC PAGE TITLE (#3) — CSS only, no extra styles
        ═══════════════════════════════════════════════════════════ */

        /* ── #1 Trend delta badges ─────────────────────────────────────────── */
        .stat-delta {
            display: inline-flex;
            align-items: center;
            gap: 3px;
            font-size: var(--text-xs);
            font-weight: 700;
            letter-spacing: 0.02em;
            margin-top: 4px;
            padding: 2px 7px;
            border-radius: 20px;
            opacity: 0;
            transform: translateY(4px);
            transition: opacity 0.4s ease, transform 0.4s ease;
        }
        .stat-delta.visible { opacity: 1; transform: translateY(0); }
        .stat-delta.up   { background: rgba(135,190,80,0.18); color: var(--forest-green); }
        .stat-delta.down { background: rgba(199,5,5,0.12);    color: var(--dark-red); }
        .stat-delta.flat { background: rgba(69,85,95,0.12);   color: var(--slate); }
        body.dark-mode .stat-delta.up   { background: rgba(135,190,80,0.22); color: var(--green); }
        body.dark-mode .stat-delta.down { background: rgba(199,5,5,0.22);    color: var(--red); }

        /* ── #9 Command Palette ───────────────────────────────────────────────── */
        #cmdPalette {
            position: fixed; inset: 0; z-index: var(--z-modal-backdrop);
            background: rgba(29,36,41,0.55);
            -webkit-backdrop-filter: blur(6px);
            backdrop-filter: blur(6px);
            display: none; align-items: flex-start; justify-content: center;
            padding-top: 10vh;
        }
        #cmdPalette.open { display: flex; }
        .cmd-box {
            width: 700px; max-width: 96vw;
            background: var(--surface);
            border-radius: var(--radius-lg);
            box-shadow: 0 24px 64px rgba(0,0,0,0.28);
            overflow: hidden;
            display: flex; flex-direction: column;
            animation: modalIn 0.18s var(--ease) both;
        }
        .cmd-search-row {
            display: flex; align-items: center; gap: 10px;
            padding: 14px 18px;
            border-bottom: 1px solid var(--border-soft);
        }
        .cmd-search-icon { font-size: var(--text-xl); color: var(--slate); flex-shrink: 0; }
        #cmdInput {
            flex: 1; border: none; background: transparent;
            font-size: var(--text-lg); font-weight: 500; color: var(--charcoal);
            outline: none; font-family: var(--font-sans);
        }
        body.dark-mode #cmdInput { color: var(--off-white); }
        .cmd-kbd { font-size: var(--text-xs); color: var(--slate); background: var(--surface-raised);
                   border: 1px solid var(--border-soft); border-radius: 4px; padding: 2px 6px; flex-shrink: 0; }
        .cmd-body {
            display: flex; max-height: 380px;
        }
        .cmd-results {
            width: 260px; flex-shrink: 0; overflow-y: auto;
            border-right: 1px solid var(--border-soft);
            padding: 6px 0;
        }
        .cmd-result-item {
            padding: 9px 16px; cursor: pointer;
            display: flex; flex-direction: column; gap: 2px;
            transition: background 0.12s;
            border-left: 3px solid transparent;
        }
        .cmd-result-item:hover,
        .cmd-result-item.active {
            background: var(--surface-raised);
            border-left-color: var(--primary-red);
        }
        .cmd-result-name { font-size: var(--text-sm); font-weight: 600; color: var(--charcoal); }
        body.dark-mode .cmd-result-name { color: var(--off-white); }
        .cmd-result-sub  { font-size: var(--text-xs); color: var(--slate); }
        .cmd-preview {
            flex: 1; padding: 20px; overflow-y: auto;
        }
        .cmd-preview-empty {
            height: 100%; display: flex; align-items: center; justify-content: center;
            color: var(--slate); font-size: var(--text-sm); text-align: center; line-height: 1.6;
        }
        .cmd-preview-name {
            font-size: var(--text-md); font-weight: 700; color: var(--charcoal);
            margin-bottom: 14px;
        }
        body.dark-mode .cmd-preview-name { color: var(--off-white); }
        .cmd-preview-grid {
            display: grid; grid-template-columns: 1fr 1fr; gap: 10px 16px;
            margin-bottom: 16px;
        }
        .cmd-preview-cell { display: flex; flex-direction: column; gap: 2px; }
        .cmd-preview-label {
            font-size: var(--text-xs); font-weight: 700; letter-spacing: 0.06em;
            text-transform: uppercase; color: var(--slate);
        }
        .cmd-preview-val { font-size: var(--text-md); font-weight: 600; color: var(--charcoal); }
        body.dark-mode .cmd-preview-val { color: var(--off-white); }
        .cmd-preview-val.v-current { color: var(--forest-green); }
        .cmd-preview-val.v-old     { color: var(--dark-red); }
        .cmd-footer {
            padding: 8px 16px;
            border-top: 1px solid var(--border-soft);
            font-size: var(--text-xs); color: var(--slate);
            display: flex; gap: 16px;
        }
        .cmd-footer kbd {
            background: var(--surface-raised); border: 1px solid var(--border-soft);
            border-radius: 3px; padding: 1px 5px; font-size: var(--text-xs);
        }
        .cmd-no-results {
            padding: 24px 16px; text-align: center; color: var(--slate); font-size: var(--text-sm);
        }

        /* ── #11 Stat card flash on import ──────────────────────────────────── */
        @keyframes statFlash {
            0%   { box-shadow: 0 0 0 0 rgba(47,196,190,0.5); }
            50%  { box-shadow: 0 0 0 8px rgba(47,196,190,0.15); }
            100% { box-shadow: 0 0 0 0 rgba(47,196,190,0); }
        }
        .main-stat-card.flash-update { animation: statFlash 0.7s ease-out; }

        /* ═══════════════════════════════════════════════════════
           UTILITY CLASSES — replaces top 55 repeated inline styles
           ═════════════════════════════════════════════════════ */
        .flex-between { display: flex; justify-content: space-between; align-items: center; }
        .data-table   { width: 100%; border-collapse: collapse; }
        .text-muted   { color: var(--slate); }
        .p-20         { padding: 20px; }
        .va-middle    { vertical-align: middle; }
        .nowrap       { white-space: nowrap; }
        .w-full       { width: 100%; }
        /* Easing and hover tokens defined in :root above */

        /* ═════════════════════════════════════════════════════════
           DARK MODE SAFE BUTTON CLASSES — for JS-rendered innerHTML
           These respond to dark mode; inline color:white does not
           ═════════════════════════════════════════════════════════ */
        .btn-solid-red {
            background: var(--primary-red); color: white;
            border: none; cursor: pointer; font-weight: 600;
            border-radius: var(--radius-sm); padding: 8px 18px; font-size: var(--text-sm);
            transition: background var(--duration) var(--ease);
        }
        .btn-solid-red:hover { background: var(--primary-red-hover); }
        body.dark-mode
        body.dark-mode


        /* ── Admin page hover states (replaces 15 inline onmouseover/onmouseout handlers) ── */
        .admin-avatar-btn:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.25) !important; }
        .admin-toggle-btn { background: var(--primary-grey); transition: background 0.2s; }
        .admin-toggle-btn:hover { background: var(--slate); }
        /* nav cards (Group B): CSS :focus-visible for keyboard, :hover for mouse */
        [role="button"][style*="border:2px solid transparent"]:hover,
        [role="button"][style*="border: 2px solid transparent"]:hover {
            border-color: var(--blue) !important;
            background: var(--surface) !important;
        }
        /* Colour-coded action buttons */
        .btn-forest-green          { background: var(--forest-green); color: white; border: none; cursor: pointer; font-weight: 600; border-radius: var(--radius-sm); transition: background 0.2s; }
        .btn-forest-green:hover    { background: var(--green); }
        .btn-burnt-orange          { background: var(--burnt-orange); color: white; border: none; cursor: pointer; font-weight: 600; border-radius: var(--radius-sm); transition: background 0.2s; }
        .btn-burnt-orange:hover    { background: var(--orange); }
        .btn-primary-grey          { background: var(--primary-grey); color: white; border: none; cursor: pointer; font-weight: 600; border-radius: var(--radius-sm); transition: background 0.2s; }
        .btn-primary-grey:hover    { background: var(--slate); }

        /* ── Right-click affordance on interactive rows ── */
        .rc-row { position: relative; }
        .rc-row:hover::after {
            content: '⋮';
            position: absolute;
            right: 10px;
            top: 50%;
            transform: translateY(-50%);
            color: var(--slate);
            font-size: 16px;
            font-weight: 700;
            opacity: 0.45;
            pointer-events: none;
        }

        /* ── Extracted utility classes (fix 4 — replaces repeated inline styles) ── */
        .field-value {
            font-size: var(--text-sm); font-weight: 500; color: var(--charcoal);
        }
        .mapping-hub-tab-body { padding: 20px; display: none; overflow-y: auto; }
        .mapping-hub-tab-body.active { display: block; }

        /* ── Spacious mode: indicator bar is proportionally wider ── */
        #dataTable[data-density="comfortable"] .indicator-bar {
            width: 22px;
            border-radius: 0 5px 5px 0;
        }
        #dataTable[data-density="comfortable"] tbody tr td:first-child {
            padding: 4px 10px 4px 22px !important;  /* keep indicator-bar left gap */
        }
        /* ── Sort indicator spans in table headers ── */
        .cleanup-sort-ind::after, .user-sort-ind::after {
            content: ' ↕';
            opacity: 0.45;
            font-size: 11px;
        }
        .cleanup-sort-ind.asc::after, .user-sort-ind.asc::after   { content: ' ↑'; opacity: 0.9; }
        .cleanup-sort-ind.desc::after, .user-sort-ind.desc::after { content: ' ↓'; opacity: 0.9; }

        /* ── Product results table: density-aware — 'comfortable' removed, normal only ── */
        table[data-density="comfortable"] td,
        table[data-density="comfortable"] th {
            padding: 4px 10px !important;
            font-size: 11px !important;
        }

        /* ── Product tab count pill ──────────────────────────────────────────── */
        .ctab-count-pill {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            min-width: 20px;
            height: 18px;
            padding: 0 5px;
            border-radius: 9px;
            background: var(--dark-teal);
            background: color-mix(in srgb, var(--dark-teal) 85%, black);
            color: white;
            font-size: 11px;
            font-weight: 700;
            line-height: 1;
            flex-shrink: 0;
        }
        .ctab-product.ctab-active .ctab-count-pill {
            background: var(--dark-teal);
        }

        /* ── Customer detail: density-aware tables ───────────────────────────── */
        #customer-detail-body[data-density="comfortable"] table td,
        #customer-detail-body[data-density="comfortable"] table th {
            padding: 14px 12px !important;
            font-size: var(--text-md) !important;
        }

        /* ── Product List tab sort indicators ─────────────────────────────── */
        .pl-sort-ind { font-size:11px; opacity:0.8; }

        /* ── Customer Contacts Panel ─────────────────────────────────────── */
        .contacts-scroll-panel {
            max-height: 220px;
            overflow-y: auto;
            display: grid;
            grid-template-columns: repeat(2, 1fr);
            gap: 6px;
            padding-right: 2px;
        }
        .contacts-scroll-panel::-webkit-scrollbar { width: 5px; }
        .contacts-scroll-panel::-webkit-scrollbar-thumb {
            background: var(--light-grey);
            border-radius: 3px;
        }
        .contacts-empty,
        .contacts-loading {
            grid-column: span 2;
            padding: 16px 0;
            text-align: center;
            font-size: var(--text-xs);
            color: var(--slate);
            font-style: italic;
        }
        .contact-card {
            display: flex;
            flex-direction: column;
            gap: 2px;
            padding: 8px 10px;
            background: var(--surface);
            border-radius: var(--radius-sm);
            border: 1px solid var(--light-grey);
            transition: border-color 0.12s, background 0.12s;
            text-decoration: none;
            cursor: default;
        }
        .contact-card:hover {
            border-color: var(--teal);
            background: var(--surface);
            background: color-mix(in srgb, var(--teal) 6%, var(--surface));
        }
        .contact-card-header {
            display: flex;
            align-items: flex-start;
            justify-content: space-between;
            gap: 6px;
        }
        .contact-card-actions {
            display: flex;
            gap: 4px;
            flex-shrink: 0;
            opacity: 0;
            transition: opacity 0.15s;
        }
        .contact-card:hover .contact-card-actions { opacity: 1; }
        .contact-action-btn {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            width: 22px;
            height: 22px;
            border-radius: 4px;
            border: none;
            cursor: pointer;
            transition: background 0.15s;
            text-decoration: none;
            flex-shrink: 0;
        }
        .contact-email-btn {
            background: rgba(0,163,224,0.12);
            color: var(--dark-blue);
        }
        .contact-email-btn:hover { background: var(--dark-blue); color: white; }
        .contact-edit-btn {
            background: rgba(69,85,95,0.10);
            color: var(--slate);
        }
        .contact-edit-btn:hover { background: var(--slate); color: white; }
        .contact-card-name {
            font-size: var(--text-sm);
            font-weight: 600;
            color: var(--charcoal);
            line-height: 1.3;
        }
        .contact-card-title {
            font-size: var(--text-xs);
            color: var(--slate);
            line-height: 1.3;
        }
        .contact-card-email {
            font-size: var(--text-xs);
            color: var(--dark-blue);
            margin-top: 2px;
        }
        .contact-card-phone {
            font-size: var(--text-xs);
            color: var(--slate);
        }
        /* Portal User indicator */
        .contact-portal-badge {
            display: inline-flex;
            align-items: center;
            gap: 3px;
            font-size: 9px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.05em;
            padding: 1px 5px;
            border-radius: 3px;
            color: var(--dark-teal);
            background: rgba(47,196,190,0.12);
            border: 1px solid rgba(47,196,190,0.25);
            white-space: nowrap;
            align-self: flex-start;
            margin-top: 2px;
        }
        body.dark-mode .contact-portal-badge {
            color: var(--teal);
            background: rgba(47,196,190,0.15);
        }
        /* Role meta row (Role Level + Decision Making Role) */
        .contact-card-meta {
            display: flex;
            gap: 5px;
            flex-wrap: wrap;
            margin-top: 2px;
        }
        /* Role Level — always purple badge */
        .contact-card-role {
            display: inline-block;
            font-size: 9px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.04em;
            padding: 1px 5px;
            border-radius: 3px;
            background: rgba(130,90,226,0.12);
            color: var(--purple);
            white-space: nowrap;
        }
        /* Decision Making Role — always green */
        .contact-card-decision {
            display: inline-block;
            font-size: 9px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.04em;
            padding: 1px 5px;
            border-radius: 3px;
            background: rgba(51,133,51,0.12);
            color: var(--forest-green);
            white-space: nowrap;
        }
        body.dark-mode .contact-card-role { color: var(--lavender); background: rgba(130,90,226,0.18); }

        /* Dark mode contacts */
        body.dark-mode .contact-card {
            background: var(--ch-bg-card-alt);
            border-color: var(--ch-border);
        }
        body.dark-mode .contact-card:hover { border-color: var(--teal); }
        body.dark-mode .contact-card-name  { color: var(--ch-text-primary); }
        body.dark-mode .contact-card-title,
        body.dark-mode .contact-card-phone { color: var(--ch-text-muted); }
        body.dark-mode .contact-card-email { color: var(--blue); }

        /* ── Contact type badge (on card) ───────────────────────────────── */
        .contact-type-badge {
            display: inline-block;
            font-size: 9px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.05em;
            padding: 1px 6px;
            border-radius: 3px;
            color: white;
            white-space: nowrap;
            margin-top: 2px;
            align-self: flex-start;
        }
        .contact-type-badge.ctype-leadership  { background: var(--purple); }
        .contact-type-badge.ctype-operational { background: var(--dark-blue); }
        .contact-type-badge.ctype-it          { background: var(--dark-teal); }

        /* ── Shared filter pill bar ──────────────────────────────────────── */
        .type-filter-bar {
            display: flex;
            gap: 5px;
            flex-wrap: wrap;
            margin-bottom: 8px;
        }
        .type-filter-pill {
            font-size: 10px;
            font-weight: 700;
            padding: 3px 10px;
            border-radius: 20px;
            border: 1.5px solid var(--light-grey);
            background: transparent;
            color: var(--slate);
            cursor: pointer;
            transition: all 0.15s;
            white-space: nowrap;
            letter-spacing: 0.04em;
        }
        .type-filter-pill:hover { border-color: var(--slate); color: var(--charcoal); }
        /* All pills use same filled-slate active style as the All pill */
        .type-filter-pill.active { background: var(--slate); color: white; border-color: var(--slate); }

        /* Contact add button (teal) */
        .contact-add-btn {
            display: inline-flex;
            align-items: center;
            gap: 4px;
            padding: 4px 10px;
            font-size: var(--text-xs);
            font-weight: 700;
            color: var(--dark-teal);
            background: transparent;
            border: 1.5px solid var(--teal);
            border-radius: var(--radius-sm);
            cursor: pointer;
            transition: background 0.15s, color 0.15s;
        }
        .contact-add-btn:hover {
            background: var(--dark-teal);
            color: white;
            border-color: var(--dark-teal);
        }
        /* Item 13: Engagement template buttons */
        .eng-template-btn {
            font-size: 10px;
            font-weight: 700;
            padding: 3px 9px;
            border-radius: 20px;
            border: 1.5px solid var(--lavender);
            background: transparent;
            color: var(--purple);
            cursor: pointer;
            transition: all 0.15s;
            white-space: nowrap;
        }
        .eng-template-btn:hover { background: var(--purple); color: white; border-color: var(--purple); }
        body.dark-mode .eng-template-btn { color: var(--lavender); border-color: rgba(164,160,238,0.4); }
        body.dark-mode .eng-template-btn:hover { background: var(--purple); color: white; }

        /* Inline contact edit/add form */
        .contact-edit-form {
            background: var(--surface);
            border: 1px solid var(--teal);
            border-radius: var(--radius-sm);
            padding: 10px;
            margin-bottom: 8px;
            display: flex;
            flex-direction: column;
            gap: 6px;
        }
        .contact-edit-form input {
            font-size: var(--text-xs);
            padding: 4px 7px;
            border: 1px solid var(--light-grey);
            border-radius: 3px;
            outline: none;
            background: var(--surface);
            font-family: inherit;
            color: var(--charcoal);
            width: 100%;
            box-sizing: border-box;
        }
        .contact-edit-form input:focus { border-color: var(--teal); box-shadow: 0 0 0 2px rgba(47,196,190,0.15); }
        .contact-edit-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
        .contact-edit-form-actions { display: flex; gap: 6px; justify-content: flex-end; margin-top: 2px; }

        /* Equal-height row: contacts section fills full height, scroll panel uses remaining space */
        #contactsSection {
            display: flex;
            flex-direction: column;
        }
        #contactsSection .contacts-scroll-panel {
            flex: 1;
            max-height: 260px;
        }

        /* ── Customer Statistics & Engagement Log ──────────────────────────── */

        /* Shared field label / input pattern */
        .cstat-field {
            display: flex;
            flex-direction: column;
            gap: 3px;
        }
        .cstat-label {
            font-size: 10px;
            font-weight: 700;
            color: var(--slate);
            text-transform: uppercase;
            letter-spacing: 0.05em;
        }
        .cstat-input {
            padding: 5px 8px;
            font-size: var(--text-xs);
            color: var(--charcoal);
            background: var(--surface);
            border: 1px solid var(--light-grey);
            border-radius: var(--radius-sm);
            outline: none;
            width: 100%;
            box-sizing: border-box;
            transition: border-color 0.15s;
            font-family: inherit;
        }
        .cstat-input:focus {
            border-color: var(--orange);
            box-shadow: 0 0 0 2px rgba(255,158,24,0.15);
        }
        .cstat-select { cursor: pointer; }
        textarea.cstat-input { font-family: inherit; }

        /* Save button for customer stats */
        .cstat-save-btn:hover { background: var(--orange); }
        .cstat-save-btn:disabled { opacity: 0.5; cursor: default; }

        /* ── Inline-editable display fields ──────────────────────────────── */
        .ed-field {
            display: flex;
            flex-direction: column;
            gap: 3px;
            padding: 4px 6px;
            border-radius: 4px;
            cursor: default;
            transition: background 0.15s;
            position: relative;
        }
        .ed-field:not(.editing):hover {
            background: rgba(0,163,224,0.07);
        }
        .ed-field:not(.editing):hover::after {
            content: '✎';
            position: absolute;
            right: 6px;
            top: 50%;
            transform: translateY(-50%);
            font-size: 11px;
            color: var(--slate);
            opacity: 0.45;
            pointer-events: none;
        }
        .ed-field.editing { background: rgba(0,163,224,0.05); }
        .ed-label {
            font-size: 10px;
            font-weight: 700;
            color: var(--slate);
            text-transform: uppercase;
            letter-spacing: 0.05em;
        }
        .ed-value {
            font-size: var(--text-sm);
            font-weight: 500;
            color: var(--charcoal);
        }
        .ed-input {
            font-size: var(--text-sm);
            font-weight: 500;
            color: var(--charcoal);
            padding: 3px 6px;
            border: 1.5px solid var(--dark-blue);
            border-radius: 3px;
            outline: none;
            background: var(--surface);
            font-family: inherit;
            width: 100%;
            box-sizing: border-box;
        }
        .ed-input:focus { box-shadow: 0 0 0 2px rgba(0,163,224,0.18); }
        body.dark-mode .ed-field:not(.editing):hover { background: rgba(0,163,224,0.10); }
        body.dark-mode .ed-input { background: var(--ch-bg-card-alt) !important; color: var(--ch-text-primary) !important; border-color: var(--dark-blue); }

        /* ── Inline table-cell editing ───────────────────────────────────── */
        /* Hover applied via JS mouseenter/mouseleave (not CSS :hover) to avoid
           scroll-container stuck-hover bug in Chromium. */
        .cell-editable { cursor: text; }
        .cell-editable[data-hovered] { background: rgba(0,163,224,0.07) !important; }
        .cell-edit-input {
            width: 100%;
            padding: 2px 5px;
            border: 1.5px solid var(--dark-blue);
            border-radius: 3px;
            font-size: inherit;
            font-weight: inherit;
            color: inherit;
            background: var(--surface);
            font-family: inherit;
            outline: none;
            box-sizing: border-box;
        }
        .cell-edit-input:focus { box-shadow: 0 0 0 2px rgba(0,163,224,0.18); }
        .cell-edit-select {
            width: 100%;
            padding: 2px 4px;
            border: 1.5px solid var(--dark-blue);
            border-radius: 3px;
            font-size: var(--text-xs);
            font-weight: 600;
            background: var(--surface);
            font-family: inherit;
            outline: none;
        }
        /* Search result highlight — <mark class="search-hit"> injected by renderRows */
        .search-hit {
            background: rgba(255, 158, 24, 0.32);  /* --orange at low opacity */
            color: inherit;
            font-weight: 700;
            border-radius: 2px;
            padding: 0 1px;
        }
        body.dark-mode .search-hit {
            background: rgba(255, 158, 24, 0.28);
            color: inherit;
        }
        .opt-pending-dot {
            display: inline-block;
            width: 6px;
            height: 6px;
            border-radius: 50%;
            background: var(--teal);
            margin-right: 5px;
            vertical-align: middle;
            animation: opt-pulse 0.8s ease-in-out infinite alternate;
            flex-shrink: 0;
        }
        @keyframes opt-pulse {
            from { opacity: 1; transform: scale(1); }
            to   { opacity: 0.35; transform: scale(0.7); }
        }

        /* ── Quick links ──────────────────────────────────────────────────── */
        .ql-row {
            display: flex;
            align-items: center;
            gap: 6px;
            padding: 3px 6px;
            border-radius: 4px;
            transition: background 0.15s;
            cursor: default;
        }
        .ql-row:hover { background: rgba(0,163,224,0.06); }
        .ql-label {
            flex: 1;
            font-size: var(--text-sm);
            font-weight: 500;
            color: var(--charcoal);
        }
        .ql-go-btn {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            width: 22px;
            height: 22px;
            border: none;
            border-radius: 4px;
            background: var(--dark-blue);
            color: white;
            cursor: pointer;
            font-size: 12px;
            line-height: 1;
            text-decoration: none;
            transition: background 0.15s, transform 0.1s;
            flex-shrink: 0;
        }
        .ql-go-btn:hover { background: var(--blue); transform: scale(1.1); }
        .ql-go-btn.ql-empty {
            background: var(--light-grey);
            color: var(--slate);
            opacity: 0.55;
            cursor: default;
        }
        .ql-edit-row {
            display: flex;
            flex-direction: column;
            gap: 3px;
            padding: 4px 6px;
            background: rgba(0,163,224,0.05);
            border-radius: 4px;
        }
        .ql-edit-row input {
            font-size: var(--text-xs);
            padding: 3px 6px;
            border: 1.5px solid var(--dark-blue);
            border-radius: 3px;
            outline: none;
            background: var(--surface);
            font-family: inherit;
            width: 100%;
            box-sizing: border-box;
            color: var(--charcoal);
        }
        .ql-edit-row input:focus { box-shadow: 0 0 0 2px rgba(0,163,224,0.18); }

        /* Add engagement button */
        .engagement-add-btn {
            display: inline-flex;
            align-items: center;
            gap: 4px;
            padding: 4px 10px;
            font-size: var(--text-xs);
            font-weight: 700;
            color: var(--purple);
            background: transparent;
            border: 1.5px solid var(--lavender);
            border-radius: var(--radius-sm);
            cursor: pointer;
            transition: background 0.15s, color 0.15s;
        }
        .engagement-add-btn:hover,
        .engagement-add-btn.active {
            background: var(--purple);
            color: white;
            border-color: var(--purple);
        }

        /* Scrollable engagement list */
        .engagement-scroll-panel {
            overflow-y: auto;
            overflow-x: hidden;
            display: flex;
            flex-direction: column;
            gap: 6px;
            overflow-wrap: break-word;
            word-break: break-word;
        }
        .engagements-empty {
            font-size: var(--text-xs);
            color: var(--slate);
            font-style: italic;
            padding: 10px 0;
            text-align: center;
        }

        /* Individual engagement entry card */
        .engagement-entry {
            display: flex;
            flex-direction: column;
            gap: 3px;
            padding: 8px 10px;
            background: var(--surface);
            border: 1px solid var(--light-grey);
            border-radius: var(--radius-sm);
            position: relative;
        }
        .engagement-entry:hover { border-color: var(--light-grey); }
        .engagement-entry-header {
            display: flex;
            align-items: center;
            gap: 6px;
            flex-wrap: wrap;
        }
        .engagement-date {
            font-size: 10px;
            font-weight: 700;
            color: var(--slate);
            white-space: nowrap;
        }
        .engagement-type-badge {
            font-size: 9px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: 0.06em;
            padding: 2px 7px;
            border-radius: 3px;
            color: white;
            background: var(--purple);
            white-space: nowrap;
        }
        .engagement-type-badge.type-meeting    { background: var(--blue); }
        .engagement-type-badge.type-site-visit { background: var(--teal); }
        .engagement-type-badge.type-email      { background: var(--forest-green); }
        .engagement-type-badge.type-task       { background: var(--orange); }
        .engagement-type-badge.type-call       { background: var(--dark-blue); }
        .engagement-type-badge.type-other      { background: var(--slate); }
        .engagement-type-badge.type-internal   { background: var(--purple); }
        .engagement-type-badge.type-public     { background: var(--teal); }
        .engagement-title {
            flex: 1;
            font-size: var(--text-xs);
            font-weight: 600;
            color: var(--charcoal);
            min-width: 0;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .engagement-delete-btn {
            margin-left: auto;
            flex-shrink: 0;
            background: none;
            border: none;
            cursor: pointer;
            padding: 0 2px;
            color: var(--light-grey);
            transition: color 0.15s;
            font-size: 14px;
            line-height: 1;
        }
        .engagement-delete-btn:hover { color: var(--primary-red); }
        .engagement-notes {
            font-size: var(--text-xs);
            color: var(--slate);
            line-height: 1.4;
            white-space: pre-wrap;
            word-break: break-word;
        }
        .engagement-meta {
            font-size: 9px;
            color: var(--light-grey);
            margin-top: 2px;
        }

        /* Dark mode overrides */
        body.dark-mode .cstat-input {
            background: var(--ch-bg-card-alt);
            border-color: var(--ch-border);
            color: var(--ch-text-primary);
        }
        body.dark-mode .cstat-input:focus { border-color: var(--orange); }
        /* customerStatsSection/engagementLogSection: see consolidated !important block below */
        body.dark-mode .engagement-entry {
            background: var(--ch-bg-card-alt);
            border-color: var(--ch-border);
        }
        body.dark-mode .engagement-title { color: var(--ch-text-primary); }
        body.dark-mode .engagement-notes { color: var(--ch-text-muted); }
        body.dark-mode .engagement-date  { color: var(--ch-text-muted); }
        body.dark-mode .engagement-meta  { color: var(--ch-text-faint); }

        /* ── Attrition Notes section ─────────────────────────────────────── */
        .attr-note-add-btn {
            display: inline-flex;
            align-items: center;
            gap: 4px;
            padding: 4px 10px;
            font-size: var(--text-xs);
            font-weight: 700;
            color: var(--burnt-orange);
            background: transparent;
            border: 1.5px solid var(--burnt-orange);
            border-radius: var(--radius-sm);
            cursor: pointer;
            transition: background 0.15s, color 0.15s, border-color 0.15s;
        }
        .attr-note-add-btn:hover,
        .attr-note-add-btn.active {
            background: var(--burnt-orange);
            color: white;
            border-color: var(--burnt-orange);
        }

        .exc-note-add-btn {
            display: inline-flex;
            align-items: center;
            gap: 4px;
            padding: 4px 10px;
            font-size: var(--text-xs);
            font-weight: 700;
            color: var(--orange);
            background: transparent;
            border: 1.5px solid var(--orange);
            border-radius: var(--radius-sm);
            cursor: pointer;
            transition: background 0.15s, color 0.15s, border-color 0.15s;
        }
        .exc-note-add-btn:hover,
        .exc-note-add-btn.active {
            background: var(--orange);
            color: white;
            border-color: var(--orange);
        }

        /* Edit (pencil) button — shared by engagement + attrition note entries */
        .entry-edit-btn {
            flex-shrink: 0;
            background: none;
            border: none;
            cursor: pointer;
            padding: 0 3px;
            color: var(--light-grey);
            transition: color 0.15s;
            font-size: 14px;
            line-height: 1;
        }
        .entry-edit-btn:hover { color: var(--dark-teal); }

        .attrition-note-scroll-panel {
            max-height: 200px;
            overflow-y: auto;
            overflow-x: hidden;
            display: flex;
            flex-direction: column;
            gap: 6px;
            overflow-wrap: break-word;
            word-break: break-word;
        }

        .attrition-notes-empty {
            font-size: var(--text-xs);
            color: var(--slate);
            font-style: italic;
            padding: 10px 0;
            text-align: center;
        }

        /* Pinned exception note — shown above the notes list */
        .exc-pinned-note {
            display: flex;
            flex-direction: column;
            gap: 4px;
            padding: 8px 12px;
            background: var(--surface);
            border: 1.5px solid var(--orange);
            border-radius: var(--radius-sm);
            margin-bottom: 10px;
            position: relative;
        }
        .exc-pinned-note-label {
            font-size: 10px;
            font-weight: 700;
            color: var(--orange);
            text-transform: uppercase;
            letter-spacing: .05em;
            display: flex;
            align-items: center;
            gap: 3px;
        }
        .exc-pinned-note-text {
            font-size: var(--text-xs);
            color: var(--charcoal);
        }
        .exc-pinned-note-meta {
            font-size: 10px;
            color: var(--slate);
        }
        body.dark-mode .exc-pinned-note {
            background: var(--ch-bg-card);
            border-color: var(--orange);
        }

        /* Pin button on exception note entries */
        .exc-pin-btn {
            background: none;
            border: none;
            cursor: pointer;
            padding: 0 2px;
            color: var(--light-grey);
            line-height: 1;
            display: inline-flex;
            align-items: center;
            transition: color var(--duration) var(--ease);
        }
        .exc-pin-btn:hover { color: var(--orange); }
        .exc-pin-btn.pinned { color: var(--orange); }

        .attrition-note-entry {
            display: flex;
            flex-direction: column;
            gap: 3px;
            padding: 8px 10px;
            background: var(--surface);
            border: 1px solid var(--light-grey);
            border-radius: var(--radius-sm);
            position: relative;
        }
        .attrition-note-entry:hover { border-color: var(--light-grey); }

        .attrition-note-header {
            display: flex;
            align-items: center;
            gap: 6px;
        }

        .attrition-note-date {
            font-size: 10px;
            font-weight: 700;
            color: var(--slate);
            white-space: nowrap;
        }

        .attrition-note-text {
            font-size: var(--text-xs);
            color: var(--slate);
            line-height: 1.4;
            white-space: pre-wrap;
            word-break: break-word;
        }

        .attrition-note-meta {
            font-size: 9px;
            color: var(--light-grey);
            margin-top: 2px;
        }

        /* Dark mode: attrition notes */
        body.dark-mode .attrition-note-entry {
            background: var(--ch-bg-card-alt);
            border-color: var(--ch-border);
        }
        body.dark-mode .attrition-note-date { color: color-mix(in srgb, var(--red) 80%, white); }
        body.dark-mode .attrition-note-text { color: var(--ch-text-muted); }
        body.dark-mode .attrition-note-meta { color: var(--ch-text-faint); }

        /* ── Dark mode: ctab-queue and ctab-product-search (All Customers / All Products) ── */
        /* In dark mode --off-white becomes the page background (#1D2429), so inactive tabs
           would be invisible without explicit overrides. */
        body.dark-mode .ctab-queue,
        body.dark-mode .ctab-product-search,
        body.dark-mode .ctab-config-matrix {
            background: var(--ch-bg-card-alt);
            border-color: var(--ch-border);
            color: var(--ch-text-muted);
        }
        body.dark-mode .ctab-queue:hover,
        body.dark-mode .ctab-product-search:hover,
        body.dark-mode .ctab-config-matrix:hover {
            background: var(--ch-bg-row-hover);
            color: var(--ch-text-primary);
        }
        body.dark-mode .ctab-queue.ctab-active,
        body.dark-mode .ctab-product-search.ctab-active,
        body.dark-mode .ctab-config-matrix.ctab-active {
            background: var(--ch-bg-card);
            border-color: var(--ch-border);
            color: var(--ch-text-primary);
            box-shadow: inset 0 4px 0 var(--primary-grey);
        }
        /* Product/customer/feature dynamic tabs in dark mode */
        body.dark-mode .ctab-product,
        body.dark-mode .ctab-customer,
        body.dark-mode .ctab-feature {
            background: var(--ch-bg-card-alt);
            border-color: var(--ch-border);
        }
        body.dark-mode .ctab-shortname {
            background: rgba(162,2,52,0.15) !important;
            background: color-mix(in srgb, var(--primary-red) 18%, var(--ch-bg-card-alt)) !important;
            color: var(--primary-red) !important;
            color: color-mix(in srgb, var(--primary-red) 80%, white) !important;
        }

        /* ── Dark mode: customer detail section cards ──────────────────────────
           All sections use background:var(--off-white) as inline styles. In dark mode
           --off-white resolves to #1D2429 (near-black) on the body, producing the
           wrong appearance.
           
           Fix: redefine --off-white on the two containers where sections live:
             • #cdSectionGrid — sections shown inline in the detail panel
             • #cdSectionPopupBody — sections moved here when in button/popup mode
           
           CSS custom properties cascade through the DOM, so any child element
           using var(--off-white) — whether in a stylesheet rule or an inline style —
           inherits the overridden value from its ancestor. No !important needed. */
        body.dark-mode #cdSectionGrid,
        body.dark-mode #cdSectionPopupBody {
            --off-white: var(--ch-bg-card);    /* #2D3748 instead of #1D2429 */
            --light-grey: var(--ch-border);    /* border overrides too */
        }
        /* Popup wrapper shell */
        body.dark-mode #cdSectionPopup .modal-content {
            background: var(--ch-bg-card) !important;
        }

        /* Exception notes section: form and select inputs in dark mode */
        body.dark-mode #excNoteForm {
            background: var(--ch-bg-card-alt) !important;
            border-color: var(--orange) !important;
        }
        body.dark-mode #excException,
        body.dark-mode #excNoteFormText {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-primary) !important;
            border-color: var(--ch-border) !important;
        }
        body.dark-mode #excNoteCancelBtn {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-muted) !important;
            border-color: var(--ch-border) !important;
        }

        /* ── Dark mode: ed-field text colors (--charcoal/--slate are light-mode only) ── */
        body.dark-mode .ed-label { color: var(--ch-text-muted) !important; }
        body.dark-mode .ed-value { color: var(--ch-text-primary) !important; }
        body.dark-mode .ed-input { background: var(--ch-bg-card-alt) !important; color: var(--ch-text-primary) !important; }
        body.dark-mode .ql-label { color: var(--ch-text-primary) !important; }
        body.dark-mode .ql-go-btn.ql-empty { background: var(--ch-bg-card-alt) !important; color: var(--ch-text-muted) !important; }

        /* ── Dark mode: contact cards ── */
        body.dark-mode .contact-card { background: var(--ch-bg-card-alt) !important; border-color: var(--ch-border) !important; }
        body.dark-mode .contact-card-name  { color: var(--ch-text-primary) !important; }
        body.dark-mode .contact-card-title { color: var(--ch-text-muted) !important; }
        body.dark-mode .contact-card-phone { color: var(--ch-text-muted) !important; }

        /* ── Dark mode: type filter pills (asset status + engagement) ── */
        body.dark-mode .type-filter-pill { border-color: var(--ch-border) !important; color: var(--ch-text-muted) !important; }
        body.dark-mode .type-filter-pill:hover { background: var(--ch-bg-card-alt) !important; }
        body.dark-mode .type-filter-pill.active { background: var(--ch-text-muted) !important; color: var(--ch-bg-page) !important; }

        /* ── Dark mode: product search results table (inline row backgrounds) ── */
        body.dark-mode #productSearchResultsBody tr   { background: var(--ch-bg-card) !important; }
        body.dark-mode #productSearchResultsBody tr:hover { background: var(--ch-bg-row-hover) !important; }
        body.dark-mode #productSearchResultsBody td   { color: var(--ch-text-primary); border-color: var(--ch-border); }

        /* ── Dark mode: modal tabs and mapping hub content ── */
        body.dark-mode .modal-tab-bar { background: var(--ch-bg-card-alt) !important; border-bottom-color: var(--ch-border) !important; }
        body.dark-mode .modal-tab { color: var(--ch-text-muted) !important; background: transparent !important; }
        body.dark-mode .modal-tab.active { color: var(--primary-red) !important; background: var(--ch-bg-card) !important; border-bottom-color: var(--primary-red) !important; }
        /* Mapping hub table rows and inputs */
        body.dark-mode [id$="TableBody"] tr,
        body.dark-mode [id$="TableBody"] td { background: var(--ch-bg-card) !important; color: var(--ch-text-primary) !important; border-color: var(--ch-border) !important; }
        body.dark-mode [id$="TableBody"] tr:nth-child(even) { background: var(--ch-bg-card-alt) !important; }
        body.dark-mode [id$="TableBody"] input { background: var(--ch-bg-card-alt) !important; color: var(--ch-text-primary) !important; border-color: var(--ch-border) !important; }
        /* Unmapped section header */
        body.dark-mode [data-section-header] td,
        body.dark-mode .unmapped-section-header { background: rgba(255,158,24,0.18) !important; background: color-mix(in srgb, var(--orange) 20%, var(--ch-bg-card)) !important; color: var(--ch-text-primary) !important; }

        /* ── Dark mode: cell inline edit inputs ── */
        body.dark-mode .cell-edit-input,
        body.dark-mode .cell-edit-select { background: var(--ch-bg-card-alt) !important; color: var(--ch-text-primary) !important; border-color: var(--dark-blue) !important; }

        /* ── Dark mode: cstat display labels within contract stats ── */
        body.dark-mode .cstat-label { color: var(--ch-text-muted) !important; }
        body.dark-mode #cstatDurationLabel { color: var(--ch-text-muted) !important; }

        /* ══ DARK MODE COMPREHENSIVE FIXES — all components & new items ═══ */

        /* ── Bulk action toolbar: REMOVED ─────────────────────────────────── */

        /* ── Engagement form ─────────────────────────────────────────────── */
        body.dark-mode #engagementForm {
            background: var(--ch-bg-card-alt) !important;
            border-color: var(--ch-border) !important;
        }

        /* ── Saved views UI ──────────────────────────────────────────────── */
        body.dark-mode #savedViewSelect {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-primary) !important;
            border-color: var(--ch-border) !important;
        }
        body.dark-mode #deleteViewBtn {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-muted) !important;
        }
        body.dark-mode #shareViewBtn {
            color: var(--ch-text-muted) !important;
            border-color: var(--ch-border) !important;
        }
        body.dark-mode #shareViewBtn:hover { background: var(--ch-bg-card-alt) !important; }

        /* ── Login screen ────────────────────────────────────────────────── */
        body.dark-mode #loginSelectedAvatar {
            background: var(--ch-bg-card) !important;
            border-color: var(--ch-border) !important;
        }

        /* ── Confirm modal ───────────────────────────────────────────────── */
        body.dark-mode #confirmMsg { color: var(--ch-text-primary) !important; }
        body.dark-mode #confirmCancelBtn {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-primary) !important;
        }

        /* ── Custom fields form ──────────────────────────────────────────── */
        body.dark-mode #cfName,
        body.dark-mode #cfDataType,
        body.dark-mode #cfOptions {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-primary) !important;
            border-color: var(--ch-border) !important;
        }
        body.dark-mode #cfCancelBtn {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-muted) !important;
        }

        /* ── Change password modal inputs ────────────────────────────────── */
        body.dark-mode #currentPasswordInput,
        body.dark-mode #newPasswordInput,
        body.dark-mode #confirmPasswordInput {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-primary) !important;
            border-color: var(--ch-border) !important;
        }
        body.dark-mode #changePwCancelBtn {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-muted) !important;
        }

        /* ── Import preview summary ──────────────────────────────────────── */
        body.dark-mode #importPreviewSummary {
            background: var(--ch-bg-card) !important;
            color: var(--ch-text-primary) !important;
            border-color: var(--ch-border) !important;
        }


        /* ── Hardcoded white backgrounds in table rows ───────────────────── */
        body.dark-mode [style*="background: white"],
        body.dark-mode [style*="background:white"] {
            background: var(--ch-bg-card) !important;
            color: var(--ch-text-primary) !important;
        }




        /* ── Styled scrollbars (Webkit) ──────────────────────────────────── */

        /* ── 3.1: Dark mode — global search input ── */
        body.dark-mode #globalSearchInput {
            background: var(--ch-bg-card) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary) !important;
        }
        body.dark-mode #globalSearchInput::placeholder { color: var(--ch-text-muted) !important; }
        body.dark-mode .filter-summary-bar { background: var(--ch-bg-card-alt); border-color: var(--ch-border); }
        body.dark-mode #filterSearchInput {
            background: var(--ch-bg-card-alt) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary) !important;
        }
        body.dark-mode .version-operator-btn {
            background: var(--ch-bg-card-alt) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary) !important;
        }
        body.dark-mode .version-operator-btn:hover { background: var(--ch-bg-row-hover) !important; }
        body.dark-mode #versionFilterInput {
            background: var(--ch-bg-card-alt) !important;
            border-color: var(--ch-border) !important;
            color: var(--ch-text-primary) !important;
        }
        /* Column filter dialog checkbox list */
        body.dark-mode #filterCheckboxList label { color: var(--ch-text-secondary); }
        body.dark-mode #filterCheckboxList { background: var(--ch-bg-card); }
        /* Stale data banner */
        body.dark-mode #staleDataBanner {
            background: rgba(199,87,0,0.18) !important;
            border-color: var(--burnt-orange) !important;
        }

        body.dark-mode ::-webkit-scrollbar { width: 8px; height: 8px; }
        body.dark-mode ::-webkit-scrollbar-track { background: var(--ch-bg-page); }
        body.dark-mode ::-webkit-scrollbar-thumb {
            background: var(--ch-border-strong);
            border-radius: 4px;
        }
        body.dark-mode ::-webkit-scrollbar-thumb:hover { background: var(--ch-text-faint); }

        /* ── role=button elements get pointer cursor ─────────────────────── */
        [role="button"] { cursor: pointer; }

        #engagementLogSection {
            display: flex;
            flex-direction: column;
            overflow: hidden;
            box-sizing: border-box;
        }
        #engagementLogSection .engagement-scroll-panel {
            flex: 1;
            min-height: 0;
        }

        /* ══════════════════════════════════════════════════════════════════
           FEATURE: Per-Customer Changelog Timeline
           ══════════════════════════════════════════════════════════════════ */
        /* ── Issue 7: Compact single-row changelog entries ── */
        .changelog-entry {
            padding: 6px 12px;
            border-bottom: 1px solid var(--border-soft);
            display: flex;
            align-items: center;
            gap: 5px;
            flex-wrap: wrap;
            font-size: var(--text-xs);
        }
        .changelog-entry:last-child { border-bottom: none; }
        .cl-sep   { color: var(--light-grey); font-size: 10px; flex-shrink: 0; }
        .cl-date  { font-size: var(--text-2xs); font-weight: 600; color: var(--slate); white-space: nowrap; flex-shrink: 0; }
        .cl-time  { font-weight: 700; color: var(--charcoal); white-space: nowrap; flex-shrink: 0; }
        .cl-user  { color: var(--primary-grey); white-space: nowrap; }
        .cl-field { font-weight: 600; color: var(--charcoal); }
        .cl-old   { color: var(--slate); text-decoration: line-through; font-size: var(--text-2xs); }
        .cl-new   { color: var(--dark-blue); font-weight: 600; }
        .cl-arrow { color: var(--light-grey); font-size: 10px; }
        .changelog-entry .cl-cat-badge { margin-left: auto; flex-shrink: 0; }
        .changelog-empty { padding: 28px; text-align: center; color: var(--slate); font-size: var(--text-sm); }
        /* ── Changelog section layout ── */
        .cl-section {
            margin-bottom: 16px;
            padding: 16px 18px 14px;
            background: var(--off-white);
            border-radius: var(--radius-md);
            border-left: 4px solid var(--purple);
        }
        .cl-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            margin-bottom: 10px;
        }
        .cl-title {
            margin: 0;
            color: var(--lavender);
            font-size: 14px;
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: .5px;
        }
        .cl-header-right {
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .cl-count {
            font-size: var(--text-xs);
            color: var(--slate);
            font-weight: 600;
        }
        .cl-refresh-btn {
            background: none;
            border: 1px solid var(--light-grey);
            border-radius: var(--radius-sm);
            color: var(--slate);
            cursor: pointer;
            padding: 3px 6px;
            display: inline-flex;
            align-items: center;
            transition: background var(--duration) var(--ease), color var(--duration) var(--ease);
        }
        .cl-refresh-btn:hover { background: var(--light-grey); color: var(--charcoal); }
        /* ── Category filter pills ── */
        .cl-filter-bar {
            display: flex;
            align-items: center;
            gap: 6px;
            flex-wrap: wrap;
            margin-bottom: 12px;
        }
        .cl-cat-pill {
            padding: 5px 12px;
            background: var(--light-grey);
            color: var(--charcoal);
            border: 1px solid rgba(91, 114, 124, 0.35);
            border-radius: var(--radius-lg);
            cursor: pointer;
            font-size: var(--text-xs);
            font-weight: 600;
            transition: background var(--duration) var(--ease),
                        box-shadow var(--duration) var(--ease),
                        color var(--duration) var(--ease);
        }
        .cl-cat-pill:hover  { background: var(--slate) !important; color: white !important; }
        .cl-cat-pill.active {
            background: var(--primary-grey) !important;
            color: white !important;
            border-color: var(--primary-grey) !important;
            box-shadow: 0 0 0 2px rgba(69,85,95,0.25);
            font-weight: 700 !important;
        }
        /* ── Timeline container ── */
        .cl-timeline {
            max-height: 340px;
            overflow-y: auto;
            scrollbar-gutter: stable; overflow-y: auto; /* Safari fallback: no scrollbar-gutter support */
        }
        /* ── Date-group divider ── */
        .cl-date-group {
            padding: 6px 0 4px;
            font-size: var(--text-2xs);
            font-weight: 700;
            color: var(--slate);
            text-transform: uppercase;
            letter-spacing: .06em;
            border-bottom: 1px solid var(--light-grey);
            margin-bottom: 2px;
            margin-top: 8px;
        }
        .cl-date-group:first-child { margin-top: 0; }
        /* ── Category badge on entries ── */
        .cl-cat-badge {
            display: inline-block;
            padding: 1px 6px;
            border-radius: 9999px;
            border: 1px solid;
            font-size: 10px;
            font-weight: 700;
            line-height: 1.5;
            white-space: nowrap;
        }
        /* ── Dark mode overrides ── */
        body.dark-mode .cl-section { background: var(--ch-bg-card); border-left-color: var(--purple); }
        body.dark-mode .changelog-entry  { border-color: var(--ch-border); }
        body.dark-mode .changelog-meta .cl-time { color: var(--ch-text-primary); }
        body.dark-mode .changelog-field  { color: var(--ch-text-primary); }
        body.dark-mode .cl-new           { color: var(--blue); }
        body.dark-mode .cl-date-group    { color: var(--ch-text-muted); border-color: var(--ch-border); }
        body.dark-mode .cl-cat-pill        { background: var(--ch-bg-card) !important; color: var(--ch-text-muted) !important; border-color: var(--ch-border) !important; }
        body.dark-mode .cl-cat-pill:hover  { background: var(--ch-bg-row-hover) !important; color: var(--ch-text-primary) !important; }
        body.dark-mode .cl-cat-pill.active { background: var(--ch-text-muted) !important; color: var(--ch-bg-page) !important; box-shadow: none !important; }
        body.dark-mode .cl-refresh-btn   { border-color: var(--ch-border); color: var(--ch-text-secondary); }
        body.dark-mode .cl-refresh-btn:hover { background: var(--ch-bg-row-hover); color: var(--ch-text-primary); }

        /* ══════════════════════════════════════════════════════════════════
           FEATURE: Executive Summary
           ══════════════════════════════════════════════════════════════════ */
        .exec-stat-card {
            background: var(--surface);
            border: 1px solid var(--light-grey);
            border-radius: var(--radius-md);
            padding: 14px 16px;
        }
        .exec-stat-label {
            font-size: var(--text-2xs);
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: .05em;
            color: var(--slate);
            margin-bottom: 4px;
        }
        .exec-stat-value {
            font-size: 28px;
            font-weight: 700;
            color: var(--charcoal);
            line-height: 1;
            margin-bottom: 2px;
        }
        .exec-stat-sub { font-size: var(--text-2xs); color: var(--slate); }
        .exec-status-badge {
            display: inline-block;
            padding: 2px 8px;
            border-radius: 20px;
            font-size: var(--text-2xs);
            font-weight: 700;
            white-space: nowrap;
        }
        .exec-status-Compliant        { background: rgba(0,163,224,.12); color: var(--dark-blue); }
        .exec-status-Non-Compliant    { background: rgba(240,48,48,.12);  color: var(--dark-red);  }
        .exec-status-Upgrade-in-Progress { background: rgba(135,190,80,.12); color: var(--forest-green); }
        .exec-status-Not-v21          { background: rgba(164,160,238,.18); color: var(--purple); }
        .exec-status-No-Data          { background: var(--light-grey);   color: var(--slate);    }
        .exec-status-Unknown          { background: var(--light-grey);   color: var(--slate);    }
        #execActionTable tbody tr:hover td { background: rgba(0,163,224,.04); cursor: pointer; }
        #execActionTable tbody td { padding: 3px 8px; border-bottom: 1px solid var(--light-grey); color: var(--charcoal); }
        body.dark-mode .exec-stat-card { background: var(--ch-bg-card); border-color: var(--ch-border); }
        body.dark-mode .exec-stat-value { color: var(--ch-text-primary); }
        body.dark-mode #execActionTable tbody td { border-color: var(--ch-border); color: var(--ch-text-primary); background: var(--ch-bg-card); }
        body.dark-mode #execActionTable tbody tr:hover td { background: var(--ch-bg-row-hover); }

        /* ── Table Empty State (.tes-*) ──────────────────────────────────── */
        .tes-cell {
            padding: 56px 24px;
            text-align: center;
            vertical-align: middle;
        }
        .tes-icon {
            margin-bottom: 14px;
            display: flex;
            justify-content: center;
        }
        .tes-headline {
            font-size: 16px;
            font-weight: 700;
            color: var(--charcoal);
            margin-bottom: 8px;
        }
        .tes-body {
            font-size: var(--text-sm);
            color: var(--slate);
            max-width: 380px;
            margin: 0 auto;
            line-height: 1.6;
        }
        .tes-link {
            background: none;
            border: none;
            color: var(--blue);
            cursor: pointer;
            font-size: var(--text-sm);
            text-decoration: underline;
            padding: 0;
        }
        .tes-link:hover { color: var(--dark-blue); }
        body.dark-mode .tes-headline { color: var(--ch-text-primary); }
        body.dark-mode .tes-body     { color: var(--ch-text-secondary); }
        body.dark-mode .tes-link     { color: var(--blue); }

        /* Command palette action items */
        .cmd-action-item {
            display: flex;
            align-items: center;
            gap: 10px;
            padding: 9px 14px;
            cursor: pointer;
            border-radius: var(--radius-sm);
            transition: background var(--duration) var(--ease);
        }
        .cmd-action-item:hover, .cmd-action-item.active {
            background: var(--ch-bg-row-hover);
        }
        .cmd-action-icon {
            width: 28px;
            height: 28px;
            border-radius: var(--radius-sm);
            display: flex;
            align-items: center;
            justify-content: center;
            background: var(--off-white);
            color: var(--primary-grey);
            flex-shrink: 0;
        }
        .cmd-action-name { font-size: var(--text-sm); font-weight: 600; color: var(--charcoal); }
        .cmd-action-desc { font-size: var(--text-2xs); color: var(--slate); margin-top: 1px; }
        .cmd-section-label {
            padding: 6px 14px 4px;
            font-size: var(--text-2xs);
            font-weight: 700;
            text-transform: uppercase;
            letter-spacing: .06em;
            color: var(--slate);
        }
        body.dark-mode .cmd-action-icon  { background: var(--ch-bg-card-alt); color: var(--ch-text-secondary); }
        body.dark-mode .cmd-action-name  { color: var(--ch-text-primary); }

        /* ── Quick-filter divider between CS pills and compliance pills ── */
        /* .quick-filter-divider removed — replaced by CSS grid layout */

        /* ── Compliance filter pills — base (CSS-variable driven, brand-aligned) ── */
        .compliance-filter-pill {
            padding: 5px 12px;
            border-radius: var(--radius-lg);
            border: 1px solid transparent;
            cursor: pointer;
            font-size: var(--text-xs);
            font-weight: 600;
            transition: background var(--duration) var(--ease),
                        box-shadow var(--duration) var(--ease);
        }
        /* Production: Blue family */
        .cfp-production {
            background: rgba(0,163,224,0.10);
            color: var(--dark-blue);
            border-color: rgba(0,163,224,0.28);
        }
        .cfp-production:hover, .cfp-production.active {
            background: rgba(0,163,224,0.20);
            box-shadow: 0 0 0 2px var(--blue);
        }
        /* Test: Teal family */
        .cfp-test {
            background: rgba(47,196,190,0.10);
            color: var(--dark-teal);
            border-color: rgba(47,196,190,0.28);
        }
        .cfp-test:hover, .cfp-test.active {
            background: rgba(47,196,190,0.20);
            box-shadow: 0 0 0 2px var(--teal);
        }
        /* No Compliance: Orange family */
        .cfp-none {
            background: rgba(255,158,24,0.10);
            color: var(--burnt-orange);
            border-color: rgba(255,158,24,0.30);
        }
        .cfp-none:hover, .cfp-none.active {
            background: rgba(255,158,24,0.22);
            box-shadow: 0 0 0 2px var(--orange);
        }
        /* Upgrading: Green family */
        .cfp-upgrade {
            background: rgba(135,190,80,0.10);
            color: var(--forest-green);
            border-color: rgba(135,190,80,0.28);
        }
        .cfp-upgrade:hover, .cfp-upgrade.active {
            background: rgba(135,190,80,0.20);
            box-shadow: 0 0 0 2px var(--green);
        }
        /* Non-v21: Lavender/Purple family */
        .cfp-remaining {
            background: rgba(164,160,238,0.12);
            color: var(--purple);
            border-color: rgba(164,160,238,0.30);
        }
        .cfp-remaining:hover, .cfp-remaining.active {
            background: rgba(164,160,238,0.24);
            box-shadow: 0 0 0 2px var(--lavender);
        }
        /* ── Feature Usage (button grid + drill-in tabs) ────────────────────── */
        /* Read-only value badges for the drill-in report table (which customer
           has what value for one feature). Deliberately separate from
           .feat-pill (the editable Features-section field wrapper, which
           carries no color of its own) — this is a report view, not an
           editable field, so color-coding here still earns its keep for
           at-a-glance scanning across many customers. Orange = needs
           attention (gap/unknown) — never red; red is reserved for actual
           non-compliance elsewhere in the app. */
        .feat-val        { border-radius: var(--radius-sm); }
        .feat-val-yes    { background: rgba(135,190,80,0.14); color: var(--forest-green); }
        .feat-val-no     { background: var(--off-white); color: var(--slate); }
        .feat-val-na     { background: var(--off-white); color: var(--slate); font-style: italic; }
        .feat-val-unk,
        .feat-val-gap    { background: rgba(255,158,24,0.12); color: var(--burnt-orange); }
        .feat-val-other  { background: rgba(0,163,224,0.10); color: var(--dark-blue); }
        /* Feature drill-in tabs (opened by clicking a button in the grid below) —
           mirrors .ctab-product's exact structure (unselected: muted grey accent
           + always-purple icon/badge; selected: purple accent + purple text),
           with purple substituted for teal. */
        .ctab-feature {
            padding-right: 32px;
            background: var(--off-white);
            border-color: var(--light-grey);
            box-shadow: inset 0 4px 0 var(--primary-grey);
            color: var(--primary-grey);
            font-weight: 500;
        }
        /* Feature tab icon always stays purple */
        .ctab-feature svg { color: var(--purple); opacity: 0.9; }
        .ctab-feature:hover {
            background: var(--off-white);
            background: color-mix(in srgb, var(--surface) 55%, var(--off-white));
            color: var(--charcoal);
            border-color: var(--light-grey);
        }
        .ctab-feature.ctab-active {
            color: var(--purple);
            font-weight: 700;
            border-color: var(--light-grey);
            border-bottom: 2px solid var(--surface);
            margin-bottom: -2px;
            box-shadow: inset 0 4px 0 var(--purple);
            background: var(--surface);
        }
        /* Feature tab count pill always stays purple (slightly darker when
           unselected), mirroring .ctab-count-pill's teal treatment for products */
        .ctab-feature .ctab-count-pill {
            background: var(--purple);
            background: color-mix(in srgb, var(--purple) 85%, black);
        }
        .ctab-feature.ctab-active .ctab-count-pill {
            background: var(--purple);
        }
        /* ── Features section (its own top-level customer-detail card) ─────── */
        .feat-section { display: flex; flex-direction: column; gap: 14px; }
        .feat-category {
            border-left: 3px solid var(--slate);
            padding: 6px 0 6px 14px;
        }
        .feat-cat-label {
            font-size: 11px; font-weight: 700; text-transform: uppercase;
            letter-spacing: 0.05em; margin-bottom: 8px;
        }
        /* Grid (not flex-wrap) so items align into true columns across wrapped
           rows regardless of label-length differences between fields. */
        .feat-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
            gap: 10px 14px;
        }
        .feat-item {
            display: flex; flex-direction: column; gap: 4px;
        }
        .feat-label {
            font-size: var(--text-xs); font-weight: 600; color: var(--slate);
        }
        /* .feat-pill intentionally carries no visual styling of its own — it's
           an .ed-field like every other double-click-to-edit field in the app
           (e.g. Support Information): plain text at rest, and only becomes a
           bordered box (.ed-input, applied by startFieldEdit) once you
           double-click. No box, no background tint, no value-based coloring
           until then — full parity with the rest of the app's inline-edit
           fields, not a distinct "pill" look. */
        .feat-pill {
            position: relative;
        }
        /* Dark mode overrides */
        /* Gray CS attribute pills — consistent size and border with compliance pills */
        .quick-filter-pill {
            padding: 5px 12px;
            background: var(--light-grey);
            color: var(--charcoal);
            border: 1px solid rgba(91, 114, 124, 0.35);
            border-radius: var(--radius-lg);
            cursor: pointer;
            font-size: var(--text-xs);
            font-weight: 600;
            transition: background var(--duration) var(--ease),
                        box-shadow var(--duration) var(--ease),
                        color var(--duration) var(--ease);
        }
        .quick-filter-pill:hover {
            background: var(--slate) !important;
            color: white !important;
        }
        .quick-filter-pill.active {
            background: var(--primary-grey) !important;
            color: white !important;
            border-color: var(--primary-grey) !important;
            box-shadow: 0 0 0 2px rgba(69,85,95,0.25);
            font-weight: 700 !important;
        }

                body.dark-mode .compliance-filter-pill {
            background: var(--ch-bg-card-alt) !important;
            color: var(--ch-text-primary) !important;
            border-color: var(--ch-border) !important;
        }
        body.dark-mode .compliance-filter-pill.active {
            background: var(--primary-red) !important;
            color: white !important;
            box-shadow: none !important;
        }


        /* ── Notification system ──────────────────────────────────────────── */
        /* Badge on avatar circle */
        #notifBadge {
            position: absolute;
            top: -4px;
            right: -4px;
            min-width: 18px;
            height: 18px;
            border-radius: 9999px;
            background: var(--primary-red);
            color: white;
            font-size: 10px;
            font-weight: 700;
            display: none;
            align-items: center;
            justify-content: center;
            padding: 0 4px;
            box-sizing: border-box;
            border: 2px solid var(--surface);
            pointer-events: none;
            z-index: var(--z-base);
        }
        #notifBadge.visible { display: flex; }

        /* Notification panel inside user menu */
        .notif-panel {
            padding: 0;
        }
        .notif-panel-header {
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 10px 14px 8px;
            border-bottom: 1px solid var(--light-grey);
        }
        .notif-panel-title {
            font-size: var(--text-xs);
            font-weight: 700;
            color: var(--charcoal);
            text-transform: uppercase;
            letter-spacing: .05em;
        }
        .notif-mark-all-btn {
            font-size: 10px;
            color: var(--blue);
            background: none;
            border: none;
            cursor: pointer;
            padding: 0;
            font-weight: 600;
        }
        .notif-mark-all-btn:hover { color: var(--dark-blue); }
        .notif-list {
            max-height: 300px;
            overflow-y: auto;
            scrollbar-gutter: stable; overflow-y: auto; /* Safari fallback: no scrollbar-gutter support */
        }
        .notif-item {
            display: flex;
            align-items: flex-start;
            gap: 10px;
            padding: 10px 14px;
            border-bottom: 1px solid var(--light-grey);
            cursor: pointer;
            transition: background var(--duration) var(--ease);
        }
        .notif-item:last-child { border-bottom: none; }
        .notif-item:hover { background: var(--off-white); }
        .notif-item.unread { background: rgba(0,163,224,0.04); }
        .notif-item.unread:hover { background: rgba(0,163,224,0.08); }
        .notif-dot {
            flex-shrink: 0;
            width: 8px;
            height: 8px;
            border-radius: 50%;
            background: var(--blue);
            margin-top: 5px;
        }
        .notif-dot.hidden { background: transparent; }
        .notif-content { flex: 1; min-width: 0; }
        .notif-title {
            font-size: var(--text-xs);
            font-weight: 600;
            color: var(--charcoal);
            margin-bottom: 2px;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }
        .notif-time {
            font-size: 10px;
            color: var(--slate);
        }
        .notif-type-icon { font-size: 14px; flex-shrink: 0; line-height: 1; margin-top: 2px; }
        .notif-dismiss-btn {
            flex-shrink: 0;
            background: none;
            border: none;
            cursor: pointer;
            color: var(--light-grey);
            font-size: 16px;
            line-height: 1;
            padding: 0 2px;
            margin-top: 1px;
            transition: color var(--duration) var(--ease);
        }
        .notif-dismiss-btn:hover { color: var(--slate); }
        .notif-empty {
            padding: 20px 14px;
            text-align: center;
            color: var(--slate);
            font-size: var(--text-xs);
        }
        /* Dark mode */
        body.dark-mode .notif-panel-title { color: var(--ch-text-primary); }
        body.dark-mode .notif-panel-header { border-color: var(--ch-border); }
        body.dark-mode .notif-item { border-color: var(--ch-border); }
        body.dark-mode .notif-item:hover { background: var(--ch-bg-row-hover); }
        body.dark-mode .notif-item.unread { background: rgba(0,163,224,0.06); }
        body.dark-mode .notif-dismiss-btn { color: var(--ch-text-faint); }
        body.dark-mode .notif-dismiss-btn:hover { color: var(--ch-text-muted); }
        body.dark-mode .notif-title { color: var(--ch-text-primary); }
        body.dark-mode #notifBadge { border-color: var(--ch-bg-card); }

        /* ── Group field visibility — column hiding ───────────────────────── */
        /* TEST version + date columns */
        #dataTable.gc-hide-test th.gc-col-test,
        #dataTable.gc-hide-test td.gc-col-test { display: none !important; }
        /* PROD version + date columns */
        #dataTable.gc-hide-prod th.gc-col-prod,
        #dataTable.gc-hide-prod td.gc-col-prod { display: none !important; }
        /* DEV version + date columns */
        #dataTable.gc-hide-dev  th.gc-col-dev,
        #dataTable.gc-hide-dev  td.gc-col-dev  { display: none !important; }
        /* Environment/CS pills column */
        #dataTable.gc-hide-env  th.gc-col-env,
        #dataTable.gc-hide-env  td.gc-col-env  { display: none !important; }

        /* Group badge in user menu / admin display */
        .group-badge {
            display: inline-block;
            padding: 2px 8px;
            border-radius: 9999px;
            font-size: 10px;
            font-weight: 700;
            color: white;
            line-height: 1.6;
            vertical-align: middle;
        }


/* ── Section resize handles (shared: dashboard + customer detail) ────────── */
.widget-resizable { position: relative; }
.widget-resize-handle {
    position: absolute; bottom: 5px; right: 5px;
    width: 18px; height: 18px; cursor: se-resize; z-index: var(--z-filter-dialog);
    opacity: 0; transition: opacity 0.15s ease; pointer-events: all;
}
.widget-resizable:hover .widget-resize-handle { opacity: 1; }
.widget-resize-handle::before {
    content: '';
    position: absolute; bottom: 3px; right: 3px;
    width: 8px; height: 8px;
    border-right: 2px solid var(--slate);
    border-bottom: 2px solid var(--slate);
    border-radius: 1px; opacity: 0.6;
}
body.widget-resizing   { -webkit-user-select: none; user-select: none; cursor: se-resize !important; }
body.widget-resizing * { cursor: se-resize !important; }

.widget-resize-handle-e {
    position: absolute; top: 18px; bottom: 18px; right: -4px;
    width: 8px; cursor: ew-resize; z-index: var(--z-resize-handle);
    opacity: 0; transition: opacity 0.15s ease; border-radius: 4px;
}
.widget-resizable:hover .widget-resize-handle-e { opacity: 1; background: rgba(0,163,224,0.18); }
body.widget-resizing-ew   { -webkit-user-select: none; user-select: none; cursor: ew-resize !important; }
body.widget-resizing-ew * { cursor: ew-resize !important; }

/* ── Section flex+scroll layout (resize scrolling) ─────────────────────── */
/* Applied to sections with tables or scroll panels so content scrolls
   rather than overflows when the section is height-constrained by resize. */
.cd-section-flex {
    display: flex;
    flex-direction: column;
    overflow: hidden;
    box-sizing: border-box;
}

/* Table wrapper inside opp / proj sections */
.cd-section-flex > [style*="overflow-x:auto"] {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    overflow-x: hidden !important;
}

/* Asset details container */
#assetDetailsContainer {
    flex: 1 !important;
    min-height: 0 !important;
    overflow-y: auto;
    overflow-x: hidden;
    margin-bottom: 0 !important;
}

/* Support info + attrition — no inner scroll body, just clip */
#csInfoSection,
#attritionInfoSection {
    overflow-x: hidden;
    overflow-y: auto;
    box-sizing: border-box;
}

/* ── Customer Detail Layout System ─────────────────────────────────────────── */
#cdSectionGrid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 14px;
    grid-auto-flow: dense;
    margin-bottom: 16px;
}

/* Config panel overlay */
#cdConfigModal {
    display: none; position: fixed; inset: 0;
    background: rgba(29,36,41,0.55); z-index: var(--z-modal-front);
    align-items: center; justify-content: center; padding: 24px 16px;
}
#cdConfigModal.open { display: flex; }
.cd-config-box {
    background: var(--surface); border-radius: var(--radius-md);
    box-shadow: var(--shadow-lg); width: 100%; max-width: 460px;
    display: flex; flex-direction: column; max-height: 88vh; overflow: hidden;
}
.cd-config-header {
    padding: 16px 20px; border-bottom: 1px solid var(--light-grey);
    display: flex; align-items: center; justify-content: space-between; flex-shrink: 0;
}
.cd-config-title { font-size: var(--text-md); font-weight: 700; color: var(--charcoal); }
.cd-config-subtitle { font-size: var(--text-xs); color: var(--slate); margin-top: 2px; }
.cd-config-body { flex: 1; overflow-y: auto; padding: 8px 0; }
.cd-config-footer {
    padding: 12px 20px; border-top: 1px solid var(--light-grey); flex-shrink: 0;
    display: flex; align-items: center; justify-content: space-between;
}
.cd-config-item {
    display: flex; align-items: center; gap: 10px;
    padding: 9px 16px; cursor: default; -webkit-user-select: none; user-select: none;
    transition: background var(--duration) var(--ease);
}
.cd-config-item:hover { background: var(--surface-alt, #f5f7f8); }
.cd-config-item.drag-over-top    { border-top: 2px solid var(--blue); }
.cd-config-item.drag-over-bottom { border-bottom: 2px solid var(--blue); }
.cd-config-item.dragging { opacity: 0.4; }
.cd-config-drag {
    cursor: grab; color: var(--slate); font-size: 18px; flex-shrink: 0;
    line-height: 1; padding: 0 2px;
}
.cd-config-drag:active { cursor: grabbing; }
.cd-config-label { flex: 1; font-size: var(--text-sm); color: var(--charcoal); min-width: 0; }

/* 3-way mode toggle */
.cd-mode-toggle {
    display: flex; border: 1px solid var(--border-soft);
    border-radius: var(--radius-sm); overflow: hidden; flex-shrink: 0;
}
.cd-mode-pill {
    padding: 4px 9px; font-size: 10px; font-weight: 600;
    font-family: var(--font-sans); background: none; border: none;
    border-right: 1px solid var(--border-soft); cursor: pointer;
    color: var(--slate); transition: background 0.12s, color 0.12s; white-space: nowrap;
}
.cd-mode-pill:last-child { border-right: none; }
.cd-mode-pill:hover { background: var(--off-white); color: var(--charcoal); }
.cd-mode-pill.active[data-mode-val="section"] { background: var(--dark-blue); color: white; }
.cd-mode-pill.active[data-mode-val="button"]  { background: var(--teal);      color: white; }
.cd-mode-pill.active[data-mode-val="hidden"]  { background: var(--slate);     color: white; }
/* Dashboard customize: Show/Hide two-state variants */
.cd-mode-pill.active[data-mode-val="show"]    { background: var(--teal);      color: white; }
.cd-mode-pill.active[data-mode-val="hide"]    { background: var(--slate);     color: white; }

/* Action item inline sections */
.cd-action-section { display: flex; flex-direction: column; box-sizing: border-box; overflow: hidden; }
.cd-action-hdr {
    display: flex; align-items: center; gap: 8px;
    padding: 10px 16px; background: var(--off-white);
    font-size: 14px; font-weight: 700; text-transform: uppercase;
    letter-spacing: .5px; color: var(--primary-grey); flex-shrink: 0;
}
.cd-action-section > .modal-body { flex: 1; overflow-y: auto; overflow-x: hidden; min-height: 200px; }

/* ── Popup body: no horizontal scroll; contacts panel: proper size in popup ─ */
#cdSectionPopupBody { overflow-x: hidden; }
#contactsListPanel  { overflow-x: hidden; }
#cdSectionContacts .contacts-scroll-panel {
    grid-template-columns: repeat(2, 1fr);
    max-height: calc(75vh - 120px);  /* full popup minus header + filter row */
}
#cdSectionContacts .contacts-empty,
#cdSectionContacts .contacts-loading { grid-column: span 2; }

/* Popup modal for button-mode inline sections */
#cdSectionPopup {
    display: none; position: fixed; inset: 0;
    background: rgba(29,36,41,0.55); z-index: var(--z-modal-top);
    align-items: center; justify-content: center; padding: 24px 16px;
}
#cdSectionPopup.open { display: flex; }

/* Dynamic button-mode buttons in action bar */
.cd-dyn-btn { font-size: var(--text-xs); padding: 7px 14px; }

/* ── Contacts: 4 columns in full-width contactsModal ───────────────────── */
#contactsModal .contacts-scroll-panel {
    grid-template-columns: repeat(4, 1fr);
    max-height: 55vh;
}
#contactsModal .contacts-empty,
#contactsModal .contacts-loading { grid-column: span 4; }

/* ── cdSectionPopup: no red header — section content fills top of modal ─── */
#cdSectionPopup .modal-content { background: var(--off-white); }

/* ── Section header rows and injected close button ─────────────────────── */
.cd-sec-hdr-row {
    display: flex;
    align-items: center;
}
.cd-popup-close {
    background: none;
    border: none;
    cursor: pointer;
    color: var(--slate);
    font-size: 22px;
    line-height: 1;
    padding: 0 4px;
    margin-left: auto;
    flex-shrink: 0;
    opacity: 0.65;
    transition: opacity 0.12s, color 0.12s;
}
.cd-popup-close:hover { opacity: 1; color: var(--charcoal); }
/* Asset Info already has Export with margin-left:auto — don't double up */
#assetInfoSection .cd-popup-close { margin-left: 8px; }
body.dark-mode .cd-popup-close { color: var(--ch-text-muted); }
body.dark-mode .cd-popup-close:hover { color: var(--ch-text-primary); }

/* ── Dedicated modal headers: match section header style (no red) ────────── */
#changelogModal .modal-header,
#contactsModal .modal-header,
#customerStatsModal .modal-header,
#mapDataModal .modal-header {
    background: var(--off-white);
    border-bottom: 1px solid var(--light-grey);
}
#changelogModal    .modal-header h2 { color: var(--primary-grey); font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:0.05em; }
#contactsModal     .modal-header h2 { color: var(--dark-blue);    font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:0.05em; }
#customerStatsModal .modal-header h2 { color: var(--blue);        font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:0.05em; }
#mapDataModal      .modal-header h2 { color: var(--teal);         font-size:12px; font-weight:700; text-transform:uppercase; letter-spacing:0.05em; }
#changelogModal .modal-header .close,
#contactsModal .modal-header .close,
#customerStatsModal .modal-header .close,
#mapDataModal .modal-header .close {
    color: var(--slate);
    opacity: 0.65;
    font-size: 22px;
    font-weight: normal;
    transition: opacity 0.12s, color 0.12s;
}
#changelogModal .modal-header .close:hover,
#contactsModal .modal-header .close:hover,
#customerStatsModal .modal-header .close:hover,
#mapDataModal .modal-header .close:hover { opacity: 1; color: var(--charcoal); }
/* Refresh button stays readable on light background */
#changelogModal .modal-header .cl-refresh-btn { color: var(--slate); border-color: var(--light-grey); }
#changelogModal .modal-header .cl-refresh-btn:hover { background: var(--light-grey); color: var(--charcoal); }
/* Dark mode */
body.dark-mode #changelogModal .modal-header,
body.dark-mode #contactsModal .modal-header,
body.dark-mode #customerStatsModal .modal-header,
body.dark-mode #mapDataModal .modal-header { background: var(--ch-bg-card-alt); border-color: var(--ch-border); }
body.dark-mode #changelogModal .modal-header h2,
body.dark-mode #contactsModal .modal-header h2,
body.dark-mode #customerStatsModal .modal-header h2,
body.dark-mode #mapDataModal .modal-header h2 { color: var(--ch-text-primary); }
body.dark-mode #changelogModal .modal-header .close,
body.dark-mode #contactsModal .modal-header .close,
body.dark-mode #customerStatsModal .modal-header .close,
body.dark-mode #mapDataModal .modal-header .close { color: var(--ch-text-muted); }
body.dark-mode #changelogModal .modal-header .cl-refresh-btn { color: var(--ch-text-muted); border-color: var(--ch-border); }

/* ── Group default popover (admin: set layout as group default) ──────────── */
.grp-default-trigger {
    display: none;            /* shown only for admin users via JS */
    background: none; border: 1px solid var(--border-soft);
    border-radius: var(--radius-sm); cursor: pointer;
    padding: 5px 7px; color: var(--slate);
    transition: color .15s, border-color .15s, background .15s;
    line-height: 1; position: relative;
}
.grp-default-trigger:hover { color: var(--charcoal); border-color: var(--slate); background: var(--off-white); }
.grp-default-trigger.admin-visible { display: inline-flex; align-items: center; }

.grp-default-popover {
    display: none; position: absolute; z-index: var(--z-popover-menu);
    background: var(--surface); border: 1px solid var(--border-soft);
    border-radius: var(--radius-md); box-shadow: 0 6px 24px rgba(29,36,41,.18);
    padding: 14px 16px; min-width: 240px; max-width: 300px;
    flex-direction: column; gap: 10px;
}
.grp-default-popover.open { display: flex; }
.grp-default-popover h4 { margin: 0; font-size: var(--text-sm); font-weight: 700; color: var(--charcoal); }
.grp-default-popover p  { margin: 0; font-size: var(--text-xs); color: var(--slate); line-height: 1.4; }
.grp-default-popover select {
    width: 100%; padding: 7px 10px; border: 1.5px solid var(--light-grey);
    border-radius: var(--radius-sm); font-size: var(--text-sm);
    background: var(--surface); color: var(--charcoal);
}
.grp-default-popover-actions { display: flex; gap: 8px; }

/* ── Reusable trash icon button — use class="btn-icon-trash" throughout the app ─ */
.btn-icon-trash {
    display: inline-flex; align-items: center; justify-content: center;
    background: none; border: none; cursor: pointer;
    color: var(--primary-red);
    padding: 4px 6px; border-radius: var(--radius-sm);
    transition: color .15s, background .15s;
    line-height: 1;
}
.btn-icon-trash:hover  { color: var(--dark-red); background: rgba(162,2,52,.08); }
.btn-icon-trash:active { color: var(--dark-red); background: rgba(162,2,52,.16); }
body.dark-mode .btn-icon-trash       { color: var(--red); }
body.dark-mode .btn-icon-trash:hover { background: rgba(240,48,48,.15); }

/* ── isAction section headers: colour matches section left border ─────────── */
#cdSectionStats    .cd-action-hdr { color: var(--blue); }        /* dark-blue border → blue heading */
#cdSectionMapData  .cd-action-hdr { color: var(--teal); }        /* dark-teal border → teal heading */
#cdSectionContacts .cd-action-hdr { color: var(--green); }       /* forest-green border → green heading */
#cdSectionChangelog .cd-action-hdr { color: var(--orange); }     /* burnt-orange border → orange heading */

/* ── Asset Info: Export button — outlined style matching section Add buttons ─ */
.asset-export-btn {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 4px 10px;
    font-size: var(--text-xs);
    font-weight: 700;
    color: var(--dark-blue);
    background: transparent;
    border: 1.5px solid var(--dark-blue);
    border-radius: var(--radius-sm);
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s, color 0.15s, border-color 0.15s;
}
.asset-export-btn:hover { background: var(--dark-blue); color: white; }
body.dark-mode .asset-export-btn { color: var(--blue); border-color: var(--blue); }
body.dark-mode .asset-export-btn:hover { background: var(--blue); color: white; border-color: var(--blue); }

/* ── Button alphabetical order (flex order property) ────────────────────── */
/* isAction hardcoded buttons */
#changelogBtn     { order: 3; }  /* Change History */
#contactsBtn      { order: 4; }  /* Contacts */
#mapDataBtn       { order: 6; }  /* Map Data */
#customerStatsBtn { order: 9; }  /* Statistics */
/* Gear always last */
#cdCustomizeBtn   { order: 99; }

/* Customize button — matches .dash-customize-btn style */
.cd-customize-btn {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 5px 13px; font-size: var(--text-xs); font-weight: 600;
    font-family: var(--font-sans); color: var(--charcoal);
    background: var(--surface-alt); border: 1px solid var(--border-soft);
    border-radius: var(--radius-sm); cursor: pointer;
    transition: background var(--duration) var(--ease), border-color var(--duration) var(--ease);
}
.cd-customize-btn:hover { background: var(--light-grey); border-color: var(--slate); }
body.dark-mode .cd-customize-btn { color: var(--slate); background: var(--ch-bg-card-alt); border-color: var(--ch-border); }
body.dark-mode .cd-customize-btn:hover { background: var(--ch-bg-row-hover); border-color: var(--slate); }

/* Section highlight on scroll-to */
.cd-section-highlight { animation: cd-highlight-flash 1.2s ease; }
@keyframes cd-highlight-flash {
    0%   { box-shadow: 0 0 0 0   rgba(0,163,224,0.45); }
    50%  { box-shadow: 0 0 0 6px rgba(0,163,224,0.25); }
    100% { box-shadow: 0 0 0 0   rgba(0,163,224,0);    }
}

/* Dark mode */
body.dark-mode .cd-config-box                  { background: var(--ch-bg-card); }
body.dark-mode .cd-config-header,
body.dark-mode .cd-config-footer               { border-color: var(--ch-border); }
body.dark-mode .cd-config-title                { color: var(--ch-text-primary); }
body.dark-mode .cd-config-subtitle             { color: var(--slate); }
body.dark-mode .cd-config-item:hover           { background: var(--ch-bg-row-hover); }
body.dark-mode .cd-config-label                { color: var(--ch-text-primary); }
body.dark-mode .cd-mode-toggle                 { border-color: var(--ch-border); }
body.dark-mode .cd-mode-pill                   { border-color: var(--ch-border); color: var(--slate); background: transparent; }
body.dark-mode .cd-mode-pill:hover             { background: var(--ch-bg-row-hover); color: var(--ch-text-primary); }
/* Dark mode active states need to be explicitly re-declared — the light-mode
   rules above don't inherit here because the active selector has higher specificity
   than the generic dark-mode override, so the colored backgrounds survive.
   Using brighter colors + a glow ring so selection is unambiguous on dark backgrounds. */
body.dark-mode .cd-mode-pill.active[data-mode-val="section"] {
    background: var(--blue); color: white; border-color: var(--blue);
    box-shadow: 0 0 0 2px rgba(0,163,224,0.4);
}
body.dark-mode .cd-mode-pill.active[data-mode-val="button"]  {
    background: var(--teal); color: white; border-color: var(--teal);
    box-shadow: 0 0 0 2px rgba(47,196,190,0.4);
}
body.dark-mode .cd-mode-pill.active[data-mode-val="hidden"]  {
    background: var(--slate); color: white; border-color: var(--slate);
    box-shadow: 0 0 0 2px rgba(91,114,124,0.5);
}
body.dark-mode .cd-mode-pill.active[data-mode-val="show"]    {
    background: var(--teal); color: white; border-color: var(--teal);
    box-shadow: 0 0 0 2px rgba(47,196,190,0.4);
}
body.dark-mode .cd-mode-pill.active[data-mode-val="hide"]    {
    background: var(--slate); color: white; border-color: var(--slate);
    box-shadow: 0 0 0 2px rgba(91,114,124,0.5);
}
body.dark-mode .cd-action-hdr                  { background: var(--ch-bg-card-alt); border-color: var(--ch-border); color: var(--ch-text-primary); }

/* ── 3.3 Reduced motion — respect OS setting ─────────────────────────────── */
/* ── 3.4: Utility classes — reduce recurring inline style= attributes ── */
.u-text-center  { text-align: center; }
.u-text-sm      { font-size: var(--text-sm); }
.u-text-xs      { font-size: var(--text-xs); }
.u-text-2xs     { font-size: var(--text-2xs); }
.u-color-slate  { color: var(--slate); }
.u-color-charcoal { color: var(--charcoal); }
.u-fw-700       { font-weight: 700; }
.u-fw-600       { font-weight: 600; }
.u-flex-shrink0 { flex-shrink: 0; }
.u-cursor-ptr   { cursor: pointer; -webkit-user-select: none; user-select: none; }
.u-monospace    { font-family: monospace; }
.u-code-tag {
    background: var(--surface); padding: 4px 8px;
    border-radius: var(--radius-sm); font-family: monospace;
    border: 1px solid var(--light-grey); font-size: var(--text-xs);
}
body.dark-mode .u-code-tag {
    background: var(--ch-bg-card-alt); border-color: var(--ch-border);
    color: var(--ch-text-primary);
}
.u-row-label {
    display: block; font-size: var(--text-xs);
    font-weight: 600; color: var(--charcoal); margin-bottom: 4px;
}
.u-section-heading {
    font-size: var(--text-2xs); font-weight: 700; color: var(--slate);
    text-transform: uppercase; letter-spacing: 0.05em;
    white-space: nowrap; padding: 2px 6px;
}

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration:       0.01ms !important;
        animation-iteration-count: 1     !important;
        transition-duration:      0.01ms !important;
        scroll-behavior:          auto   !important;
    }
}

/* ── Screen-reader-only utility ──────────────────────────────────────────── */
.sr-only {
    position: absolute;
    width:    1px;
    height:   1px;
    padding:  0;
    margin:   -1px;
    overflow: hidden;
    clip:     rect(0,0,0,0);
    white-space: nowrap;
    border:   0;
}

/* ── 3.4: Utility classes — reduce recurring inline style= attributes ── */
.u-text-center  { text-align: center; }
.u-text-sm      { font-size: var(--text-sm); }
.u-text-xs      { font-size: var(--text-xs); }
.u-text-2xs     { font-size: var(--text-2xs); }
.u-color-slate  { color: var(--slate); }
.u-color-charcoal { color: var(--charcoal); }
.u-fw-700       { font-weight: 700; }
.u-fw-600       { font-weight: 600; }
.u-flex-shrink0 { flex-shrink: 0; }
.u-cursor-ptr   { cursor: pointer; -webkit-user-select: none; user-select: none; }
.u-monospace    { font-family: monospace; }
/* Code/tag inline display */
.u-code-tag {
    background: var(--surface);
    padding: 4px 8px;
    border-radius: var(--radius-sm);
    font-family: monospace;
    border: 1px solid var(--light-grey);
    font-size: var(--text-xs);
}
body.dark-mode .u-code-tag {
    background: var(--ch-bg-card-alt);
    border-color: var(--ch-border);
    color: var(--ch-text-primary);
}
/* Row / cell utilities */
.u-row-label {
    display: block;
    font-size: var(--text-xs);
    font-weight: 600;
    color: var(--charcoal);
    margin-bottom: 4px;
}
.u-section-heading {
    font-size: var(--text-2xs);
    font-weight: 700;
    color: var(--slate);
    text-transform: uppercase;
    letter-spacing: 0.05em;
    white-space: nowrap;
    padding: 2px 6px;
}

/* ── 3.7: Responsive — tablet/mobile gap (600px–1100px) ── */
@media (max-width: 768px) {
    /* Sidebar / navigation collapse */
    .admin-sidebar { width: 0; overflow: hidden; }
    .admin-content { margin-left: 0 !important; }

    /* Hide secondary table columns on narrow viewports */
    .scrollable-table th[data-unit="dev_group"],
    .scrollable-table td[data-unit-col="dev_group"] { display: none; }

    /* Search bar full-width */
    #globalSearchInput { width: 100% !important; box-sizing: border-box; }

    /* Stack stat cards vertically */
    .main-stats {
        grid-template-columns: 1fr !important;
    }
    .main-stat-card.tracking-group-start { margin-left: 0; }
    .main-stat-card.tracking-group-start::before { display: none; }

    /* Header buttons wrap */
    .header-actions { flex-wrap: wrap; gap: 4px !important; }

    /* Filter summary chips wrap */
    .filter-summary-bar { flex-wrap: wrap; }

    /* Modal width */
    .modal-content { width: 98vw !important; max-width: 98vw !important; }

    /* Reduce column header padding */
    .scrollable-table th, .scrollable-table td { padding: 3px 4px !important; }
}


/* ─────────────────────────────────────────────────────────────────────────────
   Sprint 1 Utility Classes — extracted from inline styles (2026-07-07)
   All classes are prefixed u- to avoid collision with component selectors.
   Do NOT add !important — JS still toggles some of these via .style.display
   (Sprint 2 will migrate those to classList operations).
   ───────────────────────────────────────────────────────────────────────────── */

/* ── Visibility ────────────────────────────────────────────────────────────── */
.u-hidden                { display: none; }
.u-msg-hidden            { display: none; margin-bottom: 15px; }
.u-modal-overlay         { display: none; position: fixed; inset: 0; background: rgba(29,36,41,0.55); z-index: var(--z-modal); justify-content: center; }
.u-display-block         { display: block; }

/* ── Color ─────────────────────────────────────────────────────────────────── */
.u-text-slate            { color: var(--slate); }
.u-text-orange           { color: var(--orange); }
.u-text-teal             { color: var(--teal); }
.u-text-blue             { color: var(--blue); }
.u-text-red              { color: var(--red); }
.u-text-charcoal         { color: var(--charcoal); }
.u-text-forest-green     { color: var(--forest-green); }
.u-grey-header           { background: var(--primary-grey); color: white; }

/* ── Typography ────────────────────────────────────────────────────────────── */
.u-text-xs               { font-size: var(--text-xs); }
.u-text-xs-slate         { font-size: var(--text-xs); color: var(--slate-text); }
.u-text-sm-charcoal      { font-size: var(--text-sm); color: var(--charcoal); }
.u-text-2xs-slate        { font-size: var(--text-2xs); color: var(--slate); }
.u-text-right            { text-align: right; }
.u-text-no-decoration    { text-decoration: none; }
.u-warning-label         { font-size: var(--text-xs); color: var(--burnt-orange); text-transform: uppercase; letter-spacing: 0.06em; }
.u-col-tag               { font-size: 10px; color: var(--slate); text-transform: uppercase; letter-spacing: 0.05em; padding: 2px 6px; }
.u-heading-blue-lg       { color: var(--dark-blue); margin-bottom: 10px; font-size: var(--text-lg); }
.u-para-sm               { margin: 0; color: var(--charcoal); font-size: var(--text-sm); }

/* ── Spacing ───────────────────────────────────────────────────────────────── */
.u-mb-8                  { margin-bottom: 8px; }
.u-mb-12                 { margin-bottom: 12px; }
.u-mb-15                 { margin-bottom: 15px; }
.u-mb-16                 { margin-bottom: 16px; }
.u-mb-20                 { margin-bottom: 20px; }
.u-pad-20                { padding: 20px; }
.u-pad-24                { padding: 20px 24px; }
.u-pad-section           { padding: 16px 20px 18px; }

/* ── Flex / Layout ─────────────────────────────────────────────────────────── */
.u-gap-4                 { gap: 4px; }
.u-gap-8                 { gap: 8px; }
.u-gap-10                { gap: 10px; }
.u-gap-8-wrap            { gap: 8px; flex-wrap: wrap; }
.u-flex-1                { flex: 1; }
.u-flex-1-auto           { flex: 1; min-width: auto; }
.u-flex-shrink-0         { flex-shrink: 0; }
.u-flex-col-2            { flex-direction: column; gap: 2px; }
.u-flex-center-7         { display: flex; align-items: center; gap: 7px; }
.u-flex-center-8         { display: flex; align-items: center; gap: 8px; font-weight: normal; }
.u-modal-footer          { gap: 10px; justify-content: flex-start; margin-top: 20px; padding-top: 20px; border-top: 1px solid var(--light-grey); }
.u-section-divider       { margin-bottom: 12px; padding-bottom: 8px; border-bottom: 1px solid var(--light-grey); }

/* ── Interactive ───────────────────────────────────────────────────────────── */
.u-cursor-pointer        { cursor: pointer; }
.u-no-select             { user-select: none; -webkit-user-select: none; }
.u-overflow-x            { overflow-x: auto; }

/* ── Table ─────────────────────────────────────────────────────────────────── */
.u-td-cell               { padding: 3px 8px; text-align: left; }
.u-td-cell-bold          { padding: 3px 8px; text-align: left; border-bottom: 2px solid var(--slate); }
.u-th-bold               { padding: 8px 12px; text-align: left; font-weight: 600; }
.u-col-xs                { padding: 3px 8px; font-size: 11px; user-select: none; -webkit-user-select: none; text-align: left; }
.u-col-xs-notext         { padding: 3px 8px; font-size: 11px; user-select: none; -webkit-user-select: none; }
.u-col-label             { font-size: var(--text-xs); color: var(--slate); margin-bottom: 3px; padding: 0 4px; min-height: 14px; }
.u-sticky-grey-hdr       { position: sticky; top: 0; background: var(--primary-grey); color: white; z-index: 10; }
.u-sticky-offwhite-hdr   { position: sticky; top: 0; background: var(--off-white); padding: 9px 14px; text-align: left; font-weight: 700; font-size: var(--text-2xs); text-transform: uppercase; letter-spacing: .05em; color: var(--slate); border-bottom: 2px solid var(--light-grey); }
.u-vert-mid              { vertical-align: middle; margin-right: 5px; }

/* ── Form Inputs ───────────────────────────────────────────────────────────── */
.u-input-sm              { width: 100%; padding: 6px; border: 2px solid var(--teal); border-radius: var(--radius-sm); font-size: var(--text-sm); font-family: inherit; box-sizing: border-box; background: var(--surface); color: var(--charcoal); }
.u-input-md              { width: 100%; padding: 9px 12px; border: 1px solid var(--border-soft); border-radius: var(--radius-sm); font-size: var(--text-sm); box-sizing: border-box; }
.u-input-md-mb           { width: 100%; padding: 9px 12px; border: 1px solid var(--border-soft); border-radius: var(--radius-sm); font-size: var(--text-sm); margin-bottom: 12px; box-sizing: border-box; }
.u-input-lg              { width: 100%; padding: 6px; border: 2px solid var(--teal); border-radius: var(--radius-sm); font-size: var(--text-sm); font-family: inherit; box-sizing: border-box; background: var(--surface); color: var(--charcoal); }
.u-input-lg-border       { width: 100%; padding: 10px 12px; border: 2px solid var(--border-soft); border-radius: var(--radius-sm); font-size: var(--text-md); box-sizing: border-box; background: var(--surface); color: var(--charcoal); }

/* ── Labels / Hints ────────────────────────────────────────────────────────── */
.u-field-label           { display: block; margin-bottom: 6px; color: var(--slate); }
.u-field-label-ch        { display: block; margin-bottom: 6px; color: var(--charcoal); font-size: var(--text-sm); }
.u-field-label-sm        { display: block; font-size: var(--text-sm); color: var(--charcoal); margin-bottom: 5px; }
.u-field-hint            { display: block; font-size: var(--text-xs); color: var(--slate); margin-bottom: 4px; }
.u-field-hint-ch         { display: block; font-size: var(--text-xs); color: var(--charcoal); margin-bottom: 4px; }
.u-label-xs-bold         { display: block; font-size: var(--text-xs); font-weight: 600; color: var(--charcoal); margin-bottom: 4px; }

/* ── Component Patterns ────────────────────────────────────────────────────── */
.u-mono-chip             { background: var(--surface); padding: 4px 8px; border-radius: var(--radius-sm); font-family: monospace; border: 1px solid var(--light-grey); }
.u-empty-state           { padding: 20px; text-align: center; color: var(--slate); font-style: italic; }
.u-card-plain            { background: var(--off-white); padding: 15px; border-radius: var(--radius-sm); }
.u-card-plain-mb         { background: var(--off-white); border-radius: var(--radius-md); padding: 16px; margin-bottom: 20px; }
.u-btn-xs                { font-size: var(--text-xs); padding: 7px 14px; }
.u-btn-xs-sm             { font-size: var(--text-xs); padding: 6px 14px; }
.u-btn-tab               { padding: 12px; background: var(--light-grey); color: var(--charcoal); border: 2px solid var(--light-grey); border-radius: var(--radius-sm); font-weight: 600; cursor: pointer; text-align: left; transition: all 0.2s; }
.u-header-close-btn      { background: none; border: none; color: rgba(255,255,255,0.65); padding: 1px 3px; line-height: 1; flex-shrink: 0; }
.u-header-action-red     { background: var(--primary-red); color: #fff; padding: 18px 22px; justify-content: space-between; }
.u-header-close-white    { background: none; border: none; color: #fff; font-size: 22px; line-height: 1; }
.u-panel-info            { padding: 16px; color: var(--slate); }
.u-page-pad              { padding: 9px 14px; border-bottom: 1px solid var(--light-grey); }

/* ─────────────────────────────────────────────────────────────────────────────
   Sprint 3 Utility + Component Classes (2026-07-07)
   ───────────────────────────────────────────────────────────────────────────── */

/* ── Grid layouts ──────────────────────────────────────────────────────────── */
.u-grid-8           { display: grid; gap: 8px; }
.u-grid-15          { display: grid; gap: 15px; }
.u-grid-2col-28     { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 28px; }

/* ── Flex row variants ─────────────────────────────────────────────────────── */
.u-row-end-10       { gap: 10px; justify-content: flex-end; }
.u-row-end-8        { gap: 8px; justify-content: flex-end; }
.u-row-between-24   { justify-content: space-between; gap: 24px; }
.u-row-between-20   { gap: 10px; justify-content: space-between; margin-top: 20px; }
.u-row-between-mb8  { justify-content: space-between; margin-bottom: 8px; }
.u-row-center-3     { justify-content: center; gap: 3px; }
.u-gap-5-wrap       { gap: 5px; flex-wrap: wrap; }
.u-gap-6            { gap: 6px; }
.u-gap-10-sm        { gap: 10px; font-size: var(--text-sm); }
.u-check-row        { display: flex; align-items: center; gap: 8px; cursor: pointer; font-size: var(--text-sm); margin-bottom: 6px; }
.u-icon-row-2xs     { display: flex; align-items: center; gap: 5px; font-size: var(--text-2xs); color: var(--slate); }

/* ── Flex column / scroll areas ─────────────────────────────────────────────── */
.u-flex-full-col    { width: 100%; max-width: 100%; height: 100%; flex-direction: column; }
.u-modal-inner-lg   { width: 75vw; max-width: 75vw; max-height: 92vh; flex-direction: column; }
.u-scroll-24        { flex: 1; overflow-y: auto; padding: 20px 24px; }
.u-scroll           { flex: 1; overflow-y: auto; }
.u-modal-foot-16    { flex-shrink: 0; gap: 10px; justify-content: space-between; padding: 16px 24px; background: var(--surface); border-top: 1px solid var(--light-grey); }

/* ── Dimensions ────────────────────────────────────────────────────────────── */
.u-w-12pct          { width: 12%; }
.u-max-460          { max-width: 460px; }
.u-max-600          { max-width: 600px; }
.u-logo-full        { max-width: 150px; height: 36px; object-fit: contain; display: block; }
.u-logo-sm          { height: 36px; object-fit: contain; display: block; }
.u-icon-32-center   { width: 32px; height: 32px; color: var(--light-grey); display: block; margin: 0 auto 8px; }
.u-icon-16          { width: 16px; height: 16px; }
.u-chk-red          { width: 16px; height: 16px; accent-color: var(--primary-red); }
.u-w-full-block     { width: 100%; display: block; }
.u-pl-16            { padding-left: 16px; }
.u-rel-ml-20        { position: relative; margin-left: 20px; }
.u-p-22             { padding: 22px; }
.u-p-28-32          { padding: 28px 32px 32px; }
.u-p-10-18          { padding: 10px 18px; }
.u-mt-20-p-15       { margin-top: 20px; padding: 15px; }
.u-m-0              { margin: 0; }
.u-mb-18            { margin-bottom: 18px; }

/* ── Form inputs ───────────────────────────────────────────────────────────── */
.u-input-lg-sans    { width: 100%; padding: 6px; border: 2px solid var(--teal); border-radius: var(--radius-sm); font-size: var(--text-sm); font-family: var(--font-sans); box-sizing: border-box; background: var(--surface); color: var(--charcoal); }
.u-input-bordered-sm{ width: 100%; padding: 9px 11px; border: 2px solid var(--border-soft); border-radius: var(--radius-sm); font-size: var(--text-sm); box-sizing: border-box; background: var(--surface); color: var(--charcoal); }
.u-input-lg-15      { width: 100%; padding: 10px; border: 2px solid var(--light-grey); border-radius: var(--radius-sm); font-size: var(--text-md); margin-bottom: 15px; }
.u-input-xl         { width: 100%; padding: 12px 14px; border: 2px solid var(--light-grey); border-radius: var(--radius-md); font-size: var(--text-md); box-sizing: border-box; transition: border-color 0.2s, box-shadow 0.2s; outline: none; }
.u-input-xl:focus,
.u-input-xl:focus-visible { border-color: var(--primary-red); outline: none; box-shadow: 0 0 0 3px rgba(162,2,52,0.15); }
.u-textarea-sm      { width: 100%; padding: 9px 12px; border: 1px solid var(--border-soft); border-radius: var(--radius-sm); font-size: var(--text-sm); margin-bottom: 16px; box-sizing: border-box; resize: vertical; font-family: var(--font-sans); }
.u-input-flex       { flex: 1; padding: 10px; border: 2px solid var(--light-grey); border-radius: var(--radius-sm); background: var(--surface); color: var(--charcoal); font-size: var(--text-sm); transition: all 0.2s; }
.u-input-xs-filter  { padding: 5px 12px; font-size: var(--text-xs); border: 1px solid var(--light-grey); border-radius: var(--radius-sm); background: var(--surface); color: var(--slate); }
.u-btn-xs-wide      { font-size: var(--text-xs); padding: 7px 16px; }
.u-accent-red       { accent-color: var(--primary-red); }

/* ── Typography ────────────────────────────────────────────────────────────── */
.u-text-sm-ch-10    { font-size: var(--text-sm); color: var(--charcoal); margin: 0 0 10px; }
.u-text-sm-slate    { font-size: var(--text-sm); color: var(--slate-text); }
.u-hint-2           { font-size: var(--text-xs); color: var(--slate-text); margin-top: 2px; }
.u-hint-5           { font-size: var(--text-xs); margin-top: 5px; color: var(--slate); }
.u-hint-xs-dim      { margin: 4px 0 0; font-size: var(--text-xs); opacity: 0.9; }
.u-badge-9          { font-size: 9px; letter-spacing: .03em; margin-top: 1px; }
.u-section-label    { margin: 0 0 14px; font-size: var(--text-sm); color: var(--primary-grey); text-transform: uppercase; letter-spacing: .05em; }
.u-body-md          { margin: 0; color: var(--charcoal); font-size: var(--text-md); }
.u-fw-400           { font-weight: 400; }
.u-fw-700           { font-weight: 700; }
.u-text-purple      { color: var(--purple); }
.u-text-blue-shrink { color: var(--blue); flex-shrink: 0; }
.u-text-slate-italic{ color: var(--slate); margin-bottom: 20px; font-style: italic; }
.u-text-sm-slate-18 { font-size: var(--text-sm); color: var(--slate-text); margin-bottom: 18px; }
.u-tag-auto         { margin-left: auto; font-size: var(--text-2xs); color: var(--slate); font-weight: 400; text-transform: none; letter-spacing: 0; }
.u-field-hint-5     { display: block; font-size: var(--text-xs); color: var(--slate); margin-bottom: 5px; }
.u-label-sm-bold    { display: block; font-weight: 600; margin-bottom: 6px; color: var(--charcoal); font-size: var(--text-sm); }

/* ── Table ─────────────────────────────────────────────────────────────────── */
.u-td-xs-divider    { padding: 3px 8px; text-align: left; font-size: var(--text-xs); vertical-align: middle; border-right: 2px solid rgba(255,255,255,0.5); }
.u-td-min-140       { padding: 3px 8px; text-align: left; min-width: 140px; }
.u-td-bottom-80     { padding: 3px 8px; border-bottom: 2px solid var(--slate); width: 80px; }
.u-td-purple-bg     { padding: 3px 8px; text-align: left; font-size: 11px; background: rgba(130,90,226,0.10); }
.u-table-xs         { width: 100%; border-collapse: collapse; font-size: var(--text-xs); }

/* ── Component shells ──────────────────────────────────────────────────────── */
.u-modal-560        { background: var(--surface); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); width: 90%; max-width: 560px; overflow: hidden; }
.u-modal-440        { background: var(--surface); width: 92%; max-width: 440px; border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); overflow: hidden; }
.u-modal-420        { background: var(--surface); width: 92%; max-width: 420px; border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); overflow: hidden; }
.u-card-inline-14   { background: var(--surface); border-radius: var(--radius-md); padding: 8px 16px; display: inline-block; margin-bottom: 14px; }
.u-divider-red      { height: 4px; background: var(--primary-red); opacity: 0.18; }
.u-header-red       { background: var(--primary-red); color: #fff; padding: 18px 22px; }
.u-header-slate     { background: var(--slate); color: white; padding: 10px 18px; }
.u-info-card        { display: inline-flex; flex-direction: column; gap: 8px; text-align: left; background: var(--surface-alt); padding: 14px 18px; border-radius: var(--radius-md); font-size: var(--text-sm); min-width: 220px; }

/* ── display:none composites — visible-state layout only; u-hidden provides   ─
   the initial hidden state. _showEl removes u-hidden; _hideEl re-adds it.    */
.u-sn-edit-input    { margin-top: 3px; width: 100%; padding: 2px 5px; font-size: 11px; border-radius: 3px; border: none; color: #333; background: #fff; box-sizing: border-box; }
.u-dropdown-abs     { position: absolute; top: 54px; right: 0; background: var(--surface); border-radius: var(--radius-md); box-shadow: var(--shadow-lg); min-width: 220px; z-index: 1000; border: 1px solid var(--light-grey); }
.u-error-16         { background: rgba(240,48,48,0.10); border: 1px solid var(--primary-red); color: var(--dark-red); padding: 10px 14px; border-radius: var(--radius-sm); margin-bottom: 16px; font-size: var(--text-sm); }
.u-error-14         { background: rgba(240,48,48,0.10); border: 1px solid var(--primary-red); color: var(--dark-red); padding: 10px 14px; border-radius: var(--radius-sm); margin-bottom: 14px; font-size: var(--text-sm); }
.u-alert-sm         { margin-bottom: 12px; padding: 10px 14px; border-radius: var(--radius-sm); font-size: var(--text-sm); }

/* ── Ideas & Feedback history modal ──────────────────────────── */
#fbHistoryModal { display:none; position:fixed; inset:0; z-index:1200;
                  background:rgba(0,0,0,0.45); align-items:center; justify-content:center; }
#fbHistoryModal.is-open { display:flex; }
#fbHistoryModal .fb-hist-inner { background:var(--surface); border-radius:var(--radius-lg);
                  box-shadow:var(--shadow-lg); width:90%; max-width:540px; max-height:80vh;
                  display:flex; flex-direction:column; overflow:hidden; }
#fbHistoryModal .fb-hist-header { display:flex; align-items:center; gap:10px;
                  padding:14px 18px; border-bottom:1px solid var(--light-grey); flex-shrink:0; }
#fbHistoryModal .fb-hist-header h3 { margin:0; font-size:14px; font-weight:700;
                  color:var(--charcoal); flex:1; }
#fbHistoryModal .fb-hist-close { background:none; border:none; cursor:pointer; font-size:20px;
                  color:var(--slate); line-height:1; padding:0 4px; }
#fbHistoryModal .fb-hist-close:hover { color:var(--charcoal); }
#fbHistoryModal .fb-hist-body { padding:12px 18px 18px; overflow-y:auto; }
body.dark-mode #fbHistoryModal .fb-hist-inner { background:var(--ch-bg-card); }
body.dark-mode #fbHistoryModal .fb-hist-header { border-color:var(--ch-border); }
body.dark-mode #fbHistoryModal .fb-hist-header h3 { color:var(--ch-text-primary); }
body.dark-mode #fbHistoryModal .fb-hist-close { color:var(--ch-text-muted); }
body.dark-mode #fbHistoryModal .fb-hist-close:hover { color:var(--ch-text-primary); }

/* Attrition triangle in asset list */
.asset-attrition-flag {
    display: inline-block;
    margin-left: 5px;
    font-size: 10px;
    color: var(--primary-red);
    vertical-align: middle;
    cursor: default;
    line-height: 1;
}


/* ═══════════════════════════════════════════════════════════════════════════
   ACCESSIBILITY & SYSTEM-PREFERENCE OVERRIDES
   Added: findings 2.2.2, 2.2.3, 2.2.4
   These rules live at the end of the stylesheet so they always win the
   cascade without needing !important on individual properties.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── 2.2.2  Focus-visible rings for custom interactive elements ─────────────
   The global :focus-visible rule at the top of this file covers native HTML
   elements (button, a, input, select, textarea, [tabindex]).  The rules
   below extend coverage to PulsePoint-specific custom widgets that are also
   keyboard-focusable but use non-standard selectors.                        */

/* Filter pills — workspace quick-filter and CS attribute pills */
.quick-filter-pill:focus-visible,
.at-filter-pill:focus-visible,
.cs-filter-pill:focus-visible {
    outline: 2px solid var(--blue);
    outline-offset: 2px;
    box-shadow: 0 0 0 4px rgba(0, 163, 224, 0.20);
    border-radius: var(--radius-sm, 4px);
}

/* Workspace tiles — draggable/resizable panels */
.workspace-tile:focus-visible {
    outline: 2px solid var(--blue);
    outline-offset: 3px;
    box-shadow: 0 0 0 4px rgba(0, 163, 224, 0.15);
}

/* Column resize handles */
.col-resize-handle:focus-visible {
    outline: 2px solid var(--blue);
    outline-offset: 0;
    background: rgba(0, 163, 224, 0.40);
}

/* Right-click context menu items */
.context-menu-item:focus-visible {
    outline: 2px solid var(--blue);
    outline-offset: -2px;
    background: rgba(0, 163, 224, 0.10);
}

/* Column picker / dropdown list items */
.col-picker-item:focus-visible,
.col-picker-option:focus-visible,
.dropdown-item:focus-visible {
    outline: 2px solid var(--blue);
    outline-offset: -2px;
    background: rgba(0, 163, 224, 0.08);
}

/* Modal close and icon-only action buttons */
.modal-close:focus-visible,
.icon-btn:focus-visible,
.btn-icon:focus-visible,
[aria-label]:not(input):not(select):not(textarea):focus-visible {
    outline: 2px solid var(--blue);
    outline-offset: 2px;
    box-shadow: 0 0 0 4px rgba(0, 163, 224, 0.20);
    border-radius: var(--radius-sm, 4px);
}

/* Admin nav sidebar items */
.admin-nav-item:focus-visible {
    outline: 2px solid var(--blue);
    outline-offset: -2px;
    border-radius: var(--radius-sm, 4px);
}

/* Sortable table headers */
th.sortable:focus-visible,
.sortable:focus-visible {
    outline: 2px solid var(--blue);
    outline-offset: -2px;
}

/* Tag / badge interactive elements */
.tag:focus-visible,
.badge:focus-visible,
.version-badge:focus-visible {
    outline: 2px solid var(--blue);
    outline-offset: 2px;
    border-radius: var(--radius-sm, 4px);
}

/* ── 2.2.4  prefers-color-scheme: dark — OS-level baseline ──────────────────
   Applies dark-mode CSS variables when the user's OS is set to dark AND
   they haven't explicitly chosen a theme in PulsePoint (theme-light class
   is added by the FOUC-prevention IIFE when localStorage theme = 'light').
   The body.dark-mode class-based rules (higher specificity) always override
   this for users with an explicit app-level preference.                     */
@media (prefers-color-scheme: dark) {
    body:not(.theme-light) {
        --charcoal:        #EEF2F4;
        --slate:           #B8C4CC;
        --light-grey:      #5B727C;
        --off-white:       #1D2429;
        --surface:         #2D3748;
        --surface-alt:     #232C38;
        --surface-raised:  #353F4D;
        --surface-sunken:  #1A222B;
        --border-soft:     #3A4654;
        --bg:              #1D2429;

        --ch-text-primary:   #E5E7EB;
        --ch-text-secondary: #B8C4CC;
        --ch-text-muted:     #9CA3AF;
        --ch-text-faint:     #5B727C;
        --ch-bg-page:        #1D2429;
        --ch-bg-card:        #2D3748;
        --ch-bg-card-alt:    #353F4D;
        --ch-bg-row-hover:   #374151;
        --ch-bg-row-stripe:  #2D3748;
        --ch-border:         #3A4654;
        --ch-border-strong:  #4A5568;
        --col-divider:       #3A4654;

        color-scheme: dark;
    }
    body:not(.theme-light) {
        background:
            radial-gradient(80% 50% at 50% -5%, rgba(0,163,224,0.10), transparent 70%),
            linear-gradient(180deg, var(--surface-sunken) 0%, var(--ch-bg-page) 30%);
    }
}

/* ── 3.2.4  Compact table density — shared across workspace / dashboard / admin
   These rules were formerly duplicated as inline <style> in each HTML file.
   Single-sourced here so density changes require only one edit.              */
td, th {
    padding:     4px 10px !important;
    font-size:   11px !important;
    line-height: 1.35 !important;
}
#dataTable tbody td:first-child {
    padding-left: 22px !important;  /* clear the 12px status indicator bar */
}
tr.virtual-spacer td {
    padding:     0 !important;
    font-size:   0 !important;
    line-height: 0 !important;
}

/* ── 3.1.2  Staging environment banner ──────────────────────────────────────
   Injected by core/security.py into every response when FLASK_ENV=staging.
   Uses CSS variables so the banner respects the brand palette and dark-mode.  */
#mod-staging-banner {
    position:       fixed;
    top:            0;
    left:           0;
    right:          0;
    z-index:        99999;
    background:     var(--orange);        /* #FF9E18 — brand Orange */
    color:          var(--charcoal);      /* #1D2429 — brand Charcoal */
    text-align:     center;
    padding:        3px 8px;
    font-size:      11px;
    font-weight:    700;
    letter-spacing: 0.5px;
    font-family:    'Source Sans Pro', 'Franklin Gothic Book', sans-serif;
    box-shadow:     0 1px 4px rgba(0, 0, 0, 0.25);
    pointer-events: none;
}
.dark-mode #mod-staging-banner {
    background:     var(--burnt-orange, #C25700);
    color:          var(--off-white);
}

/* ── 2.2.3  prefers-reduced-motion — Section 508 / WCAG 2.1 SC 2.3.3 ────────
   Users who enable "Reduce motion" in their OS accessibility settings must
   not experience animations or transitions.  Using 0.01ms instead of none
   preserves transitionend/animationend JS event firing while being
   imperceptible to human vision.  scroll-behavior is set to auto so
   programmatic scrolls don't animate.
   This block is LAST in the stylesheet so it always wins the cascade.      */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration:        0.01ms !important;
        animation-iteration-count: 1      !important;
        transition-duration:       0.01ms !important;
        transition-delay:          0ms    !important;
        scroll-behavior:           auto   !important;
    }

    /* Named animations that drive layout shifts — kill them explicitly */
    .modal,
    .modal-backdrop,
    [class*="slide"],
    [class*="fade"],
    [class*="rise"],
    [class*="skeleton"] {
        animation: none !important;
        transition: none !important;
    }
}
