
@font-face{font-family:"Geist";font-style:normal;font-weight:400;font-display:swap;src:url("data:font/woff2;base64,d09GMk9UVE8AAIJ4AAwAAAAA49wAAIIlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYK8ZhqCPhu3UhylFAZgAI1WATYCJAOVKgQGBYUXByAbAOMH8FSVEb/uBGhtVdfz91B0MIaNA5ZtmPcxIw0nrTzJ/v9PTDpiNMBvG6Ce+qp9VQAYRSeYslSmLtbctqzdnaa2tLTVSANy2DBtI0Bv82byJexjzrlx7MEQQ7yupr/P9xjlqrbaU4Zk5uWqKiIZkQwRZXAu5x0tlRETsNtRIuTIoqXD3RENezOX2u0JT+xHLiOtvruP82PdvRqdIJu9pPPyeT0RX4DJha/38xvBPmO9fGaavCoEQiDE9KOiQR7GgI8ddEIIhECMyfcRbQb35x7JycH/03MV5evUtFVg7HqIqlHrvEMwt+5ua8ai2AYbY1QMBowRKTFCKsaIklIEKYk0EMTI/7eRtLDxbd4CwWoUMXoqJii8/J9d1K/uhRARBwYhGYIvJ0dqjVktjnCCw11a2065vSpuoZIhRC+liA4JGgPNfQlRMQkDqKtqDBNvqmpASJXs+VY9+5LLBWNQGuQFBDmJcBiEMwiFEh8kfr8yyeze/TI7YqHYiDoU2lVY4AdvS/i2x7xkk/1TNM2hWAkKetnUfvyeHmnVnwWJkNLJlSqDjJXI4DHgNt//nD2cdyZwJn+8Q3f33jMzFVEqHmBL8EDBQ4MmeLihoSpULY4F1aBeUWqp24TNyiVNTYU7Z1RAh/d0IS6CCgBOySkQqkDsApCfXEaXEr66hL/nUcDCMRWyVif8KV4JeZsCdGzFlN7P87r1/2YyOfHt/d5597E/c+/kzE6Y0mxoRxGjU7BVxtKY6R8bo4ANS59i64OKpQH2BEMIINoREQEpIUAQQiJGCBhYB9ZBJuZMRWrAGZOamkrbR0qa5zIHCsjpA6kRs/qbfw4DCGJybf/lt93ODEHlBEdpspWihGppDTWijr5JDos7ghRwzIqEIlJVYvOfSJ3/6C0zw9t9Vfqjl29nJBlww6EaAYkoBtIbKaXyrCQG7JQqQ2pzaqV1NwE2Mc0W9mLMogiBMc0P58zmrhL/e365svFXdas2d/+KBtPg2rME9SaIaIBGvHFpTIPonx8W9xA6SGM9Cd7IuT33U0Dl75mWf7c78xJCCAJhMALVWltlSpDbCiNfZWQKGQKbm+2rRYPBbO/mrFW7LMW9290zhCr8GC6QNCFrgUVjLeSRd0Rt51CPFiklEFldMQF9vzEKtvLft9mb0md+haTL78SCSncaZmbZCyxXSeVSSlGd/Xzeg0urMkJGyAgTJWT+vlSt638NwuwmJ6CtCziRnCpOCofbbEjpFOIx/n7dUPf/DYj/N0ip0ZBGQMMBJLVbDUAagZRoEZQ8RXETZXuDwsYse1MCQMmBciBBzZSiA+UUZW9K8XBK1637XI57unq8+ZQup4Xw/yba2QHh9pKtSWU/hFgSx+D/v2lK9811HbmNqwx9jEzYUrj6ctVzH9vpDQYlAAXAAB4UwkJ49fm/X+kEjQ2mRQm2ZWPU4/fPnWotHKDxjOUS/74Fsgv6iLYId39pfpEtUVwybwK4g8Eg+FuvrRx3fj/XA0fzVxuItjAHywLDBsJXd3uQ0/4flbrt797UpSTW6C8iEjL7IKVlpgMUFhpYSrO90uge/j0/vnduSL4rIkZV1aj5Wmtt+OTfrK22/5QQ5JAQRCSIiCwiNkgIqU3b9/0XhC0ABlIDvuQWl1h/ZBEV/j82/xmeX//99bXJy0ydWUzyn2ZwNcnvg6L3QEDTe8xk7ELAim/MDAUgAioOPRJm7LmbJVCYBKmyFShVbZFX+LEyajCVaWLIHSOee+ubP+EgBTLlqa+xlsp01MdAw4xRbbq5FlntIl36jMiZtayoYd9Br3nHp771k7+cQRpREDfjHHLJr/DUpTevmpbHVqiT2aRrPexdlGsZKYIRjfW4TtB0D39045jQpKc55rwxtSMDkig9maKHIeZIccGXBtqAYcBHhhYDdlwEiJGhDEbF4S5PKcVONR4aaBEoLRWJL30Zy0oyKeQpH7UKVp9YEkounUzyKqCIWGVUVlO6enqkPBXJLpca5BdpaUdH1rOlXezlRsNmWWWL3aacc8OKLU9dZKd9/kMDWUF2KDDXccQpMWBPhBwYhRFFlOPmNSi6qUxeN2zasi2Hzt3p1mtEzqwV28paDs21ULvVemy0VeF+lWhjVH7FNa9dFfWob5va2Z4yKqiiaE111tNw2WZabqtSzQ76uAUtq7PuNrSlYXpk45dffvkT+Rv5L8lPfqWd6TCaSieZM8355jJzrbnZ3GUeMG3zpHnBvG7eMx+az813ZlRLmD/T/9LitDJtUKxTsR7FhhQbX2yWtdTaYG239lpHrOPWWeuKddt6YIWs36131hctGf9WOrYTLX/Fa7o267huO2sbtmeVG97SNldeawebs8+2dKu2buu3aZ9Lrl0P0y6J9isddpHMX7RC9XpN2+ctVqJijaTsRj2pqPJe9DJfj0r+43Bnkx0Gl3TBQAaBhxgJclTpoGAz4ip3GOE57xjnIViPa5JbOqvH1toiZJ9sReI6DZq0Lq9m12Hv+87fB0ZKsw7xGJchIWxLvfu7gWM9DujDL3t5bJmjbcPYtV8Fkvzk2ku2G+ckGfysjCIXYRlmhwZuv3XVoHt6GRJ2xjYxkT71jCidq1rPKqhUfOQiQFUbn18AOuMMvVlzWzfxxfq2PsnWzWJ9t55T7ri7hahGZJp1W//EybQk/F5UuJe8Zx6Vx0cpc0P/tD17PVxadjlk7FNL2SuR8loy/hbEl79oIc1bG7uUi2e8tbwImET6k3Lv63B4XxYcDk10I5tO0xw2tuEube55WSNg9q211jfY+zZ34/erd7/90I5P4o+92Y8ct1t6+fOcwc/O04K/sspjmx/0jdBJ9pnX1TQhyi1vRWAGmm9GaZ1MWE0i20rTgieMydIEsmDqZCuiChKOBTDgeVollquRwMqcca1Kst9tJedKxaij6TlU2s+lOxDiZlRZRyyau0HwqduA4Lfgj3f9Wf9M1ogprsYrg1f1v3rV5dQ3q3YwAb4LGKCFVmkXWuigg7gQMQbijrIEpuaFAuD5HvrQ/nCkR7zEtso2S/r5zPvrXfpMc0wLqQQiDAHw0E9Unshq9uygDos8BkYc4aAeDhbTTjuFTiM1gzoj8cwSWHDBZccCC5yU0/wJTspFvXjqGnYNsfN8R/BwkC3RJ0DrkOyqtCR4QokszQ3u4yBIgAASSpbMmywoaUHLCqgQBkFQQAUVFkCBZcgeyQxFRxjoDpNdvSk/mbagG3pxSNuNB0LijD5rU+ISG5UXzH6mIgAjKXTHEt0FC56ClxnX1le5ejV5gCubf5uVUSnnf/Oq2KQQ8hP3YbfuQjddJVrlzGif5BXASAT7qPcHhOAoUKJCjQYtljvcfuq0zxFiBCRIkSFHkUoLkni5qsYhrjg3mjciduP5hNhGiyVZbpSO0xGcm9I5obFWDDzSjCXZ/jGykAUjKdId7ACSCDECEqTIkKNACWpJoBWEjEKQGrYLAsiQo0Ap56Qa9gj9AtvL38md8S/Qo3m+lI32unmpkCi55j3iKWgPkEdsgfV+awFiJMisI0KPAMLHxno7mRXS+YM/vPltiruEDWPuBvtbb3RuP6tbGv1yNhkju7E5Im3krReGY+FlzktellWkuIOxByNXAcocy0Ew2k8pKB8jkVHBDNBEaDWGGkyBKbQMogNfYA5EmtsJASgTxllNzjnifRX64vMVruINdtUcqVeXO8CJmtxq5CGhYIqx8A6Jh0Rm0nc5uAbEOiw1b+fRNEJLp1iCyvU/K2EfkG6OEdHBa/fLFnlyLg0bF1Pr8hVuaS4bUc69KfovlpI2aA+Sdj+7v+dIbr0eCyJWeVr2dE6UwNjBIgFIUiWZgyLnyybg5L/RdeTdSVmZ+o4C87UC7RuEGMkM+gubpqGPHi8pm4uKSfFywSShKq3V3SAN1dU5KEN/FQA3nDAwwhiS88z6ryeVzPM2j9c49HGmVuRXMsOxqEIOW7TDkhQFlEsWryCCZCYe+e5vYKL7N69lpzXLe3YV8rzNoSAQeaqfA6plgFpMVgAPUIAsCMPMs5OUItkZihi5d10TmlOmYGwKamLlO6p3q5w2o6cus/LqdKj3BhfHr+jm1w5T9uN5m+IWFlNE19wgDh33v6vlPPjKV6pWk5SsFk3XZTfd89JnUyEYbpZVLtFnWNaibXn7DnvXJ770fVhEzzLfYsuqsIU15C9WqlKNcP2uNdKHxgePoWF0x3isxmFcZ9Y0zmtzCyJdZQIPMdYEw0WHHhd+KFKUaSFhMuQJz3Hi1rtqL5ckWfparU4ssLkVjrDQGuN22u2Y066at+MnLnOV3Xf0nbp/pZMq/biNXhuu69f4EPOdq/lg9dbu0y2uuecTc5TvOZXviumpau2Lulvom/3YH/S4YAA+AepofCnWj+xbLfrM2POWX86sWEKPQYQ0lmTqljcWARBgBdeIoYsr8jDwFjzoZMZ5nvGTBU54xxxlTlnIOjawU4FmtKBDXcgpoLx62imqgkT1VaBq+fS346GXfOD4ztYxlz3w1kEnXXTNsrt+5Gd22O1m/zqmo85EZ7mz8/+V5t0AteIhTGhUbUKGhixXXx+BfKmyoNtKzZSvOdTvSO/f/lYOt99WZ+svKJVXMbVgfQuu5wTKHccdqLVot9yYp9flGVO18TJ5mgyDXbD45ClCC5+gRZ+Y8aWCWwom3RYI6hUHW9FfLf+/V5SzUkKb0ySPjMl4K/FgE6bvlAj6x0ovS6GRHRdt02igkiY58Gnn3wr+w4bklguE+p7+xFlSu6nPPfauzO62bp1KXa3TmizrngLn360uGJDo/dXhC7YztLlfMeDBQJa0/HX/KKZqkdLjceueIQ7VVkiFM5yRhhRaJaW+wZl6kNbaGalhPKHxEhTgADirHGKKLHUulyjBAfe/RiGa9o4mq5zJubxW4CwKcduiSS7ehulahMiLu1WFhbr0+Fh5WmysXFuIRVkclLuieEMY6Cv42l2t4I/8+gWn7ScnSgIZ+syYrMC5/wsmhOicSZpM3OHPFf1diRW1Zx/2KF7PorDsQ7QM03CEd6jSWmPl8ZfgsqKC0cL1l7gbFn7SlAcADBTXbdVFy8ZWGQFNrzY2JuFFgKZlCNA97HkA0TkK3MsAoOkaoKLWXTJYUIYXQAwdwJIEOHldDEAwIGkjkDyjjIDTZxd7mJiptm1wdQXT573voXJ+301tg70JN46ygj8Zgr86usyXaFB3SaXLkbuEqXVr3shupKds/p1LCeV/aldjMzPTFjbPTHY6u+wioX5oF8d5VXG+uh8kAKZWaIJzYpX1zBgPNNp6PcIF+oZ8VQt0ZZvWyA8EfTZkz4KIRDV+XHyDiuvJi5EahQMYt80y8S0AnGJLEiP47I+zs0qzclS/3/u5qKpZR639ELU3tYDQRD5QcGtyKvaEm9hwWt2t57dVtPqSH80hOgIPOrDGoQXHTHMVMlQFlSgFsqyPtI1u1P38TAJbABdYwE6qJfJbYYhEHHvn1URlutB4SmFltCdrwbv516c56YZ902XyV0lpT7/GTfz4g7GsGn8iCnfmVGk4CG8eOVq56RQ5JtXsOR+JWU/dWVS88fwfOe+351TqgDeqksxDGERvJKxBkHi1fq7TkIjeMww03gf0oxAH4cqXcsjpIHvN1R1n2OvPWwoadKA7qpzsQ+h6Vp+riFxITOk90b1yA/zoj4U/wUDjDylaF+4T9zQQr86q3bhWFLhqo+ZWNGmv0mLcZqkP2yfidsuisMzis34GiHxifDER82m8rHaRrPEyo/BHeDRvFysh1ziKQBhMSBrCMFMcRzu1M+OArGjzDQJNE5PhzO2gGKZhBhw3V6DtWaQXE6wGbLkc0T6IffLJx1pZpbgYxVLF/+7qs63Psm8l5WPLlzqLs2R2UsVNGhMex2jqzRiO+jXSEFHYJ/xeUJiJtfep6wEVAqZlFBKFEp49fT4yFwEEHZ/4JzLDFouJmqBW9tyjKKxs6j5RQsfTkQ9LWLVBAHlf27Spp5jnZQDxPdEvyTIf04lILi5MA4kGi/NB0Xd0ovQzRn3uSM7SFf8EXH+5A8ucwRWB+Dqc2WKmdXMyLvjvox5uRPGdUGzTOCCHmPXRw6Sh84StqqI1ZHIloauSRqIRi4hkjKCzTgE5EVBR+YVaKWeUKxlC8We3shKIcPZdwIfyj295vzGcrSGjd8nimVlno02GrDNqA84V5vBbutIS5t7ltQI3X7FoL859FqxfoLtWxCbvTY3nZ1HdHk7jkeaWyx5CA8ll17iRNwJvvDcMbFdVLhikDIAs9Z0aIk34xEu1ghGufBXnnRP36B+k5vKGzz6nJfInYR6/5tgIPlO+IHCOKIq+akcwPQgA7lY+bgfFGjxFmRibWnhtO6bBDZZbtoTSYDW/hwuZJ+9XK1QutLVuoVX48VTHrselXu/Ye0Pork/1BQUp+ri4lNQ4ft12MfMQe9bd+hWYdhpvrCdiaZ4H7jswdNynJ1cEWuux7wvHvKbLbWdJf22tTpLZY3rnNqThPluU4mfSJ1BcPugfbAdxmDXUWBYIbogMFrhVPBOaOiTLvgIQhtAIGySAu9fcetbqdf5e5ww7AvW1v/1ArFFpVOBtBAUABB2mt06rypktw/wYa3OvouTZNaMlyjNMxycKWNPvWeq1hK1qVa9s0bOVJ+/GdvuJQI6AZGo5CUMsbSraCjQ0sWqyPWDhS7jVxByVC4MVfK3icXm2Yyupska0xOaxVKLlS/32uizafNb9PODejtlTjpE2zfUTwr0skCIsm3WXZJeJo8DHiTVnx4gdZ3PE8bUgk3OC+JuJrbL56EFAgEtGfPplZCxCQjd+atDTBLMBWyhhacisyNKQrURmw3VpIT7uzyh+O3huR2LcdqJuMNKCRTwN8Qx83lPGs0zbLL50u6aKsBOeLCP+6dVU9yJx+pFoq4opP6ovJUyYCUK8nyzh5eHYQx7aHlgiC96OB5qmAq97nACrxwNEgj3H3wS8WIRUWcVPfVBvKsR1G+/z2RN9Q/G4rvJNaxnmX0zWchlU6yFHdTdrxN8iW6JGBm9R1OhNxJ8EtvnAhnYbeIDDHhP7B9b/dOipLF1es3nE+3TygsOa+2UAnTmR9WSdj3plwyWFCAORINzHwOD225HrmQNApUCiSW8hGKQ2Xe67jlExt9Xcj6SJPbPr5aTXZqXA5YyIb7pIawM1coF5yJjRbLh1hZtWyKLpsG4oDbuD3tZ8t57J7zeHT/+T9firqcsMifntz3tQbxD9QLpL2ConwLKa/hAaHqoafuO9wpar+EXzfT5n8uZw/E2HtMAFOlY0z5oqAQIR5KSR4O6qtMxJrVN4I1jpsOL7/I8UuCm4ru921hN7sv90Pd504J0A9qIc1A6x+hlC6YYkwuzPvdLszWWehkQl2G6MrULMLlOPWrTRLZ2i8eLwNoeuUrz33vahfk5t4fOqhSkCJlhbMrPljTX4L0utGYGuc/0nQ0+/lHG7tFCr5fPdbT793SJrSduDP7Fo5bwMLjwaWODLBv0ocUQekVrFk7qX/aIqojWcMP9EnmLer1Q7ks4RFJKPTF+WZyxlb+6WBQWmSMMjEvMbMomYh6vsDFzKqJNB1PztX9N8v7UKZ5Fodp016SLgSR143VMA756HWCJKlIFF7ryiv6TGopCrrJACKgxQgSpak5RCKYT6qqgCY0gJY83T5Kn57wUAJjDZSwD9yXc8AjQhk/EAwDdEZRtNgqjY5cZGTV305JbnfRX0UX9lzX/wTgNRlkr30yDng45bTsleP9vZ11e0Lpig1jS0mYr5eXKTowj43G2gf3Bdkv2Xq93P3ghALKsmLklGdUOdRzTRAwGQ0cCifybK8wPB4dcLMqQM861SLDpFAtiX/LMxrZ69vaSiqfnHEm+S6gStVKrAG8D1rdeNdyGquhLFwBIeYvQKVH3qx5GYxITuBf3Q3WDri72tP34dH4Sgb78Pg/rVAOip/JMEfryQjfeG8PVdiVr8fH/cVx4TJ4rCvV2faPzCBajF0ckSonmgp1H5DedPIHnSUHxHZVtfDYPLOZKZ58qbs8SVm/3FYn+/yi1N5OcPgce3XdOor25NVyi3KjjlNTXW71vUxB2yAU+qCeS32fmnHSoFPiIAZ/IStXRsYjSR90KpNmq8UNBRz1Ldu5gHHul1H5qZWwcsgbk728W34HvhSaeY+4ngR4q1XndJiPG2sG18VDIYMnvb7hR2Qv1n/PxPWe0nCOTpd6yEoNZeEMl0EDMZmprygecY4LkiiZSpxlK6IkrcuvK93quoItsNtwOs2HRyRSAffW6jZE5qigmXPsdcOI85LrWJE75ep5hnlvWrXKR2k1KWzs/AoZCBoBJXLdysaOC12jh+0PrQkVYHIhxWeQqmfWnoE1ipFSyPoJE0QlEYYSYFatAgXhyBFfSKfcHTaW2C3RhkiuF6g74yfBVWgjst09KBeY0RW7wIseMaellr6nVosimTy2yNh/QyMKA1dkmgNuzweu98ZaUS9ZKG07tNfQbUEMVlmpFrYcjYet30pcH7n5VUVmZHeXomRYnFySWdfaF0iAPjgqxSo+2muFbJ1VgLkr4bnvUyTu6ycFD2pcMG5j/01ZVsNRk+Jy48mH2tQC7JLCEseiDxcRQoXi8xo/DWQabuBYWbkAEdPSCjGq8u8FSOrAI/RfxvLUc+yS7EFanBQsF5HeYbqAK8xDeNvyzT72T6VQ7lQZxdXWndzC7yjQhmQaGbYoGnZbAv5iFx95QUaG99vg5IpRUkJnpJN+RUa+6nQeiNtgcOqbphjusRMtpyIXv/4LkdnAyB5sO5NTXGBHGkLDU0VKYvxZQ9F+cGZXOED8DWXv68JaX5AqHeGcnmQiUUOBpzqTLPzVF9BHIhQXCoQpApPIRw/g3D3U8vIdFLDjhO4jSEYWG8X2v4n9LOaZPsI8N0KvA+G0Tj05LrkCjf+n0rBjBH9DcJrlq4m8sj4l3FfFquKm7rZNROhKOeWEEJ7CJfgQQGPUGxOY4agc85yruiyi6RMj4xBn9fP0t9vqyj1kAzlRgKeA4ZkxXbA/zSqDUR1eKV0lI8Kt3LEoO9bJhCDnvID1Xn+Dqb5SkS/q8A9giTyLFSJB2ssDtJf4fPzx585dZBpWCnJWyNpOtlEKkcn1cgIfXksREfvyk8GEto8uq2ubek8oY7FaXTu75KUuxVKMjhLxpYWdclVqahUoRrXm19rZ+qThu9vkKwjjktRe64b6GmGgcIyQqOU+44mySQxUMDX3eQyq1a8nnLrvtHMNA/UqYJpZ/RbtGw345VYCqF8iMBHqQmc53sEx5CyFmGMJb+Djk6jY9jyxa+1EDaBc/udznBLPqc2ISioyLjNM9T4ORbdWV9ErWA2rzT47k/DKlEuZDP7jXpBVBCNGDFEN9ThLox0CvPgWOvaXUVbNIeTpawIy0qlSyYCIz11e0pI+WP7hbpR6s9hiaEh8fllmCaAWXcFi22Gi0RjkqymQY21g/OfULjBhZF0SD0IA8nAiKrZtxciSHtvFwO1joQO4/oLcXup4YJnSdqqwlcgSRFElCECbnY+Dg8EpRDHfzp+eWCsYu3+GysN2zXV47F9S1asjTua6NcpafWW3hs+EL+UHe9lKQoeAKuu8dhIAVMcoFrWLS8YQQ+w7rTo6GrONrlwF4nwOaRvfeMHKLAK7HGLO9wV9ZEmWbrNClMVPrgmpBLhIY8DBbicw9+RhmmHGFA1ttp/o7jYJ+WD81ptZyOcKUjCoWWUbfFpP3SEQEC3WTZDylrq5pA8BW/iSSGMwuhI5iPikrzDQiJuJG9yIoNO16J289pUwljud9uzq6Ucpp/taJ3wvQ8TiVVMN8I/41q9FvKqfSOx9nERjffcflew8PugHQDrvaFVFqw398NIpeAF6ZuGKWNgkvIknV6Ixqgu9PMedg1bX2gEkKrIdZWXp5Twm0eCuSzAQ3b0vWuiimZ31dW2Ra3etSYtr76WGPMk2vi4+VcPP/gl9LAI2T2EpkskqXHIYTRKml0ANarayAOa9KrgodWt5EZyQqS82p2yy2JdgNoAvIZGKoGS1KAII2TVVk/6A5q8xbcY6Ty7v1xxY8owKp0LAVUNHIK57FvotiaNFu+U8kun3lZxffLjx7/LwiuyhdwBww4WmtchQ/uPQayrQYru2bdk0qSWQMUzXYopEHX9lP5Icdg19qfR7iBdYqsoRS+NqgQQEAC7IEWCnuHmoX9QQswDC4XDkLLBWNgE7RSMAEOQauBw6G1wFFo7R5Mg/8cgDm4S7AA9wB9Q+3AcWhfYAkeFKzAw4I1eDRoBTbB3uAEdBqwBU4eOiSsAGfBSmAHbAWy4JHAAbwo9IOXBxzB6wNy4D/wNuDc4LkdcAoODHAOXASfAi6BzwSu4AvAAPjyNh9gEPxNcHlwUnAlsBrMCv4WXAP/EfgB3dB/An/gOgSAGyEIwC2o4EBAiIgHgVAdCIKANeD2EANwD6o/IBhqHAiBmglmQy0Ca0FoSBS4D7UDhAMPDkkE68BjYD2IAHaCyJBRIBrqIngCdQtsADFQzwGxwCjUF/B0yG4H4kLyAQmB59AgwAtosCARGgp4CQ17AZaDVYgFO8B4R+W3ZACbERuFbaAdsRk0YtCmy2iANqAbqAAQkAqIgSpgAVACaEFnASxAB9yhczdQoTeA+UAz8ILeCkgBaiAZcAM8oA/OKQ3kAuWAN0AE8oCFQH4AA+QAWdCXB8AAIADFwBxgN+hE/AD4B7QhfhQkATtAYejbgDQgG8BBv+9AOpAJUIAu0AO2AxH0D0AfEEL/CrYg/geQAvwFPGEQ4IFKmKoeLAKNoDqwFNQCy0ADWAzqAktAE3L8IdoTwIQaYZZlrrXtu05GRFalVFtHP47XBI5q8uf2fBh47cywJg0uYjTYSGDwFuU0aaZgnZShN1RvlV460m4XPXfjHXMV99ZtCTPj2CQ4vBjiCBUrX+Rl2ltVv5aV17WhlVZRsh+13MlRc2Zlro99fEPNbwt39r56/28/Vpn5lO95mfH8atX+tK7Ovg4X5C8OSigS4kuy+EKpOs0mHPnEmZM2J62Qgk/NBSEwjmc43IFBDSpmeIJ8lKAGPvxZco63bPGGFFX+qH9pWqU/zfQkrHfV7sRH/nXPFyeNPbczUaXW+ihwSGCEdal1t3WfNcF63ZpllbnR98Le+9330X/6/nulXwfvfP8Z/lH+8f5p/vkn1J7QGdAxYF3AG74r+Ms//qUbGTgncEngisBdgQ/zOnSvCPopaEXQtqBrQQ0nGj6YF7wseEvwkeAXJ7YIx/KpMB2iYCnsgvOQDDegWqFopP477VdtsRavHdaOaSnaTS079CzkCr0Mf2SIYwfYOZbK0tibE4QXRGB4CmJQgx7icB7r0IQ/yIn+kU5zekQf6Iv4iCYxKn6QRLnKX9ImG/IzJVVTPVcMZVe8els9Vq+0jn6nw/pt/cdM5m5uGY4xmvPGNmNLt2iNPbP1lm45VmMxq7ekLVnNPtIAeHiQwgf+xBpf3Me2OBjPUi87A3nO68SwFYkxDrljLx/xo7DyEyQNSfX0pWO6rnFPBm+ueek+jxeqi8pX/fqbJarkHrm77qab8PqT3/bsH3umV3mPV/3n/lc4hx7uBHkwhivh77hHYyzFaZxOx3SWepI/fZ1FOeaTDGd+RrM3cxlnJ9/Mb/KP8igfy4nyb/1WW3Uape0t1ZJNarP2oQu77kf9QY/1fG/2UR8ZduPFYA3D8I/heDgeT525Py8mMlmTN40zPJsTz/m8xkbs+BHDjLORrfwCv8weppjjJmOWWGOLJzzMozwzhwqrU4NarYuqV7uu5a8fqq2+cYN00s96trOf+0STyE/02OnnQR7naQrjiKfRttF22kF7abm2baVW0lv7H7yDN5gEb4B3wAfgY3AM/ExBlCclKO0UiKKnjFL2U85QblK+maBeow5TR6lfbKU9tJO0E7TTtHdVi6uNqo9qRfX56nH3+1RzalrNqLlqHteMV7P2rZ2uS30+zMN+/k9+8V/+m4gVH2KDsOU/5SJP+S7XyX2KK6tX/Tfpkn4w0txmbRYbx/7dDntrX7GaWNopSSf6mtrJdRPcceCOcMcXnQTvs/N758PO913avnfX4y6062TXuOstRPDfoEPoLaSH8tAI+gYXwn/p/xADxCPXEQgRIR6kgoyRd8hH5AsygLjIcD+m0A3RwQDLWMc29vEEAy+CiCCBDAqooIEOBphggc1Lbn+Y4gxrml/x7mA+WTR/WZ6ryi3PacrR1Kty1blGuS5Xl2vM1eXk53QElLeMpRSiwD96fhQNJJo7L2hnPmBJce/gR0RhZ24cn3HNag5kwwvF9FjOLwSNVQ5SxW2DRPBwggaMtmvcDzzlnFQoboBFJSBJLyQj5sR8EcFCjPh8Ux6/G0MMLZomsAMnRYSYxhH1ZsqT2DiiJkTJVDV9tgHfWNz/To3CW6O+KjYm6qzCF+/SQHquJvkMdzFoT+1Sj4n0aV4wsVDXxpaygJW1fZIYF+JF+juNrwKYS5XM1awLLqb7anLpNZi4rWPYuIGdpNAhbtRN+FcXOuK9NRJCL+cGD+cD6igGydzBS379ASO24xKVXP1/bBnDV24OS0rrJua6SuYZwe/p5V/EW4FS3RIhBZGGlgCIHaVJZbsQyNrPI/MokjUERCYJoewVspjot8hDmbjXK+HQib0u1C7LOBdvmCdw/YaBmu60Xom1ndSs8cPcTLYLdXZC2qp6frb3+bV9D3nlUH7uEhqHdBWcYJc3AHxLpkMvDOtn4Bez+tPfrrMHi72HMLe7SPnbQbECXnSQN49nXCsI6lodwt5ismMZHm4WNN0MUxQ3vHMBsNSNsKrqII1jmKuvX1wFL+YtInAbQcqjrIRgVxE/1GHEGW7CV6v+bknyLSLGEmYgOJ8/gTInpNIvL0ozk2kc4Qo9p2JvOfu/4lqGDkrS7g694mz6Qn5kb47vuUrww1t2nN5ySjtCcDM7/jXzvwnCQQ7p3u3AyV7U3f0wY/KDt+ua7TrgTcwltxA282c5rIRqJAj2f1j//Zq1oogZBkzALQmFsBMs/1x329qN3pKJBvHMcK5ysr+i93wOuI81eF+fjRBfjLKY4u06FfC7p6NT6eO4Ucnc7tNgWwObuPD3ucnT3dWL7p8ai6BHCGu8JzYXrq0DPBFtX/Y0nKHGQ+gMmIp5qpHioc92DaX0H0ueAnIGgGB25leEY/r8UH6vkKvCaZmZNXAlwrEwp0IZx1xQwEI5FhINbJofRl4OK+XefiFMXqJnFwQfuWeen5G4HUeeO1wQ5Ya6xJNJSuxyBOpGO3AyXP0gKHpcAaAueGpXwt1p5nc39X87s4qX+I144nFfAE9oxU770zi/nert8cZhNOIjbhGV73ap1bBu35pxDGgwp4TInJbG0f10fUDGsjLV31tcgS04Z/gEjS4B6sbzXvcCK/tCMRDcnnWj30wUGtB5TkBWV1OXeJLZshvVwMLphGsj9Z7AlstX2WJ4/kQcTuh+lRnqHFjhqOTBfrU80LpS6eazrwC67k0qKgbrfAgHD9YoQBkxYUyxJCA0Efk3Me8TIPvHobTHEmgdiqDkdaYoo4FyAFfL2bUGITUfCRXpYPkIEztNM8tnnF8gwm9FYKMdKI+LNP+6tYBHODh6sQfqHLZp5CLe9eC7zkx9s8tVP4SBVTUI26qgtHY6O11rJTK6fDa81BJg89T0Imf2jBxi8fw0EyRtnLx1HFTpn9/LZkCw9aBQJiRbM7FMZBmYWeP0FhSsL+GOXCXASyfxcQFcESiYcr9qYpkqyIjSccLlUnLkuDAQVsjmIZuLboYzdoMi5WR0iWt9AWMwOwM2j8paJWtyplBC3eruGxpAy2wJmyZe2+Yo8UqGYms77i4r5oCqMktKsigsimpDWr0yf3yzHj2sPKi01+hpYM87DBUlrP8inEBlf2u4p9hLwPi16U1fuDI1gTf/y+PGAsZioXN1HL3mwBCryAPN4zJrcA0aupZuU5XjEGkwVC4QikvI7ROmOVEI8oM0rZnpgAPSCGfesnEWdkRzvI403I69ON1Oyx2btIojD/bbgzKFCSq0enEwaNlZtAR7p/IrZ60gC+1RAhpo/5oGpkuqG0pSYJIgGFRlzhp/LSxS7IKeNLN5gjiLz1OdKNzzSmTQ4gwkl7TBrGyPVCF7BZM5PPOcBzW4q2+xENZENP5/BKQOQXo79k9N2l14OF+X6Rupin2y3UP5ZqO6XPEUAN9CZTO6nNeBz+N4jaqKoU66KiMtHaglKnzPVysQfFCLKTcj1b8uIn3vPKx5mBOrOg+yg3LGD6gjjinUYZq5jR3f+Y4sRXrW4KA+GSG+/FSeV2Dh/SpBgjAvioN4y4vqtJDs9Ywnb0FZqfYko30xJCtscvsPXoTUX/qRi2D8xyAiQ8/5wC10BZG8YVLeftSE+AXLpynwKQrM43xV1KhU38UXh/ALgSUWWq+J8mrdp98AfURZPAF8JyDdftt9JF+qoLUcjwpCTeL9cM6CaT/WW92mNJvTGLGFt3oBtbeLgcxXoqlumm5TEVVwgiz1fpup+jf7R3aCElXQRtEJWiDukcyC0FPAXQVA6YqQb4QSOZKMXn6FiBuOyH44fZI6CKTZLL4BsSh+CLFDvJ/4SlbOclEwnXP+n6mHZPNyg5hNFs4eKqEMOGoc780R52l7b9gU0X1iuhh/MqAZv7/pTo2hLbVcOSZ0XC9lFBk+C/Kci+DQNM9Egg6IkMiEX/XfvrLMq8nt5hLmfi91QHO2jEwMIsBl1rtA66It1MGFJL4SRl8usR5RQx1wN2o2UmUtKifrn3jteIT5afLyYg7gE646mZXnZNVCazehdfeHSf2GZwc05YUeNrBzlvu19WzGfmfAucoZrclgxLAn/NhGTdf/BmNHpHSe9eoLO1KLMN72fNhA57buIl0N1Um4r5Us7WqVYIku+1UXJV/Nj8Rlwx8OOgmbJ7f1lSyr+BLl6oAizhoRKoTMhtK3e2BdmvE9mbqvX03AbBKqrM0PFw1mERabJLs7guPkq0PkB47NdRwt8OIH01eawvsyP8zMuvl/sFLjJbuM0g7oWEPWkw5JyWYacqGzEDMjNBfUcbTbgc3OGyG6f4C9GDf7ngVWfxc5nVVDGQyXBaEAVaEQrPIOFX+GWgmb6Uhf+m9Y1Pe73mMN4uvadlK5mMVTspw9c6mY3KsAYV4WMOzZ5nRKgE4epBMR05yZVjYte4btahZFVRzTHY/4pEkS3hGHTY2nHUplAZpb6yLQLyBuvR6CextMMOUR8kUobdBV9xbw8zEk66wfpFxMludVa5BoUZACsbjL4TV7nP53Nl2iwEj3N13iJm3jztuZMl1MqHDNqyiobNUUzUPbcyeOihy/FMkN9nVsugh/VjxRnLfq9I4FQZUPN9bEROogGAuQ0AZOHldHTptNi4fOZT37BXc+V5g3DfuZzP7/Ix3NKyW/1SGn5xohTsIM23ZAolO/j80/GUPojkRBFAQc0r4M6IBOoFJlzzEoQBTLpmNCaVOGICesLEvLy0RwUfVNPczimkOhrIz2YysDtnbrjMW60PHdp+jF/zlM0K6Qo0MpaHQAq7CReNOAR0NpGFoHpbEAhfy0N4rFcyJNpmuBgyoc1RTd8+/ih+b0pjYWv7ixaw77Ie/UA3C7OME0sS5aIlMkSZFkbjXHSsBKFwt3yTEkazXU6Vx9hBwtJ7H30zBdocSj997XXNAH5ZsWWbg2m+yTVYqNaz8DbFP0GANG0wHvPdC1xIbKM7Lyg6Zh9IEr2/WECjx9tDAy6V7oClz7EgKZ/NbuRh5woC+Lrl+bFOv+Yhz3xliOy4m/CrPxAX2tQusidWDd0cyzeNloP8jtpub2JYBbf3y7yQWsPPFoObkrlkBLWfU86cVwhH/0bxenIPGqiLwxh6aTZWn28h7IFZ5SHyzi7FW/EW5KfBy2YtLMIdFLDEQ7xnJY3xcYiHwl7jIKC3xVzvMm6T49yf6B7ZciDvktmsJUthn0obAhevAIsYzjfFcQ2Xgl3IHZYHLVkwRlIYnBk0icKi9Z/Ay2L3P+7k8Jsvt03hUw1TGexG7Rtw1ZFuEYQvtpNvazfAKq6AfNpV/sCEcYDiGUDrEPeKrBJKrwk/1jXMueiBiIg2ZmJycCaVeEjJvOGJz9H/Gsl/Q4R0A8XI5F8DL7b+3+tLTgRPlXOAsfGYEZuDyR9nF8jKtMzvcpV23RNfehD8c+Wd4UILlREZJv53F+cE5l5Coq+1SozWA1aIsbyse6Bu5JlxwR6DcQd9/u6MpnWMpucodiF7tkeBzz/GVpRiEXTVhmJP2BNKOeoxrOcjJgxgL023EHTgXzXAr1fMQuIZPmYBRiRr70gIYaCOUw7J/6Ee4EWypYFnzwQLh0ZOrWc1ZypUM4WZKqq/CyxS3rv1AWk5tBxKF0AGYqumUhZ9FpRJVr0TuZEDIifBAS9xSXhZk+XjqGljLvTOpslMn3L4VspzE4E3DgBjucGUolDeZdgXwbcx6rZkgoBH4YxVufn4GOmzcCvJgCa804HlvDVPtLOVNKjsDcTmF5JyIk6qY8r4qw4VfMzImffRjxEJOcMSqOYa/Di/m5Crx+gImkMrbRjkZgSyNZ5Z0EuW7ySQ/ZEPJhPy4AfgOYasC3+svqdMNyKMfErMwYEBN2UGBDwDy6snXKhSzlyURmP3SqGj8eU4h2g4sko3qhH+F7E0XPWozQzISbZlrjne7IKI6b1+YMMGtRrHD+rfxTZ4Bdesx5Xbtp94AFKRBY1AKW498fgKLN6+4kEmG+0QtLb40yewD7LDNIum+qn9+xf8Dck7t2v8FTEabXxCQRSOKREuw84jWilvZftbIB4fDSO3fJqA7pFLdlelZxA/bw0pQm1iLPbDV08OBi47HD+KbuRf6oxllbzsFE0RXAKY5n5Sxq1U545aiiL9JqhhcVdbCNDu/lcnkV/7bNWgOHwGpNbKvI8cik1r08fAH0bEQAdV6EeCrzvJYAq7FzNhm2CHIqWWlqZqAjBVDeUZfe5wXY7SrliJnEIp7njg1AXPxYEmKDGLGqKcY2wgU6rzXKFEFGwMeh1Qr6Ks68zHbt9msEDhlGhjuFssR4ZQyvpmmiDGz8AOywwywozFx4ytSUOErFhAS6/gk/xCw/eA+zKmnKSmUFWE6RbWSLWVHMw2XOdmCnzrk7jdNylpTuGBRWEAhPWBmphP9pFSdcWqSoPoDZQf3Xfn6wAOH3hh+sBHM4fzbcHWsnVkwbqzdC8lTmqUzGnNXIpMqzfohl6gNsQiwiKnfS13I3VR9Go5QbHtf7pbjeJZhl6SJ8jCRRjC9P7tTaeHytjRaK8nESi59bREQxZjpph4pJMSkmJQZijChZ1TJJv4e6Is7MxJBc+CcvRzuVm7eHizhcffNrNSQUbC5u+xOgOvNV8IlXSRDNqzYlh1ZWkXQGFv9nxZZbx99sP/Z7zyuvp/7UVaUZIlIRN8pWHYflRw4SiknuHS4FiyVum20Ys77FGpWj4WCuKvPLlzHwBlJzpyBwi5ct7wxTgXlgcSrDbrwJ4mxZnkpw7CuBzStua1od7Iu6LYHI+W1iKjyirVOhMLvRWCgLTCDQKjht7t8RGS4m8awG6jr0Y2MeuI816ooNEbIXpxyjU2sX8OBwOPdmEmfJy/2pRjSwiTeI2nYPA/YcxhrviMyFGz77sXZv0T8U9/+9GaS/3f8Lw2zinbs/Op8nYlKdyZ5Toe7EhuEaE5AFfZgF8HixL/4ZmkeLf/xHS1hZwHaHs/gEwtb/ILVFbcV8p0zAgw1wlDgI2HLm95i7Pf5/17r1BTMOBMTVufNMQ0ZFyh9BP+/+E7AHxutWirLWZy56n/lum/ee7p5/cfVGyZhes8e+Svs7DRz43JVAeBTy5v92bJAKccQcihwaZkD8srOQ9wKT2wisMBqR0cfsJcJT5wijT+JFpSSGfY54alM7f5v6e68ysBTBa+exhWLu1byIPJSRTZut7zewc5meiKuK6TnTOKuY4cnkroqGxWrd+RpwE3ZS9cbxCLn6uaDoKtyj7Qr409WUcOs75lfXsrsXFV4jqrIlsKeugUlr1CTy+1QsGXZR1wPcgNOFB9zWLQnyhvIEn/WXdi3xy1sC0vw0ZVYLVP77GCRl2JDONeG9eyVP1yrQPmz+Z686aASYUoSjev3wqdZbp26/vwjiVlYwR0FOy25kl13dC3M2MVcLkTUzsrXsVQe8L+J0WvLqbLjmfetxIDVsXSqYpODW7ROffWrZiq1SEe2uKOwzPmqh5n4KnPqkMb9Ncq0fP24fU1h89i1AI1/74QVivvQI7ZZBv8oKh3nSmq6ipdK49sUUzVHDMh7wRZb5zbIzi2yBLdCxRZV6c98HnQYldqjLf6TcCiaZ3DBIMkPz1mj+ehohEUELmPDhjryIN/S3F++dTeYplXCvCEqF1vCvnlY6ePW0ionXJNZS/4pFNQOFrALlZsqQCGnEy5UK8OoBAPUqAKqeHl4g7zgutZb6ntc12uuI1iKmEUwZeKkt9cEBfNAi5Jt6MgI6GrXNAQ/ktxpNE76et5HzslsOyGaN8N+8OorjbyZ2DeVBMEeRRLr+/YvIhW+K+XqpxKJ2CtZ6CVsgI5hkIqChZKodA4DijremWWlXsMP2euf25Jl7GCZOgxhefXW30HUsw9LyGjjUMz1wE6gWsFKXdphUy29ddXSeNAASIXQC9v4uUX+lb7192m1v5BcOtCNaDBznupTQ6mmzfY0drN6pXLBWugINYqz6ho3KeDMp9+I0ITyHwmCfGso+JYbUx7C0G74AvdmW0YJPVTuNteYVL88ZE0xEdBj6p4HOV1A1I4tUrzBwrhpOVgZaCofb7Jf52sA6N96jXruzhmYC2aozeJ56sldjhiko/BKLFZ9kU92s+btBhiajuMTN9rvRIFkz6r3zqPoRTucx3M9B2SRM4LInNW+dJ9PvmeonTwv0eYXqGM7t6F4eKk9GTM+UgY1OVfXtHINuDaWw5JYOFaSWjSDU8U9A+dTU2VehiBiSleBp1NdA/09wyW90QvpAGixfQZ+mSVJXknuOGSvBVbD8F9D1HGbpZ4XbLykXgswxzK9ShOM5UfXXI4JaDdBCebGWsF5kL5EOj08A2IwbauoUTGSl87U4u2yDnLc/vc2Rc81nth5vKptcJmdFS8Xjq6KZ21Njn/csKGRa/w1y/Gy2b/kqiRXPEEVvSiEsddFzTQuaLrUSSbFBzn3YqEV3bDYtenUKc6S/SV9P8xHK6026Co3bg9xOPjze3TcFRcaSlEx2nQdALqiAwysA45TnRxXUcFlQQ/Q0Rt6g7TQkDcU3UreX6APRZVyyBIcYHRTaefBZZSZ7B1SXiVDyfjRmWJcgQRNJfkdwKYNf42x0BDWUj0zyAMxSgF+XX/FTcHw0WsIduqBkV74Ezd2IYU0cyZnCpy+ZH3ZhSgemitVQtZe/VnNU4WPdC2pJxSFNKaFrT7D9loCrXuwEWmebuzGEhHyhec4PrgT9TjcqOySx/tO+atyl0GMso51s/MH9xRXMfXKSsBDtbNm9p6PFDM//zj8PP69JwWJyGCZH4i8da7CXisjXfz5tCQb2nNxcWMRZ/TByiuEkdwjvWDWqAxeJuF2WYW+fWrHwaC+2XBswk9Hnhn9+hqP9SSyC/uEDXMXkyY2C0oVSJsiGD4DY8SsJpoyY1w/YE1lWaKOFrEYRb3GwdcktCey3ggdjGJ+GPLIPs+dTpw7zTiDM9dw9DddMEbgshVvl66UfAABcUvbFF5FxCAnM73utFztKTiWKurWoc4onavD67WStIxHeMZ5GjuhwuDn6rgQ2yM+BzbSI0QHxBJoFtzd4EbKprw8g0OKyT774Pg4RwRugHvYrsbNwQhmv4FkScKBKFr+9XtdNcP0Uge3PrdKcuc8nf5WE9nL1wj7MOukdt8+3XiBYJPSEtpcNS94DDLEygJuxX345PxbB844Eb/jUYBB10yD5JgBNsfw2ws7TJfF/KskfHzVHK+zAvZ/O/0Vv/yQUP/8swKCUZLlUFZWTy8xtja9eDknxk9LC+Qws03vGb7/Yg7m3t7gxEc0zAlbMPNO7XoLyTBS9ejCcMvMbfzvWv1AZfod7zb95XsAoRRP714L75kL5Vf0PZgoA8bThSquLJlpyuwPGG7Bp+O4lmyhGOJsuBslQc3paydk/ardE0vL1gi/HjuhWgP530D+YSNIkz9kS7nwnzPsy1I1oul6XpfhS8tt8qDlef4S0TO2UXz/IkdSTYoLLL2feY/k43R1Y1XnjiTvUlPQnm78EPBJH8H5/vq79qS77shoBZs4Kv5A5BqUlKrcIiLM2UEHfO9MKZw5wF8hxzezeUTN0yCPKmZIXGpsqkLYmqpDF70710gIJpOIXMgnUlkLAqSYe/HUCQXxaNjFqHMlcLKZcP15pwKOq5JlScOtYKSIPTkdXVZvAX7G2ja39n1z2HXgOhbStxNM7KpzBW2Xtz9nbJHP3T2DWy6eOnmJVAW6RtLWUnF+CQjseR4inNpG0hhUrsXSCbEqGHFNFSx6B0EX/CCDftsgFls0mqbMRdrjlSguhnqUSxYXQ4CP/4zROr2xIEAepYCaxobbpH/WkXCapBldGNGqhP19muw7tRrhS/xrw85xOmGuYbHK1W15ibE5hm7xbsT3gMxBuoOufRw6rwJpJk+p2VuLrsUludLGaNVzPFNySKMeHMdV4jtrPomwQ7ckmKK0JJPPpNM5W0q4KUuQdg7oUDcV/jIGdHt0UtXQugCd8OAy0QEgrxrTEdbm4WInXRSSYaQrA4fn3AbUYrpm4ZtK1KH3CGf1DBi5yxR3HNJ60Dvm0KL2U+LcRnuXak2ZjINr8W6NEG74qpV4ISXWI2xVTJsw6B5YI75ZMTSvE8s9FPqQ+owcWUlqD6XpjhBz0SrgDJigil012iunwkLPYJBKOoWS2PDi+zj69qZBAXJ1/XV4JadoIxtq6wRB33SVRh6KJh2iWW0AIbaRY6lC1qZQgDQaUdhyZotGOYPzFKDGEqz/SYUoKgFZXhCROojC/n4Ue1b+9V2GfPBFru2EfzDPrXVHoctqnJDEFUrrFcDnYeS989i5WnmPeZCLjxfRKRfuSIf/6D8DVNS/0LjkZfhBKmOo1KHCQTh2tytwmWXofGn8Ww8lLPqQvV8EuzoB8XYEJrsNSsDS/XpNQhW0UkTonQnhIB0uYjS2RcVtRlX6vekL6svcvvWMFIyUckTQJkmZCdJ/ZNMhmjhHGTEKWSuQBvpZl5KnOYY31VOirm41/vCPr+EcuXcKDOSJsjbaHqutgNgoWX0Y4lf+cvKeQVNhGP072lkDRKlqK++j6BHJLtpS0t8kiV4iXYiUWpJclPkq5G3IlWmZmsLJ4gR3OoDxDhV6ZocwYDRm+fKmmMbu9zlWH567WWANwR6heVVWbPJPIg2PVpvtSzHSzYa67vA5ylj6IW43PUfXxuXX6iN0Ti79T7hh4et/FhUnkFpG+BdNJV256VUyKSYlRTGBC6tc70Tkl6liBMEWWP5rwxYqEU6oKnJDA2dGKnM1MIHyk2nO4DQFxcmnwTOYnORCZ8wJcogsU+imsjSxTBM2s/C9nEcUWc3szC0ZKuKMlcSVZ+Uc7KrRZXD3K08sxWHmQkxHwcQmb7FFIZhcbtSu6dkVoJ4R2gmvzdfWEznfit30dt6GLGMnEa8lp/m4GgSuXlGM9CULhhId8nOtxXnduA5sGRXKbR9+v7IOV25Yq05QIZbwyzusxnOrDL9ezoZQeNJrli0s2xQCFezwzxcoqxaW4FIeyiqwKz2q7i1NqTn/Jaj60eqC0lsR7jnLQ1YjSo65E/yjysa/VDpTujShN57al/5GaJCFXq+6Y8N9SJwGJzNW0auj7PGydLTPmH/6VlNSWkqxjQtKfybnbF+l8O8cwdFwZnhfVfjsiqNEAfeDAjHi/VDo8bh6GbFcvZ6Ar1M0gE56DnEn0l7lZGom+J2Q+ytx+9Bpb3DAEA6MoW+xhrfouoR23Byr2dupTvC89xHJY6r4GOo1hJD6MYkZIbz/6r1reov9Kk2+BYrhw7ourC1OqEax24iiYm/PT1xjwVIoot1W1KTCptayf0WUTjrnTPdzlFo2adfd+aH7f6QxYpi/PpQ2Ws4dBu7B7m8WoeZNZCuSYswGgeeztVi0sHeVlzgC6qxZ0Otg2G+FW10QaCVvJhF3QSAY3PCvQU2UPUP5FPTAmgkJ4HkJg56LUiZ8R3rRx4QSKT6BCB8h6Tz4NHgl9Sf+zUbIyhR/EHT3y4YX0TUlisbH9W2Tmu6hO/1Mf2DHNDJOEcMULcHVqZ6XSwA7sIEUR+hqmrCN9ZIpbLZ4eR6pDPEY3jgKHWbDALCt1xWYSGgaxNSaSASWqdbJU8C0vyJ/UWKXXWOJ3+d/MjiG7d5brCHvxabWji7Ojr4+W7fP/Uclq3RUVaM04ksHv4tIGDo+9FGliZolRLXkWwOT96JyDG9Xe6Qu4ZAMv9xoJ83PazMwYx5V12uUoJ/GvgSiqc/70gbYj0DbWHajVeJctwbR7OHqT7WSkFhuYJwptDnIF13bfzfgItDyYT3QYUgIlEJ0MaT7RVpdWXIxZEXGDOYL4cVE8FKiwhXd380RxWKy99K58LqUK6G5DNgUvuX/j9RSqou0EfXUky74tunyJNKd+Nk97Iz3mEjnfyKryVrMXHFZa8r+p91jha4ejHkniynEkFnIHYY76lO6SxtZG+VETRgOilKUDhaFk9wJep3HZ1QQGjt0X1Hfao87QJgwa+SZrgs2ThAxj9Evmm0ymA6c91TTvsfjnZuynY644qnKzm5rD2S+ALNFyCWDPWUdWpXh0OfU3nj8s+jWoEt/dqjl91YwblfWMnakRYczc7clSwnxm93V3nqNDer8DbA4f79uQhcUtYlmEfi7x8g2of9dxlrYOQPGyEJYOH2aePjBQSlu6TcXZczqvWtTQ1XpxcOnf56rzgPg3q77zNVqQQdL3waXsqFfMg/8ScFIdR40dXRy3Fce0ISt+gqOmmeF2D1g6PinIqmXT63DEraPHDtg6/geZPq9wI8v8k3fWwsZiKpShIrt4oIX/gMktaSioufGLjHPPRyC28PjFsnDjYB/XloGPEJipzcZ2CHHyb1ZWmcpqinnCChFz5J+gi+p8CcH+5xwT6Te2qcYm10yQRW2zTP+/dQ1UsnaRe4Al2njNhkm9Mbv1EI/gkMS+pAr7O4B6JyAfXnIuLIQfQYztYeY1/Tbgh93TIfvVporQIa/B0g489juZhPqkStzuBPRFq4SQiv7im13z6ZoreaqiTcyvwFgml1UVjOlix30Qnu6Q7Gi1r3nSMOi1BrzXwLivSRMQ95RXaOVyzUvD75JIN+/IcY7feLx4S3cF5GYDYF8KpFRBk06dhdEAu+UkYN5TOGv2VKMoe2MhWccPhdurOA+G60wXa2W2WkH/w+SJ/yjm36jWvXBWc/WLYpXdAYZVTZ04mYvsc1b7PNl/rxxYYF/0tlevybWQHXoUfPVt853jV/bvuoiRTWls6oeHDDmMSXIlsJHOFlQeT05gekZ19UnPOHV+BxZ9LzqT2CydIaojwPoCOtpmmmhrB2sPM+G7tn5GWwNNbp8D3wsvcF2ZYPI+1woFvE5OKg+zaT67Dpyy7XQKKcq3/eDbls6BYiePhlc5kcwCvMmd2DrnFBQdhEzURptuBouWpyuaj/s8VYYgK9kXLqZxYj26NVbavi7pGnQEOuIN7B/MTlB28Kto5YUl2SN5LFZSD4dDW+jsKGOrYa3ovnUFNU5Hg0y9YOWjG1J27CDq47Nx8lhgqzFTMb5UK4RtF3X0dPJDI6I0ubHP236ADU35+ExTdGzoGx6cT2DaN3u2ZmFs9aLYMOeO3jLdC1olYaVOYFuvvuy8SIdBZ0xC6k1DzmsTsahzEmY5+EYSm71T73XoDeeqdajEuTe8aWdjhyTiybq1dJ0jt8m87kPk+Gt5wZ4sfy0v5JO/ur3dd8itcS+pJOe658FZcqTbe8Edcp7Pw67aLte3DHl6PRLxNNHlJnc6ImwSlRzr0pL29Vci5q2x8ATX17gu82yXwpPfub/cLNyb+u0c35cdqsJ1OuU17UVPenvN+khLb1986u28JuHZk37ijSRzOdpCdQ/md8HW5GqFg62tL/PmdMjLHrUtvh5hHh7KucDMjxaikP/4UZbvU8U1ULyUEQ09RLHjlQTVveBmZ44mLUZbY8bELzksGdkijA55xySE8IjK+wuLXty0282Ob7zMVzqXliJ4DOPVwScJvC5Tatok20e3XI+wUTsnpTmquEMjD8e3QhFrp4vkH/qC0rUD1w7W2UHGDpid3EvFrE5qevag04Usqm1Ybw0voxhXXMBbPPLa74O4XoX8ZcqxguxQQUlpHmuu3ILmwQNvyxWjpVegAVrGSSEJT6tQ5aKupkcmbrfNX/oqFz03hnQP0cy2oJvuQdGSu6pmm89u2LTOyV3Jozu2MBndBfSmrQ8CYF0r3KmAfHPV6F8RPlDg5au+kalGO75LZSfdkuzmqkm7YteWr6JXzQVSUOWzjl+wVaKvpVWOeHYm/0tLW8tfvdoVdSr5ufddy+RahtDWctprLpBC9bzpVEvFr+3m+f+Ad4zrga6IEyk4uyaVXjqkgUO01YAzut++r5s2mIHDNvLEKtTKgaw2eRHYp0RvjTcLgButLNFkaJ4c0txkhTYYIu7YpKbjJOIN2Klz0GV6p1GGkvnvbGtHtQucO9UEnP0MzdvJ0cdJFVpa1XDROil1kTWcVdi3XtsPeHtZ1jyxrspxNxjGLjRB+mXojUA1tmP8kYaRUxZxa4bqnr3Qi0PQUtZ5dQ8KkFtFzHsedzUXXQE+BJrWeHgZXPyQglo9EkevPh+z18BEGZhVk8ihY2bTypgnzNGG3gjRa0qSWBO3xY1WtTDcRDmmpNuMMna5SbxEWlvileEw0Fz8eq/I1lwVBprE/2ZY+1IFtSg9XkHCl2g/hktO/kOI+qnnHMut0VUbFEsmrpEaq0toKT1mXf1/6DHC7AB+h89uB2y7AX/CyIKmewWFkzu/We/puX5D5+SbhinIkUn7so1GfZJMlpoikyUbjFj8lxA8E33Q9bnxr//KvQQ+gCOxD7omp8B/vTs5pgqzNeGS2k5RNREhZ1G0D6L67pDyW9tYu41o4oYmKPLZcyHtxcVQv3umLpFCGNAwPnqUduzKWB75ak/VGeNuxoOwdoRrA+wA3DkX3iNkJEwg9IxcSV2vH5HZngwqTQ2QPrFFK/gaE38lrXoKwlDu6K7FdtVTHxTVHOL/fgoYxbQsFzxTY0VRuP+kgb4CBkmHTgYx6If7gPOmFrxHKbu+k4eTNGCqc2A7ebJC1ViFC5pONjzXMZ/lgSuhG4qlYCn4fotJOo6ZSPTZSDFgjlny7tKKjnvzK729wsReXtURHQZRs75H2IZ9UPts9BpI06V6gEDtnQma3VXUder6AaB8t1rHVtIZT8EIrWDrfmJ3E3n0JExY5TeMpjL0FJYWVmPo4n5UIXPAeNq/1c9SlmrJNKnqKcCjOgqbEwoHa3Z1DYvG+U1cSXtc2GCRzrHcqOXEzdYwI1DUORnDuBsKXaVDZm3lY3ZOSAlo4/jxaYpHE/C+MIgGLFYDam5BsDgAf4QAwIAvsWkZjNVE5WzVmS2Pk4Dd+F+I2UFtsg3mQSNYdAPeggabzvnUAH5JcCTrk5tN7/e7Tug9wL9YORDHVB3RU/DxL8CJQovJQQGxuPf4X01WalotOGfdqb7nH6F/ygcNkZcoAVhsMEtOPEV+pSLzbuUv5dHBU3Bp27aNh50AxT+nF1id7xjB+VuJ5pqVdcDVtsrWrYaNMRkqt9paQtv+09xBtW0Q4VcgD3UIT50Pa4zoSm0hM1qAug3Xxqxh50w51YaY8KmeossSdmS3pD+9yKxHmseZO+dGJPP1eK6CTELCO8/Usg+XaHqeGsR7GIZN8JrWBXxBxz6HhnymFb34Yp8iHPwCOkvXnQ7FEWzdyUVwlxngbDJJe879i+KzITZwz70qsfsPCrq5KnE4Qa9DiUNDTs9DEKjjUNKhhPW6ztHhIaVDFE9HrW6trbK71TZqZIXegCIbzy81OcMTAjuoLb7qeXKwsoGKYgB+NrXiIPvu5F8q2VIr2LqKp6IGTm0iri8SCegig0uXatIWMvl9YWK3Fafd1xJXUjFzjwmsprJ197AYSUxKBYqgCiawk9gHEN91iBFy3Kf2WkxJ6ybT1ShjcmwZqwVqFlqEC9/csLVt9tvhnETAQfvB0Blz+wPeaSlvQHEMDT2/S9nwEjriln0DK4cCHdJFMiSHuaVuXuhYDkPtZysbSscOnVs+emrLTIJfqcqvufUPCrZWd1lLcy8l45ZgI1SfdiSs7dCntiHR5iMINNYEomgSu9AR9NGWoO3drtgxBDa5U5xaQKpltHaDbkEqB9CALDhvTrcbzZZ85Qmdv4sHaRhAqLQ/tXL0VeAVINq6ZZZaU0Atk/4WSGiRMGWIwXen2XDMDYJQhRYDwqOjpTCxRBv5bB2+DHaVjRKEJF+6KXpADSNY7g731tEFlQZ+OkoJZ9m61bj+Z5lco5ysXgZfDEuXwS9aQaw2iXqwb0vbbndQFE8C25f+96hKgirlvuCWaey24Bu8X7knHc8TzPng3Rde/WmqO/fi/St4l8E9RY58wWqw50WNqph92SGU2V5huy1k9/z3t/YCZYx23lM+ZL0WcunR7BiVph8hj1JAlq2H9jvPc0zJPgFmtZ4yoOa5L+zpdkhjyv13TG3FOiBUPELdNzTvtB7oKVTsx3djtajw4u/GQsq136eThq1yXmj+fi3zbcewuX/VHs/EjsHIFxlPVEa6MxNTolZv0MQhtzwb/mFj49CcgdmZvec0kREwwtQQboDaNZkCXqBMEn4D+MXhu9DJ0f5G3eATdIiGH0K40/P/pWnd7+h7AYu2pH4GIVkbMT769ShCchXrSSqL+OVPaos6pfvLYzbpSRGPFE/JLZY+DxsTvoxl4CYZR5EajJuPf6kN+RAc+U5xPOmI4B8jFFA+oIwN4B/2jeqZ5hmwkf22vWl4NdmMBBBdsluek63TmeuXa5MS5WlJWETbfuJ0ExnvYzhsHmzt4EapKR92pwpK1NIc4VjM1XxkGNKJfmAKmIfxUqqNui1HTQkqg7DbxXf7SzL9XWgYf5QGirSNXiFrXgaAcyRuQ1RC7Khp4XMOxXT9Tpjn7MTEUF/GmNWPmt2hvZxdnLiFmd8rccMan7K+DbjvFiX3ga8jqHZ+87dVh26trtpkJKyo4WR2iYlxz6qwSn/Wvjw7+loFc+NiTldZerTXOcxqaRnNkb7m2VXLhWHByRtwzwPDC/LtRURV3/qK2sL5TzKwK5JtT7gJ2YxnAbbnI6iHbmxny0wXfUW+uXnhzP1s+AJw6smIIk926Kxu83rbuj54ZC7p2UeKnwYFNjQRjpWQMcUBHnidXcAIsx25JMqWmHoXBSr3rYL3V2iRGnoeBDn4EDji6NAb5LgDR/PYHRsSUz6QnLVfz2TuqvEvzNTjAs05XgdxbN/r2pxS5tYN+RswNn2HwHSXWSaBCDpgoFXhwrzmrLCCjQQ3PhJ5OzRjaiOqG1VIwVYDrEsa0juXUxBDJ5JwAphG4dA3mcQi/oIWsQz+HA1MG5Lw7RSRC48WwNHBonqF5rXDpr1Dla06DKiuTWVl29PKypFDISEjm5mmT894bDCCpTQfK6o0z4oRi2PpOQWLrnAW4E6jn2Qf3FlQYYCiOsZtd1z8w4rihI0JEQuZXMMYp5oU8/IBrqjsIYS5GiFQVFSkNAhdYF7RJ4U9mQbqpAaPPw05KjHysAyiO1tUgSdvKp1AN15wlzXKEu8LXvLIeeUrN9d6Ynqxpy+D7pz5ovZOXuvPS37p23dq87F61lBzxXpdNhZt3MjlyXVDnXz0SWF1tSFWKEyJDQtLLezRi17MXPU2o9gs0/bBGpq85n8Y08YSR8FTWjepKHA9LzGVE3JQDbENf5/IMzaIDbxGtZQFWkJi2kgrgeEaSIEIpCCmRxEkZZzGMZ2fgY3o9855AioS5MVvq31isqaI/It+dZfMeod719C9vYK7GHukb2o3O8nfT+xmLdWactV0uopRUm9wPH+ikbMcnoaGpZ1aCXuRnx/I+zxEdsZ3mXl55/tv+vofD9jn0VQXJpdrlF9d7SO0z0P91tKWeSGWMHe+JoPznDUPAFPb+zyBaonD3y9HxQZ/sfBAoYV1Ahtyc0ZRzBl/ez0wPhDAzUelR3FULpk13y/tdevEpp+fw+p2i8L2992Jq3G8L9B86qI2n9gnZ68fameBby6WVjCmmWVcPrZ3RYRkaNO7JRcj2B8G7OCkZOiHKnpQP3zYjkgx88MmSboOh4VlX3a/TMNdxbIdFSwyoZb5jXfzn96bIhB4eTsLvNvz9eK8MeASrT6b03GjQudphWxrgZMCiy74N/1UOfuXzHssgG0Ty0oEf77+jRbE1/uvgZrnt5CEepdAg7gQrwg45/p6z+9rEVORicSPh7C0PsM4VKvcZyuMkKQ8o+XL0HCV4H+vr32sR/vqB11X4ozkTLqbbbqzC2Pp0fbN1O55Azo2UtA0Tz3EnPqzu8sk3sxYW8yqrZr4ssoMilRnCfg6KhhmjagSJcZZzkXxFa1dnKSe4x7VRxOQ8aUpjQbzWW8fuXyZObj0QuZ5DDEHjh7N33dsKm6QSjZMWnzSbASJJ4z/+hgOQ0RWd7HuRiefVXN05y4mftm2zO14gPE1V5MffhpCPx+EB45OhD9j4rZqMzikOkueLadMx/ckCzey6nOoldfUyXMOblUySDjqAiOwDm8B9E3os31Kw9FCyTq2/4SL/Qmnrl64QmRFyuvnmYOlPzWbt/SD0zoNA9SyUrIm/JgRknyP5n0C3P2mxdQvOZNzXJP3KZRKothwykjQhGklndWw2QkAebocUpCTZVbTMcJxnbeBiJxX1QeiYKvUTgtehdqC45DAOdX9NE7o/AHuURB/jHtKXlYbS/xuvTPgnzwxCDSu59DN7nIY/roZcO+FK1JDBPY+XbGtKDXHHkzO/vvezijEiZdrZW6XCH6fhm/8vOn+svkSxkUFAjeRIR/Yowqny2vsJlAL1DyFOib+3cUhjO/9WB5FFJu0NhfhizqC9R91qCR08nDTPbdBvlCuXBY9xsujMIbpvHKBBix9AeUpaHUCgLnvBvMAaAn4Jva5eRLJIwci9s61kZdDyJ7JoIhRYA9wfPa8zB07mUE/tVsTivtqZckCEPIUIntx6cuN77pyLRxSnH1Tp/HU/3aXG5miZFb/3Qyp7zXctJY9nLPuCRrmi+McHJXYreXwIS6PmkijD5XUGLidLd2cT5L0cxVkNslaraZYjlR8OEioBq6rAVXLZltt44UMBRWpbg4sIIlxcR7JMSiEF1DYr7KBydCCWmhEJp+TUztSMf3JGna0KOiNjYgWuxgoHBejGhmAd2wP4H2oAdGwNYR0stpHxf+FQho8FI6irQ2m7QvrQiOsQ19BeEg++0ohb7QOl2Pg5rfqMHAVH9+dIZr/wAKNruVXmjrpStFNMplGxcCVd5Z67AE/BD2GShvT+X4wGdLSgo2GQix7/3MNJSWbG33ilVI7uk/20wqN3D3D2DE5ESkMQEtFTjs2SmkBX0mkBFEuO/FM8HJw12YxRjX+kFfYe5FDyoXQicLdTaSCVgSFypd5rqC324EJJzYynmb/FhFyHqEvODb5he/4k/and3wE0uxQmOOHZpvlr6CEVxSkSVAR1wa3KXzOV/eqmJbzidskrRMrUkZQkgcCppV8NUIAUS7Db30DB2z2p8tKhyTb6CoXqPOcfypKC66mJKvxot3Z0k6pfM2dN/qBza7QE03GZ0RERitzc9Lw1w0l5fiyoTP4eAP78hYVDK6EI63LS/OucikqvHBPVnTvB9wlo9Fm46ClOKOsIAGfnJSsCmFbjFfTCQYxEeq6hkIo+ZqRyfYUOQlImlkPvMGEe/9UlpZeiZUZcLQjJ6UR/fsAgI2DG0xomSGOjFNmZStw0vikAk9sXxeBQVQH1Nkq/G6ncD0xTO4nskKQNmkW+k5x+K04GEjEds2SVZwjo+4FpkAQYRT2Maf9Y8hihPjeMojrCuOBeQzKwxlmMclol2MHbo71Yaf3rW7JNlU3kbsvmGJL3Ox1JNitbHK9bTfdN+NQ89ufHkqelN1rYKV9Rvso/aC/6v1gX9mVLe7I1TdrSj3ChnaL391aEbx2N6uw/S/79BfKw/2Y7/qFBRzBk5f4F0X1dSXdRhY73didKr+mGWo+2CaLzs8n+u2LRRpN8eE/rItP35uTOXeHLXj3/PfH5L59NoZTRGf+MXs5oIWJEfm/HX8rHBLNn4EfHSOBofJPW2irS2aK5+qUI0uWj0L9Hwq9/xgNMJBMGacfcAajYuUIt0MhLFCrX0S4MhQTuBSY3A67bQfC/6NBTdFv+H8oQUbcLzS29JUDtQiknWQEK3eb6ChaAkq0EVQz0XI49Ya9ah0p1Xo9bMizCMd9XPVycWfQZ6yi8H76MfYeD0u3gyGPU3tFOPD8CUqht8Ls8JTLuBX/AZ85P6es+eSznfzEPnk3x+e11nPbCJmnuEUzLi7WTTZz5T3G2rBj9PQOS74eZPrMMdp5h5sDtei+rTK1gWX2DdnXus8QZq2iJXbezUlcA0nbCcJUIPn77xODv2kHjfLjb95pGe74qPdJJnVZB/osHlrEwMLJ3tzj0stlk1tmsOCaS12mCyhC6vC/I1ji97MKHm0jdA8c1aaSOExDTHECbWhjbn+PfOZYjHYw4ASN9VJs3zf2nRwh7a8fIw/dRKmE1K4I1Qidu8J3svlCi97q1ObSbVtDcMKVHpXjqozocpu4/RPlMxCpeA+R5j+1i9r0wXzH7WZIzM5cukBdCy90vG6c/sKbUE1q/PdgGDBZrslXy5mJSr/QTHFNS9ZDfqOYBclJx7IczIM28trkvQtvZOVqmNBF5aHpmOTgp3wIcEdH2OpMj9LPASvNC5Z2CsUdpz9YBGPbMT1ec3PasICsSt8rxv2/K40/KrJf2dFtYtmCPDVKh0gVk7hS9/a2FJUwjKFiGLmALbDDn0aKGipSZR7uYF/pOYztWPIquHWB3+lz9IDhYFBW8bWNN3IK0rv78FDkKcnJ2Asx1clDPz280eJ6MeP3WFxE+SUVV0tFsUlS1R+Ltx42Hio8ULqvcnPe8jRJrJg6tivtwbWZ2+tDZ/JTIo7kDFS029gBqtAh+iVtLYgJQYScJE3+SlAshFJVIQbtBJtQddfm/loLUyXvsdlVUx/NEmh9WSCDPMJNtDCejMFJnrlxyrp1Qu+VBkzkHI1MMJhCfqe+ariQCwPgQi4xwGRwmA17sE0k8AQhI0c5BLTuWVIBZ+PRYcbvaqaJvOr4a0VFj+6WGeCkjSe50kYEI5nIfaOBFhY313EW0x6f9PaoHR2RywIFJ7xIqKs8mtBT6rTjoIwisIrnUNLCq+qeZYoTJFF8puPPKrbG4gSdUM7El6dpdvsdddwo2faJu21IFuF8i7FMqfpvTx2TKV4AUTkCMyUqtsZihaYp2gWmdMK+o2BnY5MPV6A0cEW7SHwPJd4fJVAUoiiaophGxAJlBj9C82hMs3Iqvb2/OWkxjFVbkEQ5xTJQvLIeuRQUTt28SXFbR6825D83SeLq2U8H4jt6l5xE3+LdngEaAgd3r4ftFEY0FzMFD8smyqUFEt1WtKWiVixwjMHVE7CAdxd6CJ/eRllWkuKYtUIiTlLlTHxxijOzfFPvzHeENR8vcgKDtxd2xZud4Iyx6z7NZ2CNGJWkhyO5jV513KJbRJ6Sa/ZUD1R4yfuJ8j0RL0xAP6lW8T4W62OSFD3XQ94s/Cecgha/yHEycW3y/LEsQqyPSSimJ6NSySAwxT4yXgNS9uKOu9QQj+rRXCggdTKfZJJyKZcQyQfQFAuz+6tvyq+3fyW0y1/b3evD8xorwRs8MOAJz/6liUHe5EngaW6OERKR8dJteaz9n1qOTqKrEP+PSoW5ta/EphcKeTI7BDQLFsJsNBqAxefvo/KpIpqt73K5SC85tLHubfnOFCKjZKwI1JasWofarQJGF6SS2ow2iz5cypKzFuzFSj5KPGalCulsNgfQbYLQY0YdcHtRokiQhiHTmceImCFtyFauPuyZLTrXkksVE2QckL8+26q1oEbg3dIOWduoc8yVfgf1YxE8Vrl6cPJrMLSyUIkMlja9r1AN9bjV294tSY2NhsKj24xvMw+KedFNq7fYs7+V3KSr6Jh4RRNRR1WRyptLa5RqR5LDqVIWYE3mWHAbZgeuzA4rWHLmnPH6bXgcy+kylVcWdosZkkQcf/kV67Bp2FiqlGupl/LkcGw0PAZQaQ/mxBw4kJuhimBBTLfxfaAxz5hrZOsy4X413WzhVl2bbU29RWOBy5PoTvdgXoN9wsMd98hnGuq3lyDAGvBpDeOr0rtewtzjZFclZZucin0d4BD63w7DA1yhD5PyLjAps0nigkJQsXZFPAoBFkC6lOgXc63mMFLlUj7AtV3ns8Kid1LKbBOp9TCH7RwxCI6UE4XEUTkLO6mNLKHNy4e7y1c3W7YNcNfaP6pvJ1Z2u2lSTgR1bqKgr/z1poEUNKqzAJK4U7+jbBHAt+oPwF4DOLzexd5fIucuGPBZuodv4It6LE+pkKgdDNoZ96VRdkgJOqu+R+u3KLy5nrhpqU4TNvbPAmxPJjq/g2SR2P7tXQVXOsx/DerJwxxffIMU9heAh96DbsSW1QO8HBcu39sqFMdMFdOyt6TPW9ZR4xkdwH5nzspjFS5nTNHL/xFutHS9Sd3eVVX+puU/idU7i5P8fzPRO//XxpcXy1nOwwEIi4zGlJQzD0rREiTLlKNAsQZuQZSEmr4hI1755If/w0AtqK+ptjrp7iwTTbXeqKxZG0oa9h1OJ898y6+xl+NKlaseTu2nvhN9pIiHN5KxGtm4j/+0Djz9wxnRoOOawCQmPfxY8+aUjmda5k+AECvscMWXFugw4CMHxaxDOqEfrNGuXnuD1bv9llzbdd2P8z9mFu+0RZNLeS2uKPWwqH4Vda1fW2uqvZH22/h0z/dJH/4cz/+oh99rr+Z1fNCef3w/vAZb0/rXv+m19pN9sX9SBRMz8jTC2JNILXJmeZYP+Vxc00c36nvcjnKK1leuxSodd7g3O9rP/YPHmz0OuE47DKRoMeKHoUQbkxn3eck4X83mWo6o9bLXbfvdssy0ZIZpT4P4H8L7No0/x04a5L4/nUJuHiazgHKYjoBG/ixqW0IlgqBYTRxuPqFRFTPVw62RlUsr3+PU/wQ0dOLVmquw2mxhi9NSjC5FF2khjuo8K9VR9uulGBK5Ep46fT7SFikDRSK5FWO8jUliNvHD38okMbKkLRFSvfEQoVHDIEzTj1GtQRdNTtJOmrr8KdlG04Wyo7vDJTltmosPZF3buHHokOC1zjIDjxYodBz8c2ZLAGxfO1DeC/feo3wRekRcmqWsCrgqCaHmM4J8fd1tsl73mRtqQbsBo4beMzLRz1hBQY0HMNrGXHmxm9Oy7QaaivcsQP29cBHcxCS+QiegXagINWMiZG82Fvj8hsh91tCwsU1R3U0DWXcwfKeWq9uDcd83hz4yU+gPhgndlX4/RVHQlUjabXXfxE1hhoWfpRScnEVDwDPl/+agf8RuZwI3IbuFUNVYP+hOakd5LDYZ12fck36MtYGjemEyeRmgsNxycqykZNXp1rrKT41pQ0K69MtVWsvibelIXbMobGcYZ9EkNur/MlxTYEhXmbScDJ5uX8agfl/W0g4884fxdx57RivriXlq8pTb0PiLmJD/QY4YCySem/4NuDcF0Vfcf/LF7N1kO/pI2978Kn43qtBqDmytanmdoXKHrP85Ob2lCSBO2jRsR5iMZE+1Xsx9vvwl81hWybBYCAud60+GVGrltq5gf2WQzp1FzmlRCKsZq1yHaN7VL4CT/3TL9QYdYVn8slUXbc+fo2eGIPcVqxNcaW4+LqZ4UlLlk2SdvIkOcsUIGI89+Q8eLsD5YL2O24cg/BXqCDOo88EHPBKT59NsqzQrHt+/a93V47XHtPZcue4YrWT6ltSy7NWKm26JVVW8urBu1WY2Yq547Vzp8V/H4CXPivcS0ect90ENawNH3TzpfWIk+Lfwld3C/AThVE7pJ5w+crZ/W6tr0++hv9f8qSeuHq7JI/S8AHr2FyoELFoUPgO35wfTi0eGw+tAx1sr2jMY/7M21yaMDl6vHHFn7uf0qssGNUZPFLBOIz3DXZkCjZcLN0uKgvDjL8trq5i0MQXhx/HsFVGSzBB7Om3ydJf83s2TyqZcGfuJosz/uDr0hA0OdrCNcLorC4mleQyw61U5s/ik8MhAthTD600grTsSLqemLeBKmmYRPSuEwgn/UWNSrWANuAvcvVcODbzMmLflfGntTR1gT6okPvHKQhA782RI/xLMmuV3dndeoEMu4ClgHUIPFEjH5szv3zZf6TRkdPcJH4/+96Geeb+jT2Te2sonVVliFxd/8ZJB088N6sVhG+haiuhJEApXdNB3OqFTUciIZfj4arN/dP7zH2fqevT7pUZ4jZTMTbj3FkVJL/c7Q5IPNgAvQM9eOvTFBcY8zplqH387WFpCYtIa+U3U2njhT8DTrzUV3ZJcDT+7zwld1CKTiHJSul8BgHdXvk9AwrQzrGrKJcynYzO7kYj/emN7JDD9nwZSmJzUNFUwbdzgTRICirfv1vl1N6+SemsI89JVui7ra4fzXkk1G0fN7Dam6Zweox95dxDxoRZ0T/mDBaaRJBFuhnKxd7i90fRQbWNaTtCen1/l46QL0eZ/fupP0Yo3Qq5t/QzDOrd4edXAV5fwdsuttxv7Xf45uLHQ8LMpVH6NXa4RjScbQrSVIjt5HMOi34GqFFQ5KijN+vWOFkoj6NBNAuEUbr+v8Gc0IKEKlimyRFW/0FZ5pjBgIWqNnQ9OKiYvNMmzLrzhIIxJVtQXMmQilW9Fpj2CcDRaugr5GlIk7GpYMBxOXldWAYuJXNHlLXKNWA5P/6j1Qr/kGz5vaq9xLWcP+ub83fUk+I7rfX3ANzw+bs4IkhHNU+r8NmmSWHIBcxiucdpogto2HINL9VQWzvgxcTZa1hFIFcUPG9V+x5h10SuN4Y/nfYq34vrtvEeH6eEst/oR5gIGH4hWWnnVz1LC7jvUA93EyJcB34oyEv9+CGSf+UkgIM39IkRnuMY3/lqqjhugiVV9O2r8rDSDjqrc5DdF95oWUBEgGmso2PApeIYR70oYohwVtCbJm7wJ9VVQOcbgHcbIt/Cq4LbmiX9YAh5rAHnmoCs+TBjwoBb2GU/zcBEZKGVK4rqK9jPJEOnGVpiVVYPlNspQgTd6OGE9RIsYEvQqQ9GToIME2SF0PrYCY9uSGko9chCdAUn1wGF5CID7FuQqUgfLXMC5QuU6xoXKNtlHNI0HwtEmvJbmEcWCgR04NX02KQdMc8GrfuGwUph8A+HeIpUfLT57FIkHzi2Xo1WS0feR/xH/M1yirLg7kIjL9Q95Ky2LFJbJOfKWU0MB/wCu3BoduNIXXfRru9qaBir++tNE3lPQ/72HWVkZQ8ZpGO9yhmj1cxD+goapRhAMlBJMDlGZ45DQxU6+Tl2Nat9/Crx8EKePTUwIy+nlSrpQ/KxW8wbMugngLy2HCn+r3W1guTtPZlcqqwpjQewGCQK5bYMsnKoMtH2bKpXRg8m5Jh4hulDWuq6wurbvdaZG03k/WcYu8rSP9Me07PVDMWEh8VJJTLymYB+h2K91fy+0WlMN8SIk8STX6eNUbgn+gcsId4emb0UOWCut5knJ/giYVF/f0nK8qYq/CtKsiRhrqY23QLF8l2Xnh1EuftY+1AynqKyUX/9HjyF+3qntCO/m6tOeHPERH3pONv7OcI72dh6tdThHFbf+Qs8Pntq7wOAZtnSiBljVgU2rlTOm2fDzBgA/N/oZAWkCNSD7SKAzR7CTKbIdaPSyLD6mqSwJyLBNRAxR4Pe7pVeAU3DF8qkc29w3cUO8/LHuoT7LPZ1nLOKySxXNpHOprfo0jGkwtjv0d3kD7kwrXX/aXj2pWu799PRR7Sa+0ltUnedcj5qcNy22PbeFp1g3r31SRT4asnKrINJWKx9nMHTcbPBziwrmj+R/asxSaV9ht+fDHSnJim0xRLwLYhfWtk0eBEl7INNFjbhz0cFanZWa2RnihEFO82ZeAg2u2kndfaiVJN8P03yRgrXzsGwePpzP0jl/EtwjM/B8jU25z+QvGRi84DocaQZhu5+isAmclr62dN5TOY00QN2IBDesAFfxsRA3e97YLsYTh9qJfgcEW097FED9DlQ7UOgEuNM06dpAr67dHsVo+KLX0GE3sGZSU4jPUbLluPif4LOMGsbckRBLsMtpV8nhVip2DIteFwCEUE0Sdp7MJltTQDQSkBFjdFPWupRUt+OvK4XooWJ1lVQ9XZaerUxfqFqvtec192og9FJzJzmlX3QzcTtcX0iQqtNl6RyNdBMtdCszJ2aZA0queeROqJE7qbnp/f6nn/dCbsBB9Fve0u94Rx9xRB/1lf7Gt4n3fugrjJgTdROBilnm6LbZ5hySo7vnrnvnrUcXrZdVXtlYFBIc/QAQIUOjPgCtO7lr5V1HpmkMNOZdSDSgzv9QUgBskcGpL5ViXGCmkwAABc8w+GWlfC5II9/7ifl/j4wWi/zwVokl+xfyfoSFKFn2M8Q32fgrbHZy5ad3dHLTZ2RwpisAFiwjoEEMGt1BLDq9QRwG4SAek2iQgEV/kIhNPEjCYTBIxiX5pVmLDkNGf+KCAvBowX8D4Xs0eK5K570DfyoCADnAPBbiz8WtV4pHQDf4pfJE2YlNl1vyLQBCBGuAKS62AKCU7LlpxstkzNcufe1W3hSubRZY7hltP00nkrHmFoDZ/XKQGzAYOW20oUOm2GKxUFCxFBCUBDaFSWDKssC9PjYLSYLJyiQoZ5MQxRiDmelWktWC2M4AtRJWZJRhl4JDxWciOxJA+C+NnMQWr3j9BOdWsXc7SRJmuYzvrSH0f5eVTr4e8F/CRbhNpjWJoD2qWG+cZQGqbBOvBv9sUyOs0sqmVbGer67ut1r1/wMj2YXty9Ksa3wpzeGSWNaz4ZQgotZb3PX27e5G0/Gi+frM3dik8qumXrj27eRGcLP5bAa5WHsMUtMXa0sqBQCcEwvR8+2w0xLGBy9W20rpMxWMQ/TeNH1z97SvskyzCfQtM9ZETSEljqybc1GuJU3yZ/ivB08S+vRMYdokegnEaZ8HrUVT/iix/OrujJx3O8/esoLmSnUJQyZsdYebiE6ywWatEnCrc0ZxKYh8lohr5lXK7Owk1TAlCkwNzLrrtqVyYWrToRRIkW/USXqmZDWVnlmZy3E1F0NxyDs+AHg3ZOCE98JkTWSC09HzDhdkkxrczm46Na44SU+WhrHJUm3LtvtzJ+9V5+SWR+tBIV960/R4bN6Qq5fq/CvT/jeSf6Ki4eAzYvKjuT8i48aTjwBKs4WKp5IoRba5yi1Uo9ZiLk0aXddFt4wY9c5H4374acp0eEiEJKgNOXIVaKyJllopU+EsQ403ySznmO8851tokcVWuNKFV+Mnybh8EB9UVBANDcLBQcTHh2HEiA4TJrBMmcKRkqKTkaFz44bCkycqHz4IeTQ+Igbf3xdR/IBEBVEiZCkQZaNl7lAybe0IQVWLtsWs18IqvbMp/94SIeguwnYLhhFYRqF7B91HBMaHydBimQKW6Y0dPquICOiRBJy0b8Dm7kA9AngMnvAj4kIQbTVLNkQ3hbCaJaxChV58FkkmVRbCaI5wmy86FQoxRYJPcW5UWFErkRW5ItqFL4xJ1FX0TjUiKnTCt7SCgAECocACAwsWCAgEAsEAwQDBgAUHHqbxpQBp+URls5NeSZAgPSC6jUllgTPOggMfDhxIcMZJkNBCGyoMqAggQII1zoF4Xyv5tNAyr6soERRjinOfkhKr8E6fU5goVMfuGS223d/SRauQS3eflqu04POkhduLCrmYENG5jyn5fAYNFjhlf4A1e1mjEm3nILn2hQzZ+a/vOOKoTx3zmc994ctfyJAh44rX+X2HHL3zR95FX+g+sADtG6l7eqJX+lDv9dH0F/pOv4z+2kMFYM1rn86Bag6aB4BamRc1gQS3ACyMFQDu+DW2HgFjY432rqTJ4OstbAxNuq5t60/Ys+qOKXCE1LLRfkR7uq701mFb65tjX9Ogltz6qPIFecnRABcjvtc+HGcI9pc9AGrdppzndJnpQUpaVaOLnC7x2pggaaSeMhw9paCaAeLfB+ouURIB1rHR6N8b7T4q+3yNcxPzgzQKzIkTrH+30n73fPWVX2Oq98Ai6NxcNABa6GOAGeZ44stsooknxw/fWcDRzT5O8JFvaSJLuJZyW8H2h+lnwNHFR13AUiQAiNu2rJxw7BDfu3RoGR5sF21umw9MAIR7gGr87aEiPAEYECdsoVu05PAGJ3aFnACEDwFe3h++pVdneRgSPnI8tfVmhCBM21JnhO8OvwP5PfrXBigx5IM3W78oJiLsHXjSMyhPnRMJAlsQzHdtHGAXzDUsxEpRomlJILGta2qpDZYqFFgSKNISE0s5rYnJs/b6sHnLj8iFNCMcvVP7kpJ+04Z3Y42T+0euHIszG25GnJyqyzoL22hckkPexLnlm4pHqSIPZBlNbUJlV8CxuFN8aerjy/3IdMdLQkVo4jrnPSesi6spQfXU+r6IwFoPn2tLcxyDeNdtzbdKaWtXqkE1taoMTTH3MCNFPdppTatw9btVVaLusG+J0SVuljJYilPhq6MphvE5kaD0JsMOTIfU5bTYPIqkzPbUqL2ocpUhghSCTw2oJzvDCzYUOcSkkFoMUdwbSJ7VEbG6bKPeMZSJJmUMMogbbuig4yW7GWGE4lRcyyOxurINQdXQaeyUS/Mgm5ItHOU7wDEf2+ffwr276eUiJFM2roxmQ2A4qoqlJzcZmhjcz8YFokiiWySGMtzq2h3GLTaPe1mP0GMzm9E2G7D9XEAZyFQLATYQFm2KEAwC8x1IJDnHnT5bFHpvmFg6GlJQa7VhwAy/vugeWGCCUuGKlVrpylHBdIkqVa+lO60QVJ9CARBtHsCsZfR3tSeyDy9aFUOcRw7m3JpEbg8ExHyEZTkQMdjMFY1dgXFV2Pc7kMdWNDk9SojlCnCNEytYEdMZ9carQO8LLALjM31CBrj4ESRxZFT2CJbO23R5yFdBCles1Eo/y5lVoBJVql5LP7VCugtu9cIuomjGmxOcZgX32U8yfWSeYOV5rz8HgFwOHGGHebOVuEynv8OILTeRkuUp08iHVYRZZu557pPfvmfZwO//GLPjTilKinzlFvHjlPBsc/e98NnUWJA8tqRrOSBHlpOZszFnsMnv6RTBwoSMh2ip5lposYC4MoHjigdeGjedFkaHbEzZ8xQoRpp5KiwRlFAh6rrqoVe++N8bA8ZnzTjwEiRWOn4+t1RIUpWk55pHXvvqD5XHkGzMOfIWLE6G+ao0CUupkfVdN+KNb2aAYSUbC3I+QsTLVKjaMhFpdYqBGx5763sAGGl+3JKTWWZLkKVIjWZRGQ3q5W3+iXd+BAmDTzZWFHyFUpljgVotYrKaNCO3jHrvZwgYj7Kx5sxPmETZitVZjpLTohu77akPJsIAQ1Q2Nlz4C6eWo0Q9D1pem2HijjEak2GBUev/spSrABGS5CrVwItR0GGauuuZj35FZsX07TvPxd6F4B/tbl8cJfhnTn1xjOhfh9AWx9N8Sl0BEv079aGoUY9tLprMc8Qd4oEuYqpuHv85dEMhIoL/DsuuUBH9Lw2bAkv/hHBt6GFZ6Mna0NMtoWddoecHQi9OhF5eCLW6lvZlPRWfBHsH/2j8b7A7/ofFxy0p+goQYBMRItA0UJb71xzg4hUEeojf9K9KgEpBysAoB6sCnErwqiCoLkSAfYG1DS/PBx3cP7N/PptmtJwShGXclT7iOq0CRVSWowav9X+33+haXJ+ruoUrJJRyrHyg6xUY7sc6ck1muWyVlJJGoTFYcT5+AWERUTFXWuaVHqCDi5uH193ydSoqKauoqnWjMcYaZ4IqE1UbapjhRupknsmy5Jtiqmmmm2Gmtx3z+Xii9rp3fezNMQV/p1bZr75OC1Hg//6JhMjwoY+84TXvNbd5FTS/wopaUHEllZ6kn3IKlysPkgkhYBMSMWXGgiVrMg4cKThz4cqNn2ChIiRSS5IsQ55CVRq8JCiE47hsyAPPvfDKG+O++Oq7X6bNqEJ5ijRXqqPuKj1rzwtecsDLDnvFq4OYB+q+DxxR47jf/O4PfzrhZDrxMkhSTHHFl5CqxNQllVxKqTX23L9OeRMFWZxxmGQsbuWfCuaYq0Slei/yiGClFdVhCsvANQ+MeWvcZABWhXR56inWSDOttNVBhW566W+IkcaDbJZBWCOLsFYOmVwVzgLFWV9QXPQDxVV/UNwMAJMpi1pyHgaW7mmQ7mWw7m1IwsfZWS8CJz6UdMzIjQCbTlsG9LHk3+fcKqgfMt12DPVAj9jwwC55IwO7FYwO7FE0NrBXSWpgn7J0ba+KDOipFysCFkAxlEAplEE5LKysAOW+T1y/5ag+4lP9js/yD3zRwMxqjAMg5zSczCvIkWOMmqP5poXpFVoBo9Uy7B7luQeeXIJJ/jxmAz3X/IjYgpDplU2txJNscwhstsUDhE2kpkKYsrpgoUshvNi/KB9L7Yu0i7+G7Q/LKqHgnmkUrzcc24zYYHg0YTVjhc7kxPYNLtIJZv1/6je/4LEJVqxN3IXxmAMxkBFu3sqYXZmf3wbH1QvFeMIuoBYOna/wa8TKcCjY9BixajNkrrjALXpNsdvWlLhjTaltfGHU4Wx1TwHBo2a71+ydn2a3m+6O68KlyAUWW2p5WcBoM1R9xOsAiFz0IBfIudOtnz/UdDYZts5hi+2tPt2Z/SBlYZL/j4HMOtkLbL3EWEUBANitSVyUEoY0jO2drkzG9llJzZ7ryaotR2V2diNvOEap2GVF7lbZpY+Ww8d3q5mTDcc9yiTo5LajRk2+noLU/mkIx1/3tsqRndCJiuvBIC3yUtOlbSaUuxVnm+1XUbfkQKf73vaWI97xwTG+Z4c39j3zsac1th66eFju2RE5H8j83i1swgarXfcGWyz5vRv3PSZ9z4mStyA8pE6Hx77d7TjBvhGHB8CBK+i7mQnfIx0uMKjdZ5hVNERTOB+0xJW6eS77bnvNMrJy8n106AY1FK/2TzK5e879ZNBvw+yHlhyyl67V8TZXRJcb4tXQqNr/nZne5p4plHvumQG/2OOmCexWKBsytpoGnws1WhSID5Cms8DImXf3wQpujUcVjo1RIJlNyHvVjZbZrmYpYmnpVgAI1oeHs5BFAtOrt4GZLuzTPzS66435iAsF/cSvJPH3MoLMquKTr8A6+4uh+l0CpE51OgAYxpYLlY6tfC73QL3c+D+N8HitjaWlTnqodLa1rjKk7Gu+83O6OZXQ2tSMJj0ZLIaIoWCYYzaOs3kqo49zAqPxisvVklzM5e/lDwdYhQUI9L9r71+XAeegABy8UIU6CKCCictxQ8KnOIBZTGAVOyjit/iGEA000UKrtNAO3SAGccULSZE/OS1n1FklK1N11RV1XbuYP4KgCrZnbHVs9bozCUNkopEuicmdPCmRkmgGADFbLna0TRud9TbI8Kw+5ld96ad4rznqwQBMZUwy/fJW8+tB+vUL27RmkRYHgv4T9EFQ0MuavkGD32uMvh7eG5gaMjtk96teDLkaciOk9rX/D35aQ/NGvubpiNQIW8StwpzXHPx5XIV3SnQt8f9+ekv/a0bNODNVASuo/XIgWINM2/1ZP6gpf97qOg7/UfaHx59fXl9CYaa6M/djm44bufO5Q7ne/428aM8uoI4HW61+9lm1frar+juzcbQurH7Z/Ld5s3mDOf7pby/OD6mNee7BM870p6lPzU/XPt38dPLT0U9H2ICxCs7RzmFO3+N0F6PdbMCTfI53Hq62efeyj7eO1Nk1Me/1pjasf84IHSxbBuQBAL5XXXqtJSsnZTh3xdQf9ohGDASm5XLNxmJkIwfGgVmVM/CojoLm13fcxot3I5iuIN13E2a64e3JAqZBuWiMxuQzfsJIhl+Xx/hMyERO9MS+HAvmfDoOJy8mSbye0O5yHp71F8+4OIheLL988p2fwdPImeUeyZ9x/3vVyUIc7+8HknPcVg1olOJH9X/vPwvyuIMccssx96wzamMHzI1VsB8zaUdHUnpQHNONGTpQm20fiO02OVOOIMLAoyDQoo1Jn4AeIQUHjuS4QkQKEy5WxLyIUWSe+QrVSYjNES2YgidTWeYuGXTZS2Oeee6c3wHwvz9hwcw7OzFQX12FirSWAKWQHLXEAav02eCUzc7aoh/Dadudx3OB2BUiQwxcpWuAhXvM3GHlAUv32XnC1mOu3nL2mos3nDxl7xUPGt4+m+ULP9/4+srfd4EmBPslyKTZpkSHQFQQxIUD6sggOQpISgukRgWZMcmIQXp08uKRmw45cSnLiOIMKEiP0gxZkJiSJFRmRn0nafBC52jqQpZ2ATgHnfSIubu8fGLspqxY5Mdvc/FKJaJKli0V2/O90Mt58ubquZ7N3Yu9wgkPVWdBRaZUZY7ENY2dZlFnYsRMG9EQPSqySepgtpm6xYTp7iquhBIvdz9WkotPlbqIPAvIP/vsqqy2quqqrr4nauiRylvoCWf+8ncQITiDAFVCeDjldBiERQREBGnR4B0fetd7XvNRWogCr3vbr9738WmMun8jko9E7qlv2qLfrzs2heb2zWAwbwEAPPvr9IOupsJlhJI5R2UIYy0CrT4p3lNf1H+bcdMw/TpHR2xyrd8A2sXW97POG+1ufvN3cefOcAZf/Sx3no4m6ssPdusun4AMLIxDu4gd4Ft/P+rLRK1G7zkmQl3/a9AhEahAJLavssaKZZazwmzE/TIiMZAD9wo+Iy/wvtNgl/4C7fFgy+/YPLHXsDZroAubuVw4JaRGYn06sA98vP8c4qoPZxtbb/UneKXorhzOe9VHN+OX6xzd+DDVx5k9qg2sH9R2ycnFYnRg8ijOMG3jL9qpNIT6ReWJhfPkMHteSGd5Hd0fR/jMdw+IgyiYhNa3L0WqVr/HWsUVi0UKqIz6Ez43+FaxxvkplK5wc53BbAdgvhAKyCTmF4qbDXOyMMK99ZFG0oO7CQn/KsUV8K6Z//vOF2kgh4KRu8CVRYPS6ggHJ193LBBYs6gbCdPJr+BiwKWUkfPSG4Q+HAHccwgXjNS+e7wXE5yRBzPXLxwZFvT+Eof02VGBmm0joAJTzs1aGzKvC7Pkvp88+Pnya68vxiMpH3KMeRr/yU7djj/xAFfsNBdvSbO/MuNVGmwZeMncja1/y2Uh23e8qAYOLx+3NauGLZisUCzwFKgxo38254V0NmNWHmbn4mEDteAKFmALzhnFNiMwldoVbmB35wQn4DRchWPQj3YyXHwOULxjGwSH4jtgcbwTumD7Z0mPD/a2JnAe0vdUPN6IUp8DzzJM+qyMUcu5r8FDcvTNCanlYubAEVgYHV0/fYFZJ5GtEW3qrcS1HSpgI/fxBpEVQi1z2L/AvdKtHrdCnXWf4VKBsx0TjeugMZRtV92W7SZ9oK7krW1wgERyYyTnOd4Tj4hndxXZrvQKPG3U3lbZNmuPHcIOfRjX2VU2P811MQGIpxfOck5wqhoD3NbAnZwj92YJCMGuJbb2vXUBZovAcDa4nu+aVs2Rq0Rdq4RptMovJAL10+YqH99+yXjCLgE716H1MsG9FMZgZ/9NbNaTPUJPd117iuNiOA/3Rj9767mTmX9zjbe2sHOCV2StvMBeXhUALWPrcuCPie4y4C7mJohEVXbtUbIbtqUMuzMTM65HHu6WbSDTM8f/fu3t6Q68xEng1EWShw+vZ8TwBW3nXfQsJ9S2SXDOCbWek4OvSgBIxV4DGElZ7+lp0iqLl0Al8KEXkkEOOJKtGcRaSk/vxXshrA8MWAyHjurw3KgAAqO8GGCExZKDWNoogzgG+Ax/qnWBASuSxnCZABpEqCIGMWylDGIJrBrE8bGL4RX/MJse4rUY20AAmOFoEAJydADFDQATtwRs3BFwcc9BPGAXOEgA3JKA6Bb//2tSb0zKiN+m/uen19fPxtZW5hqQKwpzisUDbOK7IBOb2ds52pn/LwxbBciSq1iJyGel2UrNlWYBOzZs2ZJxFfNzTiyUaZ5zWKvp1rdODLGwgL4k5itoDMoC3isrFMpRbGCPgsmmbsaeOeZn1DxiLtT8O1ZiLHdj4mDevXeJ6p7bHdkd2B2AoWDBaLlikaosVSBTVoKYrkMlXqzgvGme9JyyGNOHN5PgLAAAAA==") format("woff2");}
@font-face{font-family:"Geist";font-style:normal;font-weight:500;font-display:swap;src:url("data:font/woff2;base64,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") format("woff2");}
@font-face{font-family:"Geist";font-style:normal;font-weight:600;font-display:swap;src:url("data:font/woff2;base64,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") format("woff2");}



/* Design tokens — single source of truth for the whole app (Overview, Pages,
   Links, SEO, Previews, Staging, Intentional, History, Newsletter signups
   and page-detail all read from here, no loose colours/sizes/radii
   elsewhere). Light is the default; dark mirrors the previous theme.

   The governing rule for colour: neutral is the resting state, and colour is
   only spent where it carries information somebody has to act on. "Nothing is
   wrong" is the most common state in this app, so it is the quietest — green
   survives only inside word diffs, where it distinguishes added from removed
   text and therefore earns its ink.

   This file was extracted from styles.css's original :root/[data-theme=dark]
   blocks as-is (same values, same names) rather than rebuilt from scratch:
   it was already a real, documented, AA-checked, Gitterdone-modelled token
   system in active use across the whole app except page-detail — moving it
   here (and finally applying it to page-detail too) is the actual fix, not
   a rename. The --sp-* / --fs-* scales below are already a consistent 4px-
   family/type scale; they are not renumbered to a different suggested scale
   because doing so would be pure cosmetic churn risking regressions across
   every view that already uses them correctly. */
:root {
  --bg-main: #f7f7f5;
  --bg-second: #ffffff;
  --bg-third: #eceef2;
  --bg-muted: #dfe2e8;
  --sidebar-bg: #f0f0ed;
  --text-main: #101115;
  --text-second: #5a5f6a;
  --text-faint: #8a8f99;
  --text-on-solid: #ffffff;

  /* Gitterdone accent (2026-10-05 unification): the one hue spent on
     interactive elements only — primary buttons, focus ring, --accent-hover
     on press/hover — never on a state. See --status-critical/-warning/-good
     below for the colours that *do* carry a judgement. */
  --accent: #f7bd15;
  --accent-hover: #e27530;
  --text-on-accent: #1b1b1a;

  /* Not a severity: this is the colour of a link, and nothing else.
     Re-verified 2026-10-05 against every real Ojo surface a link can sit on
     (not just white/Gitterdone's own background): 5.43:1 on --bg-second,
     5.06:1 on --bg-main, 4.67:1 on --bg-third — all clear 4.5:1 as-is, no
     darkening needed. --link-icon is the same hue's 3:1 (graphics-only)
     counterpart for dots/chips/icons, where regular --link would be
     needlessly dark. */
  --link: #1f6fb2;
  --link-icon: #2b8c8c;

  /* Generic 1px border colour used by every card/input/chip/table row. Same
     value as --bg-third (the app never had a second, competing border hue),
     named separately so components can say "border" instead of reaching for
     a background token when what they mean is a hairline. */
  --border: #e7e7e4;

  /* ---- Status / data colour system (2026-09-30 redesign) ----
     Six states an item can be in — critical (act now), warning (worth a
     look), good (confirmed fine), neutral (marked intentional), empty (no
     data / clean, no judgement implied) — plus two tokens for colour that
     carries a quantity, not a judgement: --data (one flat hue for every
     category/defect-type bar, waffle cell, KPI icon — there is no inherent
     "ranking" between e.g. "broken links" and "heading order", so unlike the
     old --cat-0..4 ramp they no longer each get their own hue) and
     --data-soft (its track/area tint). --band-1/2/3 are the three flat,
     colour-free steps used for qualitative background bands (bullet-graph
     thirds, small-multiples row backgrounds) — never a status signal
     themselves, just "zones" a status mark sits on top of.
     Light/dark get their own independently-tuned values throughout (not
     inversions of each other) because a hue that clears AA on a white card
     rarely also clears it on a near-black one at the same raw value. */
  /* 2026-10-05: Gitterdone's actual palette replaces this table's hues
     (previous values were Ojo-only, AA-tuned from scratch). Same fill/text
     split as before — only the colour family changed, not the architecture:
     --status-critical/-warning/-good stay the lighter "fills, icons, dots,
     chart marks, soft-background source" tier (only needs 3:1); the paired
     *-text token is a same-hue darkened variant for small body text/numerals
     (needs 4.5:1). --critical-solid is a third tier used only for solid
     button fills with white text on top (danger buttons) — Gitterdone's
     critical hue itself (#de594f) is too light for that (3.72:1 with white),
     so the brief's own darker "solid fill" value is kept separate from the
     dot/icon tier instead of reusing it there. */
  --status-critical: #de594f; /* dots, icons, chart marks, soft-bg source */
  --status-critical-text: #cd3024; /* small text/numerals, e.g. word-diff del */
  --critical-solid: #d43a2e; /* solid danger-button fill, white text: 4.81:1 */
  --critical-solid-hover: #bc3226; /* hover of that fill: 5.80:1 with white */
  --status-warning: #cba51b;
  --status-warning-text: #8a6200; /* unchanged: still clears 5.11:1+ with the new fill */
  --status-good: #a7be5a;
  --status-good-hover: #8fae27;
  /* A7BE5A itself only clears 2.07:1 as text on a light card, so this stays
     a darker, same-hue (olive) variant rather than the raw brief value —
     same reasoning tokens.css already applied to warning/good before this
     redesign, just carried forward onto the new hue. */
  --status-good-text: #587429;
  --status-neutral: #7b8190; /* marked intentional — outside this unification, Gitterdone's brief has no neutral role */
  --status-neutral-text: #6d7280;
  --status-empty: #dfe2e8; /* clean / no data — never a judgement */
  /* Gitterdone's secondary blue: category tags/chips, secondary chart
     series — one flat hue, no inherent ranking between categories. */
  --data: #6493b0;
  --data-soft: #d8e4eb; /* its own tracks/areas */
  --band-1: #eceef2;
  --band-2: #e2e5ea;
  --band-3: #d6dae1;

  /* The previous five state names stay as aliases onto the table above so
     every existing selector (60+ of them for --alert alone) repaints with
     the new values without a blanket find/replace across the whole app —
     the colours are genuinely new, only the variable names carrying them
     are unchanged. --review/--review-vivid keep the same "small AA text vs.
     large fill" split as before, now backed by --status-warning-text/
     --status-warning instead of their own hard-coded hex. */
  --alert: var(--status-critical);
  /* Unlike --review (already a text-safe alias), --alert's ~20 text-only
     consumers historically read --alert directly for colour, same as its
     fill/dot consumers. The new Gitterdone critical hue is too light to
     pass 4.5:1 as text (3.72:1 on white), so those text consumers now read
     this alias instead; --alert itself stays the fill/dot/soft-bg value. */
  --alert-text: var(--status-critical-text);
  --review: var(--status-warning-text);
  --review-vivid: var(--status-warning);
  --accepted: var(--status-neutral);
  --ok: var(--status-good);
  /* --suggestion is deliberately NOT folded into --status-neutral: the two
     have to stay visually distinct (see the comment that used to sit here),
     and the new table has no second neutral tone to offer, so this one
     keeps its own original value rather than collapsing two meanings into
     one token. */
  --suggestion: #9aa0ab;

  /* DEPRECATED, now gone — --score-gradient had zero remaining consumers
     once Section A (health/design score → bullet graph) shipped; --cat-0..4
     had its last consumer (Map's mapGroupColor(), the per-section hash
     colour) retired in Section H in favour of one neutral outline/label
     shared by every section, since a per-section hue implied a ranking
     between sections that was never real. */

  --alert-soft: color-mix(in srgb, var(--status-critical) 10%, transparent);
  --review-soft: color-mix(in srgb, var(--status-warning-text) 12%, transparent);
  --accepted-soft: color-mix(in srgb, var(--status-neutral) 12%, transparent);
  --suggestion-soft: rgba(154, 160, 171, 0.14);
  --ok-soft: color-mix(in srgb, var(--status-good) 12%, transparent);

  /* Border-strength tints: enough to read as "this container is about a
     problem" without the full-strength hue shouting from an outline. */
  --alert-line: color-mix(in srgb, var(--status-critical) 32%, transparent);
  --review-line: color-mix(in srgb, var(--status-warning-text) 30%, transparent);

  --add: #4a7c00;
  --del: #c0392b;

  /* 2026-10-05: folded into the status-good/-critical text tier instead of
     keeping its own green/red — "one hue, one role" means a delta improving
     or worsening is the same judgement as good/critical anywhere else, just
     spoken as a number instead of a dot. */
  --delta-good: var(--status-good-text);
  --delta-bad: var(--alert-text);

  --overlay: rgba(16, 17, 21, 0.45);

  /* No dedicated highlight for the active nav row in light theme yet — it
     reuses the same elevated surface as everything else, which is correct
     here since light theme has no separate reference to match. */
  --nav-highlight: var(--bg-third);

  /* One scale, four steps, rescaled 2026-10-01 to match Gitterdone's actual
     measured corners (read directly off its live card: ~7.2px, i.e.
     Tailwind's rounded-lg register) after a side-by-side check — the
     previous 12-24px scale was original to Ojo and, compared directly
     against Gitterdone, read as noticeably "bubblier" than the rest of the
     Buena product family. This is the one deliberate exception to "don't
     rebuild what already works": the old scale was internally consistent
     but wrong relative to the thing it was supposed to match.
     --radius-sm stays exactly at 6px on purpose: it is still half of the
     old 12px ceiling, so every small dot/swatch under 12px (coverage grid,
     .sw legend swatches) still clears half its own side and the browser's
     own radius-clamp still turns it into a perfect circle for free — only
     the handful of larger elements that reused --radius-sm for a modest
     rounding (bullet-track, segmented control, 40-44px buttons) get visibly
     tighter corners, which is the intended direction here, not a side
     effect to guard against. --radius-pill and bare 50% stay outside this
     scale on purpose: a pill's whole point is "always fully round the short
     axis" and a 50%-radius dot/avatar is "always a circle" — neither is a
     fixed pixel amount this scale should constrain. */
  --radius-sm: 6px;
  --radius-md: 8px;
  --radius-lg: 10px;
  --radius-xl: 12px;
  --radius-pill: 999px;

  --mono: ui-monospace, "SF Mono", "Geist Mono", Menlo, "Cascadia Mono",
    "Segoe UI Mono", Consolas, monospace;

  /* Elevation is reserved for things that actually float above the page. A card
     already separates itself with a border and a background step; a shadow on
     top of that is a third separation nobody asked for. */
  --shadow-card: none;
  --shadow-float: 0 4px 12px rgba(16, 17, 21, 0.08), 0 1px 3px rgba(16, 17, 21, 0.06);
  --shadow-pop: 0 18px 48px rgba(16, 17, 21, 0.18), 0 2px 8px rgba(16, 17, 21, 0.08);
}

[data-theme="dark"] {
  --bg-main: #101115;
  --bg-second: #181c24;
  --bg-third: #222834;
  --bg-muted: #313847;
  --sidebar-bg: var(--bg-second);
  --border: var(--bg-third);
  --text-main: #ffffff;
  --text-second: #8b8f98;
  --text-faint: #6b6f78;
  --text-on-solid: #ffffff;

  /* Same value Gitterdone (Buena's own task tracker, same design system)
     uses for its active nav row — one step lighter than --bg-third so
     "where am I" reads as its own surface, not just another elevated
     panel. */
  --nav-highlight: #2c3038;

  /* Dark theme gets its own value per the brief, not an inversion of the
     light one — re-verified 2026-10-05 against every real dark surface:
     6.41:1 on --bg-main, 5.80:1 on --bg-second, 5.02:1 on --bg-third, all
     clear 4.5:1 as-is. --link-icon reuses the same value: at these ratios it
     already clears the 4.5:1 text bar, not just the 3:1 graphics one. */
  --link: #6db7ef;
  --link-icon: #33a6a6;

  --accent: #f7bd15;
  --accent-hover: #e27530;
  --text-on-accent: #1b1b1a;

  --status-critical: #de594f;
  /* A light-on-dark colour that already clears 5:1+ against every dark
     surface (see --link above for the same pattern) — no separate darker
     weight needed here, unlike light theme. */
  --status-critical-text: var(--status-critical);
  --critical-solid: #d43a2e;
  --critical-solid-hover: #bc3226;
  --status-warning: #ffda35;
  --status-warning-text: #e3b458;
  --status-good: #a7be5a;
  --status-good-hover: #8fae27;
  /* Already clears 4.5:1 as small text on a dark card, unlike light theme —
     no separate darker weight needed here. */
  --status-good-text: var(--status-good);
  --status-neutral: #8b93a1;
  --status-neutral-text: var(--status-neutral);
  --status-empty: #2c313a;
  --data: #6493b0;
  --data-soft: #2e3f4e;
  --band-1: #23272f;
  --band-2: #2a2f38;
  --band-3: #333945;

  --alert: var(--status-critical);
  --alert-text: var(--status-critical-text);
  --review: var(--status-warning-text);
  --review-vivid: var(--status-warning);
  --accepted: var(--status-neutral);
  --ok: var(--status-good);
  --suggestion: #6b7280;

  --alert-soft: color-mix(in srgb, var(--status-critical) 16%, transparent);
  --review-soft: color-mix(in srgb, var(--status-warning-text) 14%, transparent);
  --accepted-soft: color-mix(in srgb, var(--status-neutral) 16%, transparent);
  --suggestion-soft: rgba(107, 114, 128, 0.18);
  --ok-soft: color-mix(in srgb, var(--status-good) 16%, transparent);

  --alert-line: color-mix(in srgb, var(--status-critical) 38%, transparent);
  --review-line: color-mix(in srgb, var(--status-warning-text) 34%, transparent);

  --add: #a2c52d;
  --del: #de594f;

  --delta-good: var(--status-good-text);
  --delta-bad: var(--alert-text);

  --overlay: rgba(0, 0, 0, 0.55);

  --shadow-card: none;
  --shadow-float: 0 4px 14px rgba(0, 0, 0, 0.4);
  --shadow-pop: 0 18px 48px rgba(0, 0, 0, 0.55);
}

/* Type scale. Ten steps replacing seventeen ad-hoc sizes, several of which
   differed by half a pixel and so read as accidents rather than decisions. */
:root {
  --fs-2xs: 12px;
  --fs-xs: 12px;
  --fs-sm: 13px;
  /* Body/reading text floor: 14px, so the smallest text a user actually
     reads (not decorative labels/badges) never dips below the desktop
     minimum. */
  --fs-base: 14px;
  --fs-md: 16px;
  --fs-lg: 20px;
  --fs-xl: 20px;
  --fs-2xl: 28px;
  --fs-3xl: 28px;
  /* Used once, for the health score: the single flagship number of the whole
     dashboard, a step above every KPI value it outranks. */
  --fs-4xl: 40px;

  --track-caps: 0.06em;
  --track-tight: -0.02em;
  --lh-tight: 1.25;
  --lh-normal: 1.5;

  --sp-1: 4px;
  --sp-2: 8px;
  --sp-3: 14px;
  --sp-4: 18px;
  --sp-5: 24px;
  --sp-6: 28px;
  --sp-8: 40px;
}

/* Any number that's meant to be compared at a glance against the one above
   or below it (KPI values, deltas, table counts, chart axis labels) uses
   this so digits line up in a fixed-width column instead of drifting with
   proportional spacing. */
.tabular-nums {
  font-variant-numeric: tabular-nums;
}

/* =====================================================================
   Ojo 2026 design system — "friendly and tactile".
   Palette: the logo's yellow (#F7BD15) is the one primary; status colours
   are bright and saturated so they read at a glance, each with a darker
   "lip" shade used for the pressed-3D edge on buttons and tiles.
   Only values change here: every token name above is still the API.
   ===================================================================== */
:root, [data-theme="light"] {
  --yellow: #f7bd15; --yellow-lip: #d9a000; --yellow-soft: #fff5d1; --yellow-ink: #7a5600;
  --red: #ff4b4b; --red-lip: #e03b3b; --red-soft: #ffe8e6;
  --orange: #ff9600; --orange-lip: #e08400; --orange-soft: #fff0db;
  --green: #58cc02; --green-lip: #4aa802; --green-soft: #e7f8d8;
  --blue: #1cb0f6; --blue-lip: #1899d6; --blue-soft: #ddf4ff;
  --pink: #ec5fa3;

  --bg-main: #fbfbf8;
  --bg-second: #ffffff;
  --bg-third: #f4f4f0;
  --bg-muted: #e9e9e4;
  --sidebar-bg: #ffffff;
  --border: #e8e8e3;
  --border-strong: #d9d9d2;
  --text-main: #3c3c3c;
  --text-strong: #262626;
  --text-second: #777774;
  --text-faint: #ababa6;
  --text-on-solid: #ffffff;
  --nav-highlight: var(--yellow-soft);

  --accent: var(--yellow);
  --accent-hover: #ffc933;
  --text-on-accent: #3a2a00;
  --accent-soft: var(--yellow-soft);
  --accent-glow: rgba(247, 189, 21, 0.3);
  --link: #1f6fb2;
  --link-icon: var(--blue);

  --status-critical: var(--red);
  --status-critical-text: #e03b3b;
  --critical-solid: var(--red);
  --critical-solid-hover: #ff6363;
  --status-warning: var(--orange);
  --status-warning-text: #c76f00;
  --status-good: var(--green);
  --status-good-hover: #61da0a;
  --status-good-text: #3f8f00;
  --status-neutral: #a3a39d;
  --status-neutral-text: #7f7f79;
  --status-empty: #ededE8;
  --data: var(--blue);
  --data-soft: var(--blue-soft);
  --band-1: #f4f4f0; --band-2: #ececE6; --band-3: #e2e2db;
  --suggestion: #a3a39d;
  --alert-soft: var(--red-soft);
  --review-soft: var(--orange-soft);
  --accepted-soft: #f0f0ec;
  --ok-soft: var(--green-soft);
  --alert-line: #ffc1bd;
  --review-line: #ffd59c;
  --add: var(--green); --del: var(--red);
  --delta-good: var(--status-good-text); --delta-bad: var(--status-critical-text);
  --overlay: rgba(20, 20, 20, 0.45);

  --gauge-on: var(--yellow); --gauge-on-dot: rgba(255, 255, 255, 0.5);
  --gauge-off: #f0f0eb; --gauge-off-dot: #dcdcd5;

  --shadow-card: none;
  --shadow-float: 0 8px 24px rgba(40, 40, 30, 0.1);
  --shadow-pop: 0 24px 60px rgba(40, 40, 30, 0.18);
  --radius-sm: 8px; --radius-md: 12px; --radius-lg: 16px; --radius-xl: 20px;
  --font-display: "Nunito", "Satoshi", system-ui, sans-serif;
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
  color-scheme: light;
}
[data-theme="dark"] {
  --yellow-soft: rgba(247, 189, 21, 0.14); --yellow-ink: #ffd04d;
  --red-soft: rgba(255, 75, 75, 0.14); --orange-soft: rgba(255, 150, 0, 0.14);
  --green-soft: rgba(88, 204, 2, 0.14); --blue-soft: rgba(28, 176, 246, 0.14);
  --bg-main: #131f24;
  --bg-second: #1a2a31;
  --bg-third: #213640;
  --bg-muted: #2c434e;
  --sidebar-bg: #131f24;
  --border: #2e434d;
  --border-strong: #3c5560;
  --text-main: #f1f7fb;
  --text-strong: #ffffff;
  --text-second: #a2b4bd;
  --text-faint: #6f8792;
  --nav-highlight: rgba(247, 189, 21, 0.12);
  --status-critical-text: #ff7a7a;
  --status-warning-text: #ffb347;
  --status-good-text: #79e02a;
  --status-neutral-text: #a2b4bd;
  --status-empty: #2a3f49;
  --accepted-soft: rgba(163, 163, 157, 0.14);
  --band-1: #1e313a; --band-2: #243a44; --band-3: #2c444f;
  --alert-line: rgba(255, 75, 75, 0.4); --review-line: rgba(255, 150, 0, 0.4);
  --overlay: rgba(5, 10, 12, 0.62);
  --gauge-off: #24394366; --gauge-off-dot: #3a5561;
  --gauge-off: #233741;
  --link: #6db7ef;
  --shadow-float: 0 10px 30px rgba(0, 0, 0, 0.4);
  --shadow-pop: 0 24px 60px rgba(0, 0, 0, 0.55);
  color-scheme: dark;
}



/* Design tokens (colours, radii, type scale, spacing) now live in
   styles/tokens.css — the single source of truth loaded before this file in
   index.html. Every var(--...) below still resolves the same way; only the
   declarations moved. */

* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: "Satoshi", system-ui, -apple-system, "Segoe UI", sans-serif;
  background: var(--bg-main);
  color: var(--text-main);
  min-height: 100vh;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* app.js builds most titles with el("strong", ...) and el("b", ...), so the
   browser default of 700 was setting the weight for half the interface. In a
   geometric face like Satoshi, 500 at 13px already reads as hierarchy; 700 at
   10.5px only reads as noise. Weight 700 is now reserved for the large
   numbers, and every case that needs it says so explicitly. */
strong, b { font-weight: 500; }

/* Counters must not change width between runs. Same rule for the font: these
   are stats to read at a glance, not code, so they stay in the body face
   (Satoshi) instead of --mono — mono is reserved for things that are
   literally code-like (paths, dates, selectors). .kpi-value is deliberately
   NOT in this list (brief section G): it is one lone big number with nothing
   beside it to stay aligned against, so it gets proportional figures instead
   — the better-kerned, more legible option whenever nothing else needs to
   line up against it. */
.bullet-value, .bar-count, .col-chart-value,
.badge, .nav-badge, .scope-stat strong, .st-stat strong,
.kpi-delta, .why-score-points, .why-score-total,
.ttf-count, .ttf-delta, .dotplot-score, .category-lollipop-value {
  font-variant-numeric: tabular-nums;
}

/* Every interactive element here is a <button>; leaning on the UA ring over a
   custom-coloured card looks like a rendering accident rather than focus. */
:where(a, button, summary, [tabindex]):focus-visible {
  outline: 2px solid var(--text-main);
  outline-offset: 2px;
  border-radius: inherit;
}
:where(a, button, summary):focus:not(:focus-visible) { outline: none; }

@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;
  }
}

.hidden { display: none !important; }

/* ------------------------------------------------------------------- icons */
/* stroke, fill and the stroke-* properties are all inherited, so they reach
   into the shadow tree a <use> creates and one rule dresses the whole set. */
.icon {
  width: 16px; height: 16px; flex: none; display: block;
  fill: none; stroke: currentColor;
  stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round;
}
.icon-sm { width: 14px; height: 14px; }
.icon-2xs { width: 11px; height: 11px; stroke-width: 2; }

/* A disclosure chevron drawn from two borders, shared by every <details> in the
   app. It rotates rather than swapping ▸ for ▾, so the control moves instead of
   blinking — and it inherits colour and optical weight from its own text. */
.dx-check summary::before,
.dx-evidence summary::before,
.mark-log summary::before,
.text-expand summary::before,
.why-score summary::before,
.bar-list-more summary::before,
.drawer-suggestions summary::before,
.scope-check summary::after {
  content: ""; display: inline-block; width: 5px; height: 5px; flex: none;
  border-right: 1.4px solid currentColor; border-bottom: 1.4px solid currentColor;
  transform: rotate(-45deg); transform-origin: 60% 60%;
  transition: transform 0.16s ease;
  opacity: 0.6;
}
.dx-check summary::before, .dx-evidence summary::before, .mark-log summary::before, .text-expand summary::before, .why-score summary::before, .bar-list-more summary::before, .drawer-suggestions summary::before { margin-right: 8px; vertical-align: 1px; }
.dx-check[open] summary::before,
.dx-evidence[open] summary::before,
.mark-log[open] summary::before,
.text-expand[open] summary::before,
.why-score[open] summary::before,
.bar-list-more[open] summary::before,
.drawer-suggestions[open] summary::before,
.scope-check[open] summary::after { transform: rotate(45deg); }

/* A long piece of copied page text (a heading, a paragraph) collapsed behind
   its own truncated preview, so a single long finding does not push every
   other finding on the page out of view. Same disclosure chevron as every
   other <details> above. */
.text-expand summary {
  cursor: pointer; list-style: none; color: var(--text-faint);
  font-size: var(--fs-sm); line-height: 1.5;
}
.text-expand summary::-webkit-details-marker { display: none; }
.text-expand summary:hover { color: var(--text-second); }
.text-expand p { margin-top: 6px !important; }
.text-expand[open] summary { color: var(--text-second); margin-bottom: 2px; }

/* ------------------------------------------------------------------ shell */
.shell { display: flex; min-height: 100vh; }

/* #siteTabs starts empty in the static HTML and only gets its real tab(s)
   once loadSites() resolves — until then "+ Add domain" and the whole nav
   list below it sit ~100px higher than their final position. A click aimed
   at "Pages" or "Add domain" in that brief window used to land wherever the
   shift left it once the real tabs popped in. Locking the sidebar to no
   pointer events until that first load settles (removed in app.js's boot
   sequence) trades "click does nothing for a moment" for "click does the
   wrong thing," which is the only two options once the shift itself can't
   be predicted ahead of time (the number of domains isn't known yet). */
.sidebar.boot-lock { pointer-events: none; }
.sidebar {
  width: 232px;
  flex-shrink: 0;
  border-right: 1px solid var(--border);
  background: var(--sidebar-bg);
  padding: 20px 14px;
  display: flex;
  flex-direction: column;
  gap: 22px;
  position: sticky;
  top: 0;
  /* Sticky makes the sidebar its own stacking context, so the nav-group
     flyout's z-index only counts inside it — without one here, positioned
     cards in .main painted over the open menu. Above the sticky topbar
     (30), below modals and overlays (50+). */
  z-index: 35;
  height: 100vh;
  /* At short viewport heights the nav list + sidebar-foot (How this works /
     language toggle / Sign out) together can exceed 100vh. Without a scroll
     of its own, the overflow just ran off the bottom of the screen with no
     way to reach it — this made those controls unreachable rather than just
     scrolled past. */
  overflow-y: auto;
}

/* Every left edge in this 232px column sits on 12px. There used to be five
   different insets here (6 / 4 / 10 / 11 / 12); nothing looked broken, but the
   column never resolved into a single vertical line either. */
.brand { display: flex; align-items: center; gap: 12px; padding: 0 var(--sp-3); }
/* The same mark as the browser tab, so the favicon is recognisably this product
   rather than a default globe. */
.logo-mark {
  display: grid; place-items: center;
  width: 32px; height: 32px; flex: none;
  border-radius: var(--radius-lg);
  background: var(--accent);
  color: var(--text-on-accent);
}
.logo-mark svg { width: 32px; height: 32px; display: block; }
.brand-text { display: flex; flex-direction: column; min-width: 0; }
.brand-text strong { font-size: var(--fs-base); font-weight: 500; letter-spacing: -0.01em; }
.site { font-size: var(--fs-xs); color: var(--text-second); text-decoration: none; }
.site:hover { text-decoration: underline; }

/* ------------------------------------------------------- domain switcher */
.site-switch { display: flex; flex-direction: column; gap: 6px; }
.side-label {
  font-size: var(--fs-2xs); font-weight: 500;
  text-transform: uppercase; letter-spacing: var(--track-caps);
  color: var(--text-faint); padding: 0 var(--sp-3);
}
.site-tabs { display: flex; flex-direction: column; gap: 3px; }
.site-tab {
  position: relative;
  display: flex; flex-direction: column; gap: 2px;
  padding: 8px 26px 8px var(--sp-3);
  border: 1px solid transparent; border-radius: var(--radius-lg);
  background: transparent; color: var(--text-second);
  font-family: inherit; text-align: left; cursor: pointer;
  transition: background 0.18s ease, border-color 0.18s ease;
}
.site-tab:hover { background: var(--bg-main); }
.site-tab.active {
  background: var(--bg-main); border-color: var(--bg-muted); color: var(--text-main);
}
.st-main { display: flex; align-items: center; gap: 6px; min-width: 0; }
.st-name {
  font-size: var(--fs-base); font-weight: 500;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* Sentence case, not caps: this holds the word "staging", which is content.
   Uppercase + tracking is reserved for system labels. */
.st-flag {
  font-size: var(--fs-2xs);
  padding: 1px 6px; border-radius: var(--radius-pill);
  background: var(--bg-muted); color: var(--text-second); flex-shrink: 0;
}
.st-flag.alert { background: var(--alert-soft); color: var(--alert-text); }
.st-host {
  font-size: var(--fs-2xs); color: var(--text-faint); font-family: var(--mono);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.st-edit {
  position: absolute; top: 9px; right: 9px;
  display: flex; color: var(--text-faint);
}
.st-edit:hover { color: var(--text-main); }
.site-add {
  display: flex; align-items: center; gap: 8px;
  padding: 7px var(--sp-3);
  border: 1px dashed var(--bg-muted); border-radius: var(--radius-lg);
  background: transparent; color: var(--text-second);
  font-family: inherit; font-size: var(--fs-sm); text-align: left; cursor: pointer;
}
.site-add:hover { background: var(--bg-main); color: var(--text-main); }

.nav { display: flex; flex-direction: column; gap: 2px; }
.nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--radius-lg);
  font-size: var(--fs-base); font-weight: 400;
  color: var(--text-second);
  text-decoration: none;
  transition: background 0.18s ease, color 0.18s ease;
}
.nav-item .icon { opacity: 0.7; transition: opacity 0.18s ease; }
.nav-item:hover { background: var(--bg-main); color: var(--text-main); }
.nav-item:hover .icon { opacity: 1; }
/* The current view is the only nav row that carries the full text colour and a
   fill; everything else stays one step back so the eye finds "where am I"
   without reading the list. */
.nav-item.active {
  background: var(--nav-highlight); color: var(--text-main); font-weight: 500;
}
.nav-item.active .icon { opacity: 1; }
.nav-badge {
  margin-left: auto;
  font-size: var(--fs-2xs); font-weight: 500;
  padding: 2px 7px; border-radius: var(--radius-pill);
  background: var(--bg-muted); color: var(--text-second);
}
.nav-badge.alert { background: var(--alert-soft); color: var(--alert-text); }
.nav-badge:empty { display: none; }

/* Topic groups (see the comment on .nav-group in index.html). The header is
   styled as one more nav row so the column still reads as a single list; its
   menu is a flyout to the right of the sidebar, positioned by
   placeNavMenu() in app.js because the sidebar's own overflow-y would clip
   anything absolutely positioned inside it. */
.nav-group-head {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: var(--sp-2) var(--sp-3);
  border: 0; border-radius: var(--radius-lg);
  background: transparent; color: var(--text-second);
  font-family: inherit; font-size: var(--fs-base); font-weight: 400;
  text-align: left; cursor: pointer;
  transition: background 0.18s ease, color 0.18s ease;
}
.nav-group-head .icon { opacity: 0.7; transition: opacity 0.18s ease; }
.nav-group-head:hover,
.nav-group.open .nav-group-head { background: var(--bg-main); color: var(--text-main); }
.nav-group-head:hover .icon,
.nav-group.open .nav-group-head .icon { opacity: 1; }
/* The current view lives inside this group: the header carries the same
   "where am I" fill an active nav row does, since the row itself is hidden
   in the closed menu. */
.nav-group.has-active .nav-group-head {
  background: var(--nav-highlight); color: var(--text-main); font-weight: 500;
}
.nav-group.has-active .nav-group-head .icon { opacity: 1; }
.nav-group-chev { margin-left: auto; transform: rotate(-90deg); opacity: 0.6; }
.ng-short { display: none; }
/* Something inside has a count; red when one of those counts is an alert.
   Just a hint to open it — the numbers themselves live on the rows. */
.nav-group-dot {
  display: none; flex: none;
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--text-faint);
}
.nav-group.has-badge .nav-group-dot { display: block; }
.nav-group.has-alert .nav-group-dot { background: var(--alert-text); }

.nav-group-menu {
  display: none;
  position: fixed; z-index: 60;
  min-width: 220px; padding: 6px;
  flex-direction: column; gap: 2px;
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-float);
}
.nav-group.open .nav-group-menu { display: flex; }

.sidebar-foot { margin-top: auto; display: flex; flex-direction: column; gap: 10px; }
.mini-card {
  background: var(--bg-main);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 10px var(--sp-3);
  display: flex; flex-direction: column; gap: 3px;
}
.mini-label {
  font-size: var(--fs-2xs); font-weight: 500;
  text-transform: uppercase; letter-spacing: var(--track-caps); color: var(--text-faint);
}
.mini-card strong { font-size: var(--fs-sm); font-family: var(--mono); font-weight: 500; }

.btn-ghost {
  display: flex; align-items: center; gap: 8px;
  padding: var(--sp-2) var(--sp-3);
  background: transparent; border: 1px solid var(--border);
  transition: background 0.18s ease, color 0.18s ease, border-color 0.18s ease;
  border-radius: var(--radius-lg);
  color: var(--text-second); font-family: inherit; font-size: var(--fs-base);
  cursor: pointer;
}
.btn-ghost:hover { background: var(--bg-third); color: var(--text-main); }
.btn-ghost:disabled { opacity: 0.5; cursor: not-allowed; }
.btn-ghost:disabled:hover { background: transparent; color: var(--text-second); }

/* A quiet toggle for re-ordering a list (severity vs. date) that sits inside a
   card/drawer header, not the page chrome — smaller and borderless at rest,
   the same hover affordance as any other .btn-ghost so it reads as clickable. */
.sort-toggle {
  border-color: transparent; padding: 4px var(--sp-2);
  font-size: var(--fs-sm); color: var(--text-faint); white-space: nowrap;
}
.sort-toggle:hover { color: var(--text-main); }
.drawer-sort-row { display: flex; justify-content: flex-end; margin: -4px 0 10px; }
/* Sits in a .priority-head row (which wraps left-to-right: label, kind tag,
   page-count tag) — pushed to the far right so it reads as the row's own
   action, not another tag in the same line. */
.priority-bulk { margin-left: auto; }

/* -------------------------------------------------------------------- main */
.main { flex: 1; min-width: 0; padding: 0 30px 60px; max-width: 1680px; }

/* The run status and "check now" are the two controls you reach for from any
   view, so the header follows you down the page instead of scrolling away. */
.topbar {
  position: sticky; top: 0; z-index: 30;
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: 22px; padding: 28px 0 20px; margin-bottom: 10px;
  background: var(--bg-main);
  border-bottom: 1px solid var(--border);
}
.topbar-text { min-width: 0; }
.topbar h1 { margin: 0; font-size: var(--fs-2xl); font-weight: 500; letter-spacing: var(--track-tight); }
.sub { margin: 5px 0 0; color: var(--text-second); font-size: var(--fs-base); }
.actions { display: flex; align-items: center; gap: 12px; flex: none; }

/* ------------------------------------------------------------------- views */
/* One view at a time. Everything used to be stacked into a single column eight
   screens tall, which meant the sidebar was a table of contents for a document
   rather than navigation for an app. */
.view { display: none; padding-top: var(--sp-4); }
.view.active { display: block; animation: view-in 0.16s ease; }
@keyframes view-in { from { opacity: 0; transform: translateY(3px); } }

/* The strip above a bare view: whatever narrows or explains what is below it. */
.view-bar {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--sp-4); flex-wrap: wrap; margin-bottom: var(--sp-4);
}
.view-sub { margin: 0; font-size: var(--fs-base); color: var(--text-second); }
.view-bar-right { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; }

/* A view that is one list gets a panel instead of a card: same surface, no
   redundant heading repeating the title already in the header. */
.panel {
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: 2px var(--sp-5);
}

.pill {
  font-size: var(--fs-sm); font-weight: 500;
  padding: 6px 13px; border-radius: var(--radius-pill);
  background: var(--bg-third); color: var(--text-second);
  display: inline-flex; align-items: center; gap: 7px;
}
.pill::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
/* A clean run is not an achievement to celebrate, it is the expected state. */
.pill.ok { background: var(--bg-third); color: var(--text-second); }
.pill.review { background: var(--review-soft); color: var(--review); }
.pill.alert { background: var(--alert-soft); color: var(--alert-text); }
/* Three beats on load, then it stops. A dot pulsing forever in a tab that
   stays open all day stops being a signal and becomes a tic. */
.pill.alert::before { animation: pulse 1.4s ease-in-out 3; }
@keyframes pulse { 50% { opacity: 0.35; } }

/* "Why this score" (PRD-design-ai, Phase 3): a real disclosure of the design
   score's per-finding deduction, not a summary — every bucket weight has to
   be readable here, never just implied by the total. Reuses the same
   disclosure chevron as .text-expand. */
.drawer-design-score { margin-bottom: var(--sp-3); }
.why-score { margin-top: var(--sp-2); }
.why-score summary {
  cursor: pointer; list-style: none; color: var(--text-faint);
  font-size: var(--fs-sm); line-height: 1.5;
}
.why-score summary::-webkit-details-marker { display: none; }
.why-score summary:hover { color: var(--text-second); }
.why-score[open] summary { color: var(--text-second); margin-bottom: var(--sp-2); }
.why-score-list {
  display: flex; flex-direction: column; gap: 6px;
  padding: var(--sp-3); border-radius: var(--radius-lg);
  background: var(--bg-second); border: 1px solid var(--border);
}
.why-score-item {
  display: flex; align-items: baseline; gap: var(--sp-2);
  font-size: var(--fs-sm);
}
.why-score-bucket {
  flex: none; font-size: var(--fs-2xs); font-weight: 500;
  padding: 1px 7px; border-radius: var(--radius-pill);
  background: var(--bg-third); color: var(--text-faint);
}
.why-score-label { flex: 1; color: var(--text-second); }
.why-score-points { color: var(--alert-text); flex: none; }
/* Collapsed by default, same reasoning as .why-score above: a suggestion
   doesn't count as work, so it should not compete for attention with the
   page's real findings above it — but it stays one click away, not hidden. */
.drawer-suggestions { margin-top: var(--sp-4); border-top: 1px solid var(--border); padding-top: var(--sp-3); }
.drawer-suggestions summary {
  cursor: pointer; list-style: none; color: var(--text-faint);
  font-size: var(--fs-sm); line-height: 1.5;
}
.drawer-suggestions summary::-webkit-details-marker { display: none; }
.drawer-suggestions summary:hover { color: var(--text-second); }
.drawer-suggestions[open] summary { color: var(--text-second); margin-bottom: var(--sp-2); }
.why-score-total {
  margin-top: var(--sp-2); padding-top: var(--sp-2);
  border-top: 1px dashed var(--border);
  font-size: var(--fs-xs); color: var(--text-faint);
}

.btn-primary {
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--accent); color: var(--text-on-accent);
  border: none; border-radius: var(--radius-lg);
  padding: var(--sp-2) var(--sp-4);
  font-size: var(--fs-base); font-weight: 500; font-family: inherit;
  cursor: pointer;
  transition: transform 0.18s ease, filter 0.2s ease;
}
.btn-primary:hover { filter: brightness(1.06); transform: translateY(-1px); }
.btn-primary:disabled { opacity: 0.55; cursor: progress; transform: none; }
/* Same shape as the confirming button everywhere else, so a destructive
   confirmation is not a different control — only a differently coloured one. */
.btn-primary.danger { background: var(--critical-solid); color: var(--text-on-solid); }
/* A run in progress: the icon turns while the button is disabled. */
.btn-primary:disabled .icon { animation: spin 1.1s linear infinite; }

/* A strong, non-accent solid action — used where the page's one accent
   colour (--accent, yellow) is already spoken for by a single primary action
   (e.g. "Re-check") and a second filled button on the same screen would
   compete with it instead of reading as secondary-but-solid. Inverts with
   theme (dark-on-light in light mode, light-on-dark in dark mode) rather than
   being literally black, so it never goes invisible in dark mode. */
.btn-dark {
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--text-main); color: var(--bg-main);
  border: none; border-radius: var(--radius-lg);
  padding: var(--sp-2) var(--sp-4);
  font-size: var(--fs-base); font-weight: 500; font-family: inherit;
  cursor: pointer;
  transition: transform 0.18s ease, filter 0.2s ease;
}
.btn-dark:hover { filter: brightness(1.15); transform: translateY(-1px); }

/* Third tier, between --btn-primary (the one accent action per screen) and
   --btn-ghost (borderless, lowest weight): a real bordered button for
   actions that need to read as clickable and roughly equal to a sibling
   action, without claiming the accent or --btn-dark's stronger solid fill.
   Page-detail's "Open page"/"Open in Framer" and "Copy instructions" are the
   first users of this tier — previously forced into --btn-ghost (too weak,
   indistinguishable from a plain link) or --btn-dark (too strong, outranking
   the primary action visually). */
.btn-secondary {
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--bg-second); color: var(--text-main);
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  padding: var(--sp-2) var(--sp-4);
  font-size: var(--fs-base); font-weight: 500; font-family: inherit;
  cursor: pointer; text-decoration: none;
  transition: background 0.15s ease, border-color 0.15s ease, transform 0.18s ease;
}
.btn-secondary:hover { background: var(--bg-third); border-color: var(--text-faint); transform: translateY(-1px); }
.btn-secondary:disabled { opacity: 0.55; cursor: progress; transform: none; }

.btn-primary:focus-visible, .btn-secondary:focus-visible, .btn-dark:focus-visible,
.btn-ghost:focus-visible, .btn-icon:focus-visible {
  outline: 2px solid var(--accent); outline-offset: 2px;
}

@keyframes spin { to { transform: rotate(360deg); } }

.btn-icon {
  display: grid; place-items: center;
  width: 30px; height: 30px; padding: 0;
  border-radius: var(--radius-md);
  background: var(--bg-second); border: 1px solid var(--border);
  color: var(--text-second); cursor: pointer; line-height: 1;
}
/* Without this, themeToggle (.btn-ghost + .btn-icon together) keeps
   .btn-ghost's 8px/12px padding, leaving a content box smaller than the
   16px icon inside a 30px button. Grid's "center" then falls back to safe/
   start alignment rather than overflowing evenly, which pinned the icon to
   the button's top-left corner — read as "the moon isn't centered," but the
   icon itself was fine; the button had no room to center anything in. */
.btn-icon:hover { background: var(--bg-third); color: var(--text-main); }
.btn-icon:disabled { opacity: 0.5; cursor: not-allowed; }

/* ------------------------------------------------------------ draft alert */
/* This used to say "alert" four times over — red border, red fill, red heading
   and a red context. One signal is enough when it is the right one: the tinted
   outline and the gutter dot carry the severity, and the words carry the rest. */
.draft-alert {
  position: relative;
  border: 1px solid var(--alert-line);
  background: var(--bg-second);
  border-radius: var(--radius-xl);
  padding: var(--sp-4) 20px var(--sp-4) 32px;
  margin-bottom: 20px;
}
.draft-alert::before {
  content: ""; position: absolute; top: 22px; left: 16px;
  width: 6px; height: 6px; border-radius: 50%; background: var(--alert);
}
.draft-alert h2 { margin: 0 0 6px; font-size: var(--fs-md); font-weight: 500; color: var(--text-main); }
.draft-alert ul { margin: var(--sp-2) 0 0; padding-left: var(--sp-4); font-size: var(--fs-base); }
.draft-alert li { margin-bottom: 3px; line-height: var(--lh-normal); }
.draft-alert li::marker { color: var(--text-faint); }
.draft-alert a { color: var(--text-main); }

/* A discarded run is not a defect in the site, so it does not get the alert
   colour — it is the tool reporting on itself. Review weight, same gutter dot
   as everything else, and it says plainly that nothing was lost. */
.run-notice {
  position: relative;
  border: 1px solid var(--review-line);
  background: var(--bg-second);
  border-radius: var(--radius-xl);
  padding: var(--sp-3) 20px var(--sp-3) 32px;
  margin-bottom: 20px;
}
.run-notice::before {
  content: ""; position: absolute; top: 17px; left: 16px;
  width: 6px; height: 6px; border-radius: 50%; background: var(--review);
}
/* "It ran and everything is fine" is the most common ending and the least
   urgent, so it gets no colour at all — just enough outline to be read as a
   deliberate statement rather than a leftover. */
.run-notice.ok { border-color: var(--bg-muted); }
.run-notice.ok::before { background: var(--text-faint); }
.run-notice h2 { margin: 0 0 4px; font-size: var(--fs-base); font-weight: 500; color: var(--text-main); }
.run-notice p { margin: 0; font-size: var(--fs-sm); color: var(--text-second); line-height: var(--lh-normal); max-width: 78ch; }

/* -------------------------------------------------------------------- kpis */
.kpis {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 14px; margin-bottom: 20px;
}
.kpi {
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: var(--sp-4);
  box-shadow: var(--shadow-card);
  display: flex; flex-direction: column; gap: 4px; min-width: 0;
  /* Appears once per full render, staggered by position — not a shadow, not a
     number counting up, just the block settling into place. backwards keeps it
     invisible for the length of its own delay instead of flashing full-opacity
     first. */
  animation: kpi-in 0.32s ease backwards;
}
.kpi:nth-child(1) { animation-delay: 0ms; }
.kpi:nth-child(2) { animation-delay: 40ms; }
.kpi:nth-child(3) { animation-delay: 80ms; }
.kpi:nth-child(4) { animation-delay: 120ms; }
.kpi:nth-child(5) { animation-delay: 160ms; }
@keyframes kpi-in { from { opacity: 0; transform: translateY(4px); } }
.kpi-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
/* Growth or shrinkage in pages monitored is information, not a verdict — one
   neutral pill for both directions, the arrow carries the direction. Every
   other tile's delta is allowed a tone, since more of a problem is worse and
   less is better (see renderKpis — "pages" is the one seriesKey that stays
   neutral here). */
.kpi-delta {
  margin-left: auto; display: inline-flex; align-items: center; gap: 3px;
  font-size: var(--fs-2xs); color: var(--text-second); white-space: nowrap;
  background: var(--bg-third); border-radius: var(--radius-pill); padding: 2px 6px 2px 5px;
}
/* A delta on a problem count is allowed to say "this got worse/better" — a
   different claim from "this page is fine", which is the one thing colour
   never gets to say in this app. */
.kpi-delta.bad { color: var(--delta-bad); background: color-mix(in srgb, var(--delta-bad) 14%, var(--bg-third)); }
.kpi-delta.good { color: var(--delta-good); background: color-mix(in srgb, var(--delta-good) 14%, var(--bg-third)); }
.kpi-icon {
  /* A 24px box against a ~8.5px cap height does not optically centre. */
  margin-top: -1px;
  width: 34px; height: 34px; border-radius: 50%; flex: none;
  display: grid; place-items: center;
  background: var(--bg-third); color: var(--text-second);
}
.kpi-icon.alert { background: var(--alert-soft); color: var(--alert-text); }
.kpi-icon.review { background: var(--review-soft); color: var(--review-vivid); }
.kpi-icon.ok { background: var(--bg-third); color: var(--text-second); }
/* Issues found/Pages monitored are not a severity — just a quantity with no
   inherent good/bad of its own, same as --data everywhere else in this
   redesign (brief rule 2: "--data: toda cantidad sin juicio bien/mal"). */
.kpi-icon.data { background: var(--data-soft); color: var(--data); }
.kpi-label { font-size: var(--fs-sm); color: var(--text-second); }
.kpi-value { font-size: var(--fs-2xl); font-weight: 700; letter-spacing: var(--track-tight); line-height: 1.1; }
.kpi-note { font-size: var(--fs-xs); color: var(--text-faint); overflow-wrap: break-word; }
.kpi.alert .kpi-value { color: var(--alert-text); }
/* --review-vivid is the fills/icons-only warning tone (see tokens.css) — it
   reads as washed-out/low-contrast as small body text (brief section G:
   "sacar la opacidad baja de la tile de SEO"). --review is the same hue's
   AA-safe text variant, already used for review text everywhere else in the
   app; the SEO tile shares this exact rule with "Pages to review" (both get
   cls "review"), so both get the same fix, not just the one the brief named. */
.kpi.review .kpi-value { color: var(--review); }
/* A good number is still just a number: it does not need to be green. */
.kpi.ok .kpi-value { color: var(--text-main); }
.kpi-clickable { cursor: pointer; }
.kpi-clickable:hover { border-color: var(--text-faint); }
/* Section G: a 14-run shape under the number, no axis/gridlines/tooltip — see
   kpiSparkline() in app.js. Tone follows the tile's own identity: status
   colour for a severity count, --data (brief: "toda cantidad sin juicio
   bien/mal") for pages monitored/issues found, which are not a severity. */
.kpi-spark { display: block; width: 100%; height: 22px; margin: 2px 0; }
.kpi-spark-line { fill: none; stroke-width: 1.5px; vector-effect: non-scaling-stroke; }
.kpi-spark-alert .kpi-spark-line { stroke: var(--alert); }
.kpi-spark-alert .kpi-spark-dot { fill: var(--alert); }
.kpi-spark-review .kpi-spark-line { stroke: var(--review); }
.kpi-spark-review .kpi-spark-dot { fill: var(--review); }
.kpi-spark-data .kpi-spark-line { stroke: var(--data); }
.kpi-spark-data .kpi-spark-dot { fill: var(--data); }

/* --------------------------------------------------------------------- seo */
.seo-group {
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  padding: 11px 13px; margin-bottom: 8px;
}
.seo-group summary {
  cursor: pointer; list-style: none; font-weight: 500; font-size: var(--fs-base);
}
.seo-group summary::-webkit-details-marker { display: none; }
.seo-rows { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; }
.seo-row {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 7px 9px; border-radius: var(--radius-md); background: var(--bg-main);
}
.seo-row-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.seo-row-path-line { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.seo-row-path { font-family: var(--mono); font-size: var(--fs-sm); overflow-wrap: anywhere; }
.seo-row-detail { font-size: var(--fs-xs); color: var(--text-faint); }

/* ------------------------------------------------------------------- cards */
.card {
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: var(--sp-5);
  box-shadow: var(--shadow-card);
  margin-bottom: var(--sp-5);
  /* Cards sit as flex/grid items in several wrapping contexts (.grid-main,
     .card-stack, .grid-half), which all default to min-width:auto — a nowrap
     table inside a card (the new table-toggle view) would otherwise push the
     whole row/grid wider instead of scrolling inside its own card. */
  min-width: 0;
}
/* Baseline, not centre: the left block is two lines and the right is one, so
   centring floated the note to the midpoint of the pair instead of sitting it
   on the heading's baseline. .staging-group-head already did this correctly. */
.card-head {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 16px; margin-bottom: 16px;
}
.card-head h2 { margin: 0; font-size: var(--fs-lg); font-weight: 500; letter-spacing: -0.01em; }
.card-sub { margin: 2px 0 0; font-size: var(--fs-sm); color: var(--text-faint); }
.card-note { font-size: var(--fs-sm); color: var(--text-faint); }
.card-title-row { display: flex; align-items: center; gap: 7px; }
.card-title-row h2 { margin: 0; }

/* Section 4 item 5: "view as table" on every chart card — same .btn-icon the
   health-goal pencil already uses, so this doesn't invent a second icon-button
   style. Reuses whatever headers/rows each chart's own render function
   already built for its geometry; no new computation per chart. */
.table-toggle-btn.active { background: var(--accent); border-color: var(--accent); color: var(--text-on-accent); }
.table-toggle-btn { flex: none; }
.card-table-wrap { overflow-x: auto; margin-top: var(--sp-2); min-width: 0; }
.card-data-table { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
.card-data-table th, .card-data-table td {
  text-align: left; padding: 6px 10px; border-bottom: 1px solid var(--border);
  white-space: nowrap;
}
.card-data-table th { color: var(--text-second); font-weight: 500; }
.card-data-table td { color: var(--text-main); }
.card-data-table tbody tr:last-child td { border-bottom: 0; }

/* Temporary marker for what shipped this week — small and brand-coloured
   rather than an alert/review hue, since nothing here needs action. Meant to
   be pulled once the features stop being new, not a permanent UI element. */
.tag-new {
  font-size: 12px; font-weight: 700; letter-spacing: 0.03em; text-transform: uppercase;
  padding: 1px 6px; border-radius: var(--radius-pill);
  background: var(--accent); color: var(--text-on-accent);
  flex: none;
}
/* Everywhere else .tag-new sits as a flex sibling (.card-title-row's own gap
   already spaces it), but the Design score bar appends it straight inside
   the label span as inline text — with nothing else providing a gap there,
   the badge rendered touching the word right before it. */
.bullet-label .tag-new { margin-left: 6px; }

/* Overview stacks charts, a priority list and a section grid one after another
   with identical card styling — nothing told the eye where one topic ends and
   the next begins, so the whole page read as one continuous wall. A quiet
   uppercase label (same treatment as the sidebar's "Domains" eyebrow) ahead of
   each row is just a scan anchor: no colour, no rule, no weight change on the
   cards themselves. */
.zone-label {
  font-size: var(--fs-2xs); font-weight: 500;
  text-transform: uppercase; letter-spacing: var(--track-caps);
  color: var(--text-faint); margin: 0 0 var(--sp-3);
}

.grid-2 { display: grid; grid-template-columns: 1fr 1.15fr; gap: 22px; align-items: start; }
/* Three analytics cards on one row. They are all short, so stretching them to a
   shared height fills the row instead of leaving a tall empty column below. */
.grid-main { display: grid; grid-template-columns: 1.4fr 0.85fr 1.1fr; gap: 22px; }
.grid-main > .card { margin-bottom: 0; display: flex; flex-direction: column; }
.grid-main { margin-bottom: 22px; }
@media (max-width: 1240px) {
  .grid-main { grid-template-columns: 1fr 1fr; }
  .grid-main > .card:first-child { grid-column: 1 / -1; }
}
@media (max-width: 860px) {
  .grid-2, .grid-main { grid-template-columns: 1fr; }
  .grid-main > .card:first-child { grid-column: auto; }
}

/* Coverage used to be one card stretched to match its taller row-siblings,
   which left a dead gap inside it. Splitting it into two content-sized cards
   fixed that gap, but pinning the stack to the top of the row just moved the
   same leftover height below the stack instead — a blank grey rectangle next
   to two cards still shorter than their row-siblings. The stack now stretches
   with the row like the other two cards do, and both cards share the leftover
   height equally (rather than dumping it all into one), centring their own
   content within their own share — reads as two cards with breathing room,
   not as background. */
.card-stack { display: flex; flex-direction: column; gap: var(--sp-5); min-width: 0; }
.card-stack > .card { margin-bottom: 0; flex: 1; display: flex; flex-direction: column; justify-content: center; }

/* Two related Overview cards side by side, each taking half the row, instead
   of stacking both full-width — "By category" and "Worst design scores" are
   short enough on their own that a full-width row for either one left a lot
   of empty horizontal space next to a narrow column of content. */
.grid-half { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; margin-bottom: 22px; align-items: stretch; }
/* Stretched to match the taller sibling: "Worst design scores" grows with its
   row list (more rows on a bigger site = a taller card), while "By
   category"'s chart has a sensible height cap of its own (see .category-chart
   .scatter-svg) so bubbles don't spread thin even once the card around them
   is taller. The leftover space is centered in .category-chart-box (below)
   rather than left as a single dead slab under the legend. */
.grid-half > .card { margin-bottom: 0; display: flex; flex-direction: column; }
@media (max-width: 860px) {
  .grid-half { grid-template-columns: 1fr; }
}

/* Shared legend swatches. */
.legend { display: flex; gap: 12px; align-self: center; }
.lg { display: inline-flex; align-items: center; gap: 6px; font-size: var(--fs-xs); color: var(--text-second); }
.sw { width: 9px; height: 9px; border-radius: var(--radius-sm); background: var(--review-vivid); flex: none; }
.sw.alert { background: var(--alert); }
/* Legend swatch for "clean" in older charts. */
.sw.ok { background: var(--bg-muted); }
.sw.accepted { background: var(--accepted); }
/* Burn-down legend only (4.2): resolved is a genuinely good outcome, unlike
   the coverage grid's muted "clean" — reuses --status-good like the line
   itself, not .sw.ok's grey. */
.sw.resolved { background: var(--status-good); }

/* ------------------------------------------------------ health: bars+trend */
.health-row { display: flex; flex-direction: column; gap: var(--sp-4); flex: 1; min-width: 0; }
/* Bullet graphs (brief section A): Health score and Design score stacked
   above the trend chart, each a thin single-colour bar over three fixed grey
   bands (malo 0-50 / aceptable 50-80 / bueno 80-100 — --band-1/2/3) instead
   of the old alert→review→ok gradient and Design's diagonal hatch. The fill
   colour is chosen by whichever band the score itself falls in
   (.bullet-fill.critical/warning/good — see bulletBand() in app.js), so
   Health and Design need no second hue or pattern to tell apart: the value
   and its own band already do that. A vertical tick (.bullet-mark) marks the
   previous run's value; the head text spells the same comparison out in
   words ("71 / 100 · −3 vs 29 sep") so it is never colour-only. Shared as-is
   with Page detail's Design-score KPI tile (.pd-kpi-score-track also gets
   .bullet-track, see below) — one component, two widths. */
.score-bars { display: flex; flex-direction: column; gap: 14px; }
.score-bar { display: flex; flex-direction: column; gap: 6px; }
.bullet-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.bullet-label { font-size: var(--fs-sm); color: var(--text-second); }
.bullet-value { font-size: var(--fs-lg); font-weight: 700; letter-spacing: var(--track-tight); }
.bullet-suffix { font-size: var(--fs-xs); font-weight: 500; color: var(--text-faint); }
.bullet-delta { font-weight: 700; }
.bullet-delta.good { color: var(--delta-good); }
.bullet-delta.bad { color: var(--delta-bad); }
/* Coverage caveat (not_applicable/not_verified/partial — see
   renderCoverageNote()): plain text, no colour of its own. A real problem
   already shows through the "—" value and the neutral tooltip; this note is
   informational, never a second severity signal. */
.bullet-note { font-size: var(--fs-xs); color: var(--text-faint); }
/* The three qualitative bands live in the track's own background — flat,
   colour-free steps (never a status signal by themselves), so the single
   coloured fill on top is the only thing in this bar actually saying
   good/bad. */
.bullet-track {
  position: relative; height: 18px; border-radius: var(--radius-sm);
  background-image: linear-gradient(to right,
    var(--band-1) 0% 50%, var(--band-2) 50% 80%, var(--band-3) 80% 100%);
  overflow: hidden;
}
.bullet-fill {
  position: absolute; left: 0; top: 50%; transform: translateY(-50%);
  width: var(--w, 0%); height: 8px; border-radius: var(--radius-sm);
  transition: width 0.9s cubic-bezier(0.22, 1, 0.36, 1);
}
.bullet-fill.critical { background: var(--status-critical); }
.bullet-fill.warning { background: var(--status-warning); }
.bullet-fill.good { background: var(--status-good); }
/* The previous run's value, so a reader sees "moved left/right since last
   time" on the bar itself, not only in the head's delta text. */
.bullet-mark {
  position: absolute; left: var(--mark, 0%); top: 1px; bottom: 1px;
  width: 2px; background: var(--text-main); opacity: 0.55;
  transform: translateX(-1px);
}

/* Health goal card: two big numbers + a status badge, an undecorated
   sparkline since the goal was set, and an empty state when none is set —
   deliberately smaller than the main Health/Design score bars above, since
   this is a secondary, optional card. */
.goal-row { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); }
.goal-nums { display: flex; align-items: baseline; gap: 10px; }
.goal-num { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.goal-num-value { font-size: var(--fs-xl); font-weight: 700; letter-spacing: var(--track-tight); }
.goal-num-label { font-size: var(--fs-xs); color: var(--text-faint); }
.goal-arrow { color: var(--text-faint); }
.goal-badge {
  font-size: var(--fs-xs); font-weight: 600; padding: 3px 9px; border-radius: var(--radius-xl);
}
.goal-badge.ok { background: var(--ok-soft); color: var(--status-good-text); }
.goal-badge.alert { background: var(--alert-soft); color: var(--alert); }
.goal-spark { width: 100%; height: 40px; display: block; margin-top: var(--sp-2); }
.goal-spark :where(path, line, circle) { vector-effect: non-scaling-stroke; }
.goal-spark-target { stroke: var(--text-faint); stroke-width: 1; stroke-dasharray: 3 3; }
/* --data, not --accent: this is a quantity (score over time), and the new
   colour rules reserve the brand yellow for CTAs/"NEW" badges only. */
.goal-spark-line { fill: none; stroke: var(--data); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.goal-spark-dot { fill: var(--data); }

/* Brief section B: three small multiples sharing one x-axis instead of one
   area chart with an overlaid second line — a status strip (worst state per
   run, Statuspage/Grafana-style), a health-score line, and a
   pages-with-alerts bar row, stacked with no gap so one shared crosshair
   (.trend-overlay, absolutely positioned over all three) lines up with all
   of them at once. No pink fill, no second overlapping line of hollow dots:
   the design score already has its own bullet graph above this card. */
.trend { min-width: 0; }
.trend-stack { position: relative; display: flex; flex-direction: column; }
.trend-row-svg { width: 100%; display: block; }
.trend-row-svg :where(path, line, circle, rect, text) { vector-effect: non-scaling-stroke; }
.trend-strip { height: 12px; }
.trend-linechart { height: 110px; }
.trend-bars { height: 36px; }
.grid-line { stroke: var(--bg-third); stroke-width: 1; }
/* Row 1: one rectangle per run, colour-coded by that run's worst state — the
   same read as a Statuspage uptime bar or a Grafana state timeline. Unlike
   the coverage waffle's "clean" cell (deliberately muted, since ~90% of
   pages are clean), a whole RUN with nothing open is a genuinely good
   result worth the same positive teal as "ok" everywhere else. */
.trend-cell.alert { fill: var(--alert); }
.trend-cell.review { fill: var(--review-vivid); }
.trend-cell.ok { fill: var(--ok); }
.trend-cell.nodata { fill: var(--bg-third); opacity: 0.5; }
.trend-cell.hovered { opacity: 0.75; }
/* Row 2: health score 0-100, a plain quantity line (--data, not an alert
   colour) so it never competes with row 1's severity colours. */
.trend-health-line { fill: none; stroke: var(--data); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.trend-health-dot { fill: var(--bg-second); stroke: var(--data); stroke-width: 2; transition: r 0.18s ease; }
.trend-health-dot.on { r: 6; }
.trend-health-dot.last { fill: var(--data); stroke: none; }
.trend-value-label { font-size: 12px; font-weight: 700; fill: var(--text-main); }
/* Row 3: pages-with-alerts per run, in --status-neutral rather than alert
   red — the colour is already spent in row 1, so this row reads as a plain
   magnitude, not a second alarm. */
.trend-bar { fill: var(--status-neutral); }
/* The most recent run, when it is the one in alert: three beats on load, same
   restraint as .pill.alert — a signal that stops, not a tic that runs all day. */
.trend-pulse {
  fill: none; stroke: var(--alert); stroke-width: 2; opacity: 0;
  animation: trend-pulse 1.4s ease-out 2;
}
@keyframes trend-pulse {
  0% { r: 4; opacity: 0.5; }
  100% { r: 11; opacity: 0; }
}
/* One crosshair for all three rows: an absolutely-positioned overlay the
   same total height as the stack, holding only the invisible hover bands
   and the guide line. */
.trend-overlay { position: absolute; inset: 0; height: 100%; }
.trend-band { fill: transparent; cursor: pointer; }
.trend-guide { stroke: var(--text-faint); stroke-width: 1; stroke-dasharray: 3 3; pointer-events: none; }
.trend-guide.off { opacity: 0; }
/* B1 (docs/roadmap/MASTER.md): score-version-change marker — same muted,
   dashed language as .trend-guide above, so it reads as "a boundary", not
   as a new alert colour. */
.trend-version-marker { stroke: var(--text-faint); stroke-width: 1; stroke-dasharray: 2 2; pointer-events: none; }
.trend-version-label { font-size: 12px; font-weight: 700; fill: var(--text-faint); pointer-events: none; }
.trend-axis {
  display: flex; justify-content: space-between;
  font-size: var(--fs-xs); color: var(--text-faint); margin-top: 2px;
}

/* ------------------------------------------------------------ burn-down chart */
/* Brief section 4.2: opened vs. resolved findings per week, on Overview.
   Same crosshair/hover-band architecture as .trend-overlay above; colours
   reuse --status-critical/--status-good, the exact pair renderProgress()
   already uses for .bar-fill.alert/.bar-fill.ok on the Progress tab, so the
   two views of the same numbers read consistently. */
.burndown-chart { min-width: 0; }
.bd-wrap { position: relative; }
.bd-svg {
  width: 100%; height: 160px; display: block;
}
.bd-svg :where(path, line, circle, rect, text) { vector-effect: non-scaling-stroke; }
.bd-line.opened { fill: none; stroke: var(--status-critical); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.bd-line.resolved { fill: none; stroke: var(--status-good); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.bd-dot.opened { fill: var(--bg-second); stroke: var(--status-critical); stroke-width: 2; transition: r 0.18s ease; }
.bd-dot.resolved { fill: var(--bg-second); stroke: var(--status-good); stroke-width: 2; transition: r 0.18s ease; }
.bd-dot.on { r: 5; }
.bd-dot.last.opened { fill: var(--status-critical); stroke: none; }
.bd-dot.last.resolved { fill: var(--status-good); stroke: none; }
.bd-value-label { font-size: 12px; font-weight: 700; fill: var(--text-main); }
.bd-overlay { position: absolute; inset: 0; }
.bd-band { fill: transparent; cursor: pointer; }
.bd-guide { stroke: var(--text-faint); stroke-width: 1; stroke-dasharray: 3 3; pointer-events: none; }
.bd-guide.off { opacity: 0; }

/* ----------------------------------------------------------- coverage grid */
/* Brief section C: grouped waffle instead of one flat grid + a separate
   legend + a second stacked-bar chart. One square per page, grouped into a
   row per severity with its own label and count on the left. Shape carries
   the severity as well as colour, so the grouping survives colour-blindness
   and print. */
.coverage { display: flex; flex-direction: column; gap: var(--sp-3); margin-top: var(--sp-3); }
.cov-group-head {
  display: flex; align-items: center; gap: 6px; margin-bottom: 6px;
  font-size: var(--fs-xs); color: var(--text-second);
}
.cov-group-head b { color: var(--text-main); font-weight: 700; }
.cov-waffle {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(12px, 1fr));
  gap: 4px; align-content: start;
}
.cov-cell {
  aspect-ratio: 1; border: 0; padding: 0; cursor: pointer; box-sizing: border-box;
  outline: 1px solid transparent;
  transition: outline-color 0.18s ease, background-color 0.2s ease, transform 0.15s ease;
}
/* Four distinct shapes, one per severity, matched by the swatch in each
   group's own heading. */
.cov-cell.alert, .sw-shape.alert { border-radius: 2px; background: var(--alert); }
.cov-cell.review, .sw-shape.review { border-radius: 4px; background: var(--review-vivid); }
.cov-cell.accepted, .sw-shape.accepted {
  border-radius: 50%; background: transparent; border: 2px solid var(--accepted);
}
/* Roughly nine of every ten cells here are clean, so whatever the clean state
   looks like becomes the largest surface in the app — faint and square, the
   same grey it always was, so the handful of real problems stay the only
   thing the eye catches. */
.cov-cell.ok, .sw-shape.ok { border-radius: 2px; background: var(--bg-third); opacity: 0.6; }
/* A small scale instead of only an outline: a 12px cell growing past its own
   box (via transform, which does not reflow) reads as "picked up" without the
   ripple a real size change caused in neighbouring cells. */
.cov-cell:hover {
  outline-color: var(--text-main); outline-offset: 1px;
  transform: scale(1.15); position: relative; z-index: 1;
}
.sw-shape { width: 10px; height: 10px; flex: none; }

/* ------------------------------------------------------- page × kind matrix */
/* Section 4 item 4: Pages' third view (after "By page" and "By finding
   type"). One row per page, one column per finding kind, each cell a SHAPE as
   well as a colour — the same redundant-encoding rule .cov-cell/.sw-shape
   just above and .ttf-sev below already use, extended with the one pairing
   neither of those needed: a cell here must read as "suggestion" and
   "accepted" as two genuinely different marks, not just two different
   colours, since a matrix (unlike the waffle or the bar list) can show both
   at once. */
.mx-legend { display: flex; flex-wrap: wrap; gap: var(--sp-4); margin-bottom: var(--sp-3); }
.mx-legend-item { display: flex; align-items: center; gap: 6px; font-size: var(--fs-xs); color: var(--text-second); }
.mx-wrap { overflow-x: auto; }
.mx-table {
  display: grid;
  /* Capped, not 1fr: on a wide card the row-label column has no natural
     ceiling, so it was swallowing almost all the free width (e.g. ~800px on
     a 1200px-wide card) and shoving the actual data cells off to the far
     right edge — exactly backwards for a chart whose whole point is reading
     a row's cells next to its label. 260px comfortably fits every page path
     in this app with ellipsis for the rare long one. */
  grid-template-columns: minmax(150px, 260px) repeat(var(--mx-cols), 30px);
  gap: 3px;
  align-items: center;
}
/* Sticky corner + row labels so a wide matrix stays readable while scrolling
   horizontally — the row label is the only thing identifying which page a
   given column of shapes belongs to. */
.mx-corner { position: sticky; left: 0; z-index: 2; background: var(--bg-second); }
.mx-col-head { display: flex; align-items: flex-end; justify-content: center; height: 86px; }
.mx-col-head span {
  writing-mode: vertical-rl; transform: rotate(180deg);
  font-size: var(--fs-2xs); color: var(--text-second); white-space: nowrap;
}
.mx-row-head {
  position: sticky; left: 0; z-index: 1; background: var(--bg-second);
  border: 0; text-align: left; font-size: var(--fs-xs); color: var(--text-main);
  cursor: pointer; padding: 4px 8px 4px 0; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; font-family: inherit;
}
.mx-row-head:hover { text-decoration: underline; }
.mx-cell { width: 16px; height: 16px; margin: auto; border: 0; padding: 0; cursor: pointer; background: none; }
.mx-cell:disabled { cursor: default; }
/* Clean: a faint square, same "quietest surface in the chart" choice as
   .cov-cell.ok, since an empty cell is by far the most common one here too. */
.mx-cell.none { border-radius: 2px; background: var(--bg-third); opacity: 0.4; }
.mx-cell.alert {
  width: 14px; height: 12px; background: var(--alert);
  clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}
.mx-cell.review { border-radius: 50%; background: var(--review-vivid); }
.mx-cell.suggestion { width: 8px; height: 8px; border-radius: 50%; background: var(--status-neutral); }
.mx-cell.accepted { border-radius: 50%; background: transparent; border: 2px solid var(--accepted); }
.mx-cell:hover:not(:disabled) { outline: 1px solid var(--text-main); outline-offset: 1px; }
@media (max-width: 480px) {
  .mx-table { grid-template-columns: minmax(110px, 180px) repeat(var(--mx-cols), 26px); }
  .mx-col-head { height: 70px; }
}

/* ------------------------------------------------- things to fix: bar list */
/* A ranked horizontal bar chart, not a donut: the health gauge is already a
   ring, and a second ring for a different metric reads as a repeated chart
   rather than a distinct one. Bars also have no centre hole to run out of
   room in when a category name is long. */
/* Rows pack from the top now, not centred: centring used to spend a stretched
   card's entire leftover height as padding above and below the row group —
   the tallest thing in the row (this list) was dictating extra air in itself
   on top of forcing its shorter siblings to stretch to match it. Tighter row
   spacing shrinks that natural height directly instead. */
.bar-list { display: flex; flex-direction: column; gap: 8px; flex: 1; justify-content: flex-start; }
.bar-row {
  display: flex; flex-direction: column; gap: 4px; border: 0; background: none;
  font-family: inherit; color: inherit; cursor: pointer; text-align: left; padding: 3px 8px;
  border-radius: var(--radius-md); transition: background 0.18s ease;
}
.bar-row:hover { background: var(--bg-third); }
.bar-row-top { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.bar-name { font-size: var(--fs-base); color: var(--text-main); font-weight: 500; }
.bar-meta { display: flex; align-items: baseline; gap: 7px; flex: none; }
.bar-count { font-size: var(--fs-md); font-weight: 700; }
/* A pill, not a thin rule: the previous 6px bar read as an underline, not a
   chart. 10px with a rounded end and a lit-to-dim gradient along its own
   length gives it enough body to actually look like a bar. */
.bar-track { height: 8px; border-radius: var(--radius-pill); background: var(--bg-muted); overflow: hidden; }
.bar-fill {
  height: 100%; width: var(--w, 0%); border-radius: var(--radius-pill);
  transition: width 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
.bar-count.alert { color: var(--alert-text); }
.bar-count.ok { color: var(--status-good-text); }
.bar-fill.alert { background: var(--alert); }
.bar-fill.ok { background: var(--ok); }
/* Progress view's weekly opened/resolved chart: two tracks per row (one bar
   chart can only ever show one fill — see .bar-track/.bar-fill above), so
   "opened" and "resolved" sit as two thin bars stacked close together
   instead of two fills clipped inside a single 8px track. */
.progress-track-pair { display: flex; flex-direction: column; gap: 4px; }
.progress-week-row { cursor: default; }
.progress-week-row:hover { background: none; }

/* "Things to fix" (brief section D): general defects and SEO problem types
   merged into one ranked list, one shared 0→max scale. Each row is a single
   line — severity shape | name | --data bar | count | delta — not the
   stacked name-then-bar layout .bar-row used, because a delta column only
   reads as a column when every row's bar ends at the same x position. */
.ttf-list { display: flex; flex-direction: column; gap: 2px; flex: 1; }
.ttf-row {
  display: grid; grid-template-columns: 12px minmax(0, 1.3fr) minmax(40px, 1fr) 34px 44px;
  align-items: center; gap: 10px; width: 100%; border: 0; background: none;
  font-family: inherit; color: inherit; cursor: pointer; text-align: left;
  padding: 6px 8px; border-radius: var(--radius-md); transition: background 0.18s ease;
}
.ttf-row:hover { background: var(--bg-third); }
.ttf-label {
  font-size: var(--fs-base); color: var(--text-main); font-weight: 500;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ttf-track { height: 8px; border-radius: var(--radius-pill); background: var(--bg-muted); overflow: hidden; }
.ttf-fill {
  height: 100%; width: var(--w, 0%); border-radius: var(--radius-pill); background: var(--data);
  transition: width 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
.ttf-count { font-size: var(--fs-md); font-weight: 700; text-align: right; }
.ttf-delta { font-size: var(--fs-sm); color: var(--text-faint); text-align: right; }
.ttf-delta.good { color: var(--delta-good); }
.ttf-delta.bad { color: var(--delta-bad); }
/* Severity shape, never color alone: triangle = critical, filled circle =
   warning, hollow ring = a suggestion (same vocabulary as the rest of the
   redesign's status shapes). */
.ttf-sev { justify-self: center; width: 11px; height: 11px; flex: none; }
.ttf-sev.critical {
  background: var(--status-critical); width: 12px; height: 10px;
  clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}
.ttf-sev.warning { background: var(--status-warning); border-radius: 50%; }
.ttf-sev.neutral { width: 9px; height: 9px; border-radius: 50%; border: 2px solid var(--status-neutral); }
@media (max-width: 480px) {
  .ttf-row { grid-template-columns: 10px minmax(0, 1fr) minmax(28px, 0.7fr) 28px 36px; gap: 6px; }
}

/* Ranked bar lists only show their top rows by default — ten rows is a lot
   to scan at once — and tuck the rest behind the same disclosure every other
   long list in the app uses. */
.bar-list-more { margin-top: 2px; }
.bar-list-more summary {
  display: flex; align-items: center; cursor: pointer; list-style: none;
  color: var(--text-faint); font-size: var(--fs-sm); padding: 3px 8px;
}
.bar-list-more summary::-webkit-details-marker { display: none; }
.bar-list-more summary:hover { color: var(--text-second); }
.bar-list-more .bar-list, .bar-list-more .ttf-list { margin-top: 4px; }

/* Bubble chart: used by the "By category" design card, which lives on its
   own full-width row (not squeezed into a narrow stacked column like the
   bar-lists above). One bubble per category — x = pages reached, y = total
   impact (pages × severity weight), size = severity weight — crossed at the
   median of each axis into a priority quadrant, same viewBox/axis shape as
   .scatter-svg right next to it in "Worst design scores", plus a clickable
   legend below since close bubbles can overlap and the exact count still
   needs to read.
   Colour marks PRIORITY, not category identity: a bubble is --alert only when
   it falls in the frequent + high-impact quadrant (fix first); every other
   bubble stays the quiet --accepted grey — same "colour only where there is
   something to act on" rule as the rest of the app, no per-category rainbow.
   The legend label + tooltip carry identity instead of colour. */
.category-chart-box { display: flex; flex-direction: column; justify-content: center; flex: 1; min-height: 0; padding-top: var(--sp-2); }
/* Plain-language answer to what the scatter plot below it is for, so reading
   the quadrant chart is optional rather than required to get the takeaway. */
.chart-callout { font-size: var(--fs-sm); color: var(--text-second); line-height: var(--lh-normal); margin: 0 0 var(--sp-3); }
.category-chart { display: flex; flex-direction: column; gap: var(--sp-2); }
/* A comfortable fixed-ish height range for the plot itself — not tied to the
   sibling card (see .grid-half, which no longer stretches cards to match one
   another) so a handful of bubbles never has to spread thin across a mostly-
   empty canvas just because the list next to it happens to be tall. The JS
   measures this rendered box before drawing so the viewBox can match it
   pixel-for-pixel; a mismatched viewBox is what makes circles stretch into
   ellipses. */
.category-chart .scatter-svg { height: 160px; max-height: 220px; flex: 1; min-width: 0; }
/* Row: a vertical y-axis (total impact) next to the plot itself, mirroring
   the horizontal x-axis (pages reached) already below it — without this, only
   one of the two axes being measured had any label at all. */
.category-plot { display: flex; gap: var(--sp-2); align-items: stretch; }
.scatter-axis-y {
  display: flex; flex-direction: column; justify-content: space-between; align-items: center;
  flex: none; width: 14px; padding: 2px 0;
  font-size: var(--fs-2xs); color: var(--text-faint); text-align: center;
}
.scatter-axis-y-title {
  writing-mode: vertical-rl; transform: rotate(180deg);
  text-transform: uppercase; letter-spacing: var(--track-caps); white-space: nowrap;
}
.category-dot {
  cursor: pointer; fill-opacity: 0.62; stroke-width: 2;
  transition: fill-opacity 180ms ease, stroke-width 180ms ease;
}
.category-dot:hover { fill-opacity: 0.88; stroke-width: 3; }
/* The bubble's own count, shown once it is big enough to hold it — same
   weight rule as every other headline number in the app (700 reserved for
   the number itself, not the label around it). */
.category-dot-label {
  font-size: 12px; font-weight: 700; fill: var(--text-main);
  text-anchor: middle; dominant-baseline: central;
}
.category-dot.hot { fill: var(--alert); stroke: var(--alert); }
.category-dot.cold { fill: var(--accepted); stroke: var(--accepted); }
/* Section F: every bubble gets its category name, not just a count inside
   the biggest ones — text colour always, never the bubble's own hue (brief
   rule: chart text is never painted in the series colour). */
.category-name-label {
  font-size: 12px; fill: var(--text-second); text-anchor: middle; pointer-events: none;
}
/* Faint on purpose — the quadrant names are context for the crosshair, not
   another data series competing with the bubbles for attention. */
.scatter-quadrant-label {
  font-size: 12px; fill: var(--text-faint); text-transform: uppercase; letter-spacing: var(--track-caps);
}
.category-legend { display: flex; flex-wrap: wrap; gap: 6px; }
.category-legend-btn {
  display: inline-flex; align-items: center; gap: 6px; border: 0;
  background: var(--bg-third); font-family: inherit; cursor: pointer;
  padding: 5px 10px; border-radius: var(--radius-pill); transition: background 0.18s ease;
}
.category-legend-btn:hover { background: var(--bg-muted); }
.category-legend-label { font-size: var(--fs-2xs); color: var(--text-second); }
.category-legend-count { font-size: var(--fs-2xs); font-weight: 700; }
.category-legend-count.hot { color: var(--alert-text); }
.category-legend-count.cold { color: var(--status-neutral-text); }
/* Section F: with the legend's bubble size now standing for something
   (average penalty, not just "bigger = more"), that meaning needs to be
   spelled out once in plain language rather than left for the viewer to
   guess from relative circle sizes. */
.category-size-note { font-size: var(--fs-2xs); color: var(--text-faint); margin: 4px 0 0; }

/* "By category" under 5 entries (brief section F): a ranked lollipop reads
   faster than a scatter plot once there are few enough rows to just read
   top-to-bottom — same row grammar as .ttf-row (label | track | value) so
   the two ranked lists in this app don't invent two different layouts for
   the same idea. One colour (--data): this chart ranks volume, it never
   grades a category as good or bad. */
.category-lollipop-list { display: flex; flex-direction: column; gap: 2px; flex: 1; }
.category-lollipop-row {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(60px, 1.4fr) 28px;
  align-items: center; gap: 10px; width: 100%; border: 0; background: none;
  font-family: inherit; color: inherit; cursor: pointer; text-align: left;
  padding: 6px 8px; border-radius: var(--radius-md); transition: background 0.18s ease;
}
.category-lollipop-row:hover { background: var(--bg-third); }
.category-lollipop-label {
  font-size: var(--fs-base); color: var(--text-main); font-weight: 500;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.category-lollipop-track { width: 100%; height: 16px; overflow: visible; }
.lollipop-stem { stroke: var(--data); stroke-width: 2px; stroke-linecap: round; }
.lollipop-dot { fill: var(--data); }
.category-lollipop-value { font-size: var(--fs-md); font-weight: 700; text-align: right; }

/* An empty state is a state, not an error. Left-aligned, measured and given a
   container, so "nothing here yet" reads as considered rather than as a stray
   grey sentence floating in a card. */
.empty {
  display: flex; align-items: flex-start; gap: 10px;
  padding: var(--sp-6) var(--sp-4); max-width: 44ch; text-align: left;
  border: 1px dashed var(--bg-muted); border-radius: var(--radius-md);
  color: var(--text-second); font-size: var(--fs-sm); line-height: var(--lh-normal);
}
.empty .icon { flex: none; margin-top: 1px; opacity: 0.55; }
/* Inside a grid an empty state is not one of the cells — it stands in for all
   of them, so it spans the row instead of sitting in the first column. */
.preview-grid > .empty, .page-grid > .empty, .scope-stats > .empty,
.preview-grid > .empty-panel, .page-grid > .empty-panel { grid-column: 1 / -1; }

/* A feature that has not run yet, not a filtered-out list — see emptyPanel()
   in app.js. Same dashed, colourless container as .empty, roomier because it
   carries a reason and, often, the one button that fixes it. */
.empty-panel {
  padding: var(--sp-6) var(--sp-4); max-width: 46ch; text-align: left;
  border: 1px dashed var(--bg-muted); border-radius: var(--radius-md);
}
.empty-panel-title { font-weight: 600; margin-bottom: 4px; }
.empty-panel-desc { color: var(--text-second); font-size: var(--fs-sm); line-height: var(--lh-normal); margin: 0 0 10px; }
.empty-panel .btn-inline { font-size: var(--fs-sm); }

/* ------------------------------------------------------------- skeletons
   The gap between the page appearing and the first response landing. A flat
   grey block, not a shimmer sweeping forever — the same restraint as the rest
   of the app's motion: a placeholder announces "loading", it does not perform
   it. Each rule targets :empty, so the instant a render function fills the
   container with real content, the skeleton simply has nothing left to match. */
.kpi.sk { gap: 8px; }
.sk-block { display: block; background: var(--bg-third); border-radius: var(--radius-md); }
.sk-w60 { width: 60%; height: 10px; }
.sk-w80 { width: 40%; height: 8px; }
.sk-h24 { width: 45%; height: 22px; border-radius: var(--radius-md); }
.trend:empty, .coverage:empty {
  background: var(--bg-third); border-radius: var(--radius-md); min-height: 170px;
}
.bar-list:empty { min-height: 170px; position: relative; }
.bar-list:empty::before {
  content: ""; position: absolute; inset: 0;
  background:
    linear-gradient(var(--bg-third) 0 18px, transparent 0 32px),
    linear-gradient(var(--bg-third) 0 18px, transparent 0 32px),
    linear-gradient(var(--bg-third) 0 18px, transparent 0 32px);
  background-repeat: no-repeat;
  background-position: 0 0, 0 40px, 0 80px;
  background-size: 100% 18px;
  border-radius: var(--radius-md);
}

/* ------------------------------------------------------------- group grid */
.group-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(118px, 1fr)); gap: 10px; }
.group-tile {
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  padding: 12px; background: var(--bg-main);
  cursor: pointer; text-align: left; font-family: inherit; color: inherit;
  display: flex; flex-direction: column; gap: 6px;
  transition: border-color 0.15s ease, transform 0.08s ease;
}
.group-tile:hover { border-color: var(--text-faint); transform: translateY(-1px); }
.group-tile.has-alert { border-color: var(--alert-line); }
.group-name { font-size: var(--fs-base); font-weight: 500; text-transform: capitalize; }
.group-meta { font-size: var(--fs-xs); color: var(--text-second); }
.dots { display: flex; gap: 3px; }
.dot { width: 6px; height: 6px; border-radius: 50%; }
.dot.ok { background: var(--bg-muted); }
.dot.review { background: var(--review-vivid); }
.dot.alert { background: var(--alert); }
.dot.accepted { background: var(--accepted); }

/* ----------------------------------------------------------- change previews */
/* A grid, not a carousel: this is the one view whose whole purpose is seeing
   every change at once, and a horizontal scroller showed three of them. */
.preview-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: var(--sp-4);
}
.slide {
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  background: var(--bg-second); overflow: hidden;
  display: flex; flex-direction: column;
  padding: 0; text-align: left; font-family: inherit; color: inherit; cursor: pointer;
  transition: transform 0.15s ease, border-color 0.15s ease;
}
.slide:hover { transform: translateY(-1px); border-color: var(--text-faint); }
.slide.alert { border-color: var(--alert-line); }
.shot-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--bg-third); }
.shot-pair.single { grid-template-columns: 1fr; }
.shot { position: relative; background: var(--bg-second); aspect-ratio: 16 / 11; overflow: hidden; cursor: zoom-in; }
.shot img { width: 100%; height: 100%; object-fit: cover; object-position: top center; display: block; }
.shot-missing {
  cursor: default; display: flex; align-items: center; justify-content: center;
  border: 1px dashed var(--border);
}
.shot-missing-label { font-size: var(--fs-2xs); color: var(--text-faint); font-family: var(--mono); }
/* Sentence case: this label carries a date, and uppercasing a date is a plain
   legibility loss for no gain. */
.shot-tag {
  position: absolute; top: 6px; left: 6px;
  font-size: var(--fs-2xs); font-family: var(--mono);
  background: rgba(0, 0, 0, 0.66); color: var(--text-on-solid);
  padding: 2px 6px; border-radius: var(--radius-md);
}
.slide-body { padding: 11px 13px; display: flex; flex-direction: column; gap: 5px; }
.slide-title { font-size: var(--fs-base); font-weight: 500; }
.slide-path { font-family: var(--mono); font-size: var(--fs-xs); color: var(--text-faint); }
/* Clamped by line, not by height: a max-height cut the third line through its
   own x-height, which looks like a rendering bug rather than a truncation. */
.slide-detail {
  font-size: var(--fs-sm); color: var(--text-second); line-height: 1.45;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}

/* -------------------------------------------------------------- page cards */
.filters { display: flex; gap: 6px; flex-wrap: wrap; }
.card-head .filters { align-self: center; }
/* Shape and weight match Gitterdone's own filter chips (same design system):
   a soft rounded rectangle, not a full pill, sitting on nothing until it
   needs to say "this one is active" or "the pointer is here". */
.chip {
  border: 1px solid var(--border); background: transparent;
  border-radius: var(--radius-lg); padding: 5px 10px;
  font-size: var(--fs-base); font-family: inherit; color: var(--text-second); cursor: pointer;
  transition: background 0.18s ease, color 0.18s ease, border-color 0.18s ease;
}
.chip:hover { color: var(--text-main); border-color: var(--text-faint); }
.chip.active { background: var(--text-main); color: var(--bg-second); border-color: var(--text-main); }

/* ------------------------------------------------ status: the gutter dot
   Four components across the app used to carry a 3px coloured stripe down their
   left edge. Twelve of them, at full saturation, on lists where most rows are
   fine — so the loudest thing on screen was the frame rather than the finding.

   They share one mechanism now: a left gutter and a small dot inside it. The
   card itself stays completely neutral, the dot is the only ink spent, and the
   title, path and tags all hang off a single vertical axis instead of being
   pushed sideways by a border. A page with nothing wrong declares no --sev at
   all, so its dot is transparent: clean pages cost no colour whatsoever. */
.page-card, .issue, .mark-row, .tip, .priority-row { position: relative; }
.page-card::before, .issue::before, .mark-row::before, .tip::before, .priority-row::before {
  content: ""; position: absolute; border-radius: 50%;
  background: var(--sev, transparent);
}

.page-card.alert, .issue.alert, .mark-row.stale, .tip.alert, .priority-row.alert { --sev: var(--alert); }
/* --review itself is deliberately darkened for AA contrast as small body text
   (see its definition), which also makes it read as a muddy brown next to
   --alert's red at dot size — exactly the "orange looks too dark" confusion
   reported against this row. The dot is a fill, not text, so it belongs on
   --review-vivid instead, same as every other non-text review use (.sw,
   .dot.review, .cov-cell.review, .sev-dot, etc.). */
.page-card.review, .issue.review, .tip.review, .priority-row.review { --sev: var(--review-vivid); }
.page-card.accepted, .issue.accepted, .mark-row.on { --sev: var(--accepted); }
/* A2 (docs/roadmap/MASTER.md): a page the crawler could not verify (bot-
   blocked, timed out, crashed) is not a defect found on the page — reusing
   --accepted's existing neutral grey (not --alert's red or --review's
   amber) says "nothing confirmed either way", matching this feature's own
   design intent: excluded from Health/Design Score, not flagged as broken. */
.page-card.unverified, .issue.unverified, .tip.unverified, .priority-row.unverified { --sev: var(--accepted); }
/* Deliberately not added to .page-card's selector list: a suggestion never
   drives a page's own severity (SEV_RANK ties it with "ok" — see app.js), it
   only ever appears as its own issue/priority row. No opacity dimming either,
   unlike .issue.accepted just above — that dimmed look IS the "marked as
   intentional" style, and a suggestion is explicitly not that. */
.issue.suggestion, .priority-row.suggestion { --sev: var(--suggestion); }
/* "gone" reuses --review-vivid (not a new colour) so it reads as its own state
   at a glance instead of the same muted grey as "on" — before this it shared
   --bg-muted with the card's own background tint, so both were indistinguishable. */
.mark-row.gone { --sev: var(--review-vivid); }
/* .ok deliberately declares nothing. */

.page-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 11px; }
/* Same "ghost row" idea Gitterdone (Buena's own task tracker, same design
   system) uses for its list items: the border is transparent at rest, so a
   clean run of cards reads as one quiet surface, and only shows a frame
   where the pointer actually is. Structural containers (.card, .kpi) stay
   bordered as before — this only applies one level down, to individual
   items inside them. */
.page-card {
  border: 1px solid transparent;
  border-radius: var(--radius-lg); padding: var(--sp-3) var(--sp-3) var(--sp-3) 26px;
  background: var(--bg-second); cursor: pointer;
  display: flex; flex-direction: column; gap: 7px;
  text-align: left; font-family: inherit; color: inherit;
  transition: transform 0.15s ease, border-color 0.15s ease;
}
/* Sits on the x-height of the title, not on the card's centre. */
.page-card::before { top: 14px; left: var(--sp-3); width: 7px; height: 7px; }
.page-card:hover { transform: translateY(-1px); border-color: var(--text-faint); }
.page-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
.page-title { font-size: var(--fs-base); font-weight: 500; line-height: 1.3; }
.page-path { font-family: var(--mono); font-size: var(--fs-xs); color: var(--text-faint); word-break: break-all; }
.badge {
  font-size: var(--fs-2xs); font-weight: 500;
  padding: 2px 7px; border-radius: var(--radius-pill); flex-shrink: 0;
  background: var(--bg-muted); color: var(--text-second);
}
.badge.alert { background: var(--alert-soft); color: var(--alert-text); }
.badge.review { background: var(--review-soft); color: var(--review); }
.badge.accepted { background: var(--accepted-soft); color: var(--status-neutral-text); }
.badge.unverified { background: var(--accepted-soft); color: var(--status-neutral-text); }
.tags { display: flex; flex-wrap: wrap; gap: 4px; }
.tag {
  font-size: var(--fs-2xs); padding: 2px 7px; border-radius: var(--radius-md);
  background: var(--bg-third); color: var(--text-second);
}
.tag.alert { background: var(--alert-soft); color: var(--alert-text); }
.tag.accepted { background: var(--accepted-soft); color: var(--status-neutral-text); }
.tag.review { background: var(--review-soft); color: var(--review); }
.tag.suggestion { background: var(--suggestion-soft); color: var(--suggestion); }

/* ----------------------------------------------------------------- staging */
.staging-empty { font-size: var(--fs-base); color: var(--text-second); line-height: 1.6; }
.staging-empty code {
  font-family: var(--mono); font-size: var(--fs-sm);
  background: var(--bg-third); padding: 2px 6px; border-radius: var(--radius-md);
}
.diff-row {
  border-top: 1px solid var(--border); padding: 11px 0;
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
}
.diff-row:first-child { border-top: none; }
.diff-info { min-width: 0; }
.diff-info strong { font-size: var(--fs-base); }
.diff-info p { margin: 3px 0 0; font-size: var(--fs-sm); color: var(--text-second); }
.diff-links { display: flex; gap: 8px; flex-shrink: 0; }
.diff-links a { font-size: var(--fs-xs); color: var(--text-second); text-decoration: none; border: 1px solid var(--border); padding: 4px 9px; border-radius: var(--radius-md); }
.diff-links a:hover { color: var(--text-main); border-color: var(--text-faint); }
.diff-path { display: block; margin-top: 3px; font-family: var(--mono); font-size: var(--fs-xs); color: var(--text-faint); }

.btn-inline {
  background: none; border: none; padding: 0;
  font-family: inherit; font-size: inherit;
  color: var(--text-main); text-decoration: underline; cursor: pointer;
}

/* General notice for config.staging.highFailureRateThreshold: most of the run
   looked blocked, so the per-page rows below are probably incomplete — this
   is about the run, not about any single page, hence a banner above the
   summary instead of yet another row in it. */
.staging-warning {
  background: var(--review-soft); border-radius: var(--radius-xl);
  padding: 12px 16px; margin-bottom: var(--sp-4);
}
.staging-warning p { margin: 0; font-size: var(--fs-sm); color: var(--review); line-height: var(--lh-normal); }

/* Only the non-zero stats get a tile (see renderStaging in app.js); the grid
   shrinks to however many that is instead of always reserving 3 columns. */
.staging-summary {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 10px; margin-bottom: 18px;
}
.st-stat {
  display: flex; flex-direction: column; gap: 2px;
  padding: 14px 16px;
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  background: var(--bg-second);
}
.st-stat strong { font-size: var(--fs-2xl); font-weight: 700; letter-spacing: var(--track-tight); }
.st-stat span { font-size: var(--fs-xs); color: var(--text-second); }
/* --review-vivid is fills/icons-only (see tokens.css) — washed-out as small
   text, same bug as .kpi.review .kpi-value above. */
.st-stat.review strong { color: var(--review); }

/* The zero stats, collapsed into one quiet line instead of empty-looking
   tiles (brief section G). */
.staging-zero-line { font-size: var(--fs-sm); color: var(--text-faint); margin: 0 0 18px; }

.staging-group { margin-top: var(--sp-6); }
.staging-group-head {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 12px; margin-bottom: var(--sp-2); padding: 0 2px;
}
.staging-group-head h3 { margin: 0; font-size: var(--fs-base); font-weight: 500; }

@media (max-width: 720px) {
  .staging-summary { grid-template-columns: 1fr; }
}

/* ------------------------------------------------------------------- modal */
.modal { position: fixed; inset: 0; z-index: 60; display: grid; place-items: center; }
.modal-backdrop { position: absolute; inset: 0; background: var(--overlay); }
.modal-panel {
  position: relative;
  width: min(460px, calc(100vw - 32px));
  max-height: calc(100vh - 48px); overflow-y: auto;
  background: var(--bg-second);
  border: 1px solid var(--border);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-pop);
  padding: var(--sp-5);
  display: flex; flex-direction: column; gap: var(--sp-4);
}
.modal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.modal-head h3 { margin: 0; font-size: var(--fs-lg); font-weight: 500; letter-spacing: -0.01em; }

.field { display: flex; flex-direction: column; gap: 6px; }
.field > span { font-size: var(--fs-sm); font-weight: 500; color: var(--text-second); }
.field > span b { color: var(--alert-text); }
.field input, .field textarea {
  padding: 9px 11px;
  border: 1px solid var(--bg-muted); border-radius: var(--radius-lg);
  background: var(--bg-main); color: var(--text-main);
  font-family: inherit; font-size: var(--fs-base);
}
.field input:focus, .field textarea:focus { outline: 2px solid var(--accent); outline-offset: -1px; border-color: transparent; }
.field small { font-size: var(--fs-xs); color: var(--text-faint); line-height: var(--lh-normal); }
.field small code {
  font-family: var(--mono); font-size: var(--fs-2xs);
  background: var(--bg-third); padding: 1px 4px; border-radius: var(--radius-sm);
}

.modal-error {
  margin: 0; padding: 9px 11px;
  border-radius: var(--radius-lg);
  background: var(--alert-soft); color: var(--alert-text);
  font-size: var(--fs-sm);
}
.modal-foot { display: flex; align-items: center; gap: 8px; }
.modal-foot .spacer { flex: 1; }

/* --------------------------------------------------------------- repair modal */
.repair-panel { width: min(520px, calc(100vw - 32px)); }
.repair-body { display: flex; flex-direction: column; gap: var(--sp-3); font-size: var(--fs-sm); }
.repair-context {
  padding: 8px 11px; border-radius: var(--radius-md); background: var(--bg-main);
  color: var(--text-second); line-height: var(--lh-normal);
}
.repair-context b { color: var(--text-main); font-weight: 500; }
.repair-loading {
  display: flex; align-items: center; gap: 9px;
  padding: 10px 0; color: var(--text-second);
}
.repair-loading .icon { animation: spin 1.1s linear infinite; }
.repair-suggestion {
  padding: 10px 12px; border-radius: var(--radius-md);
  background: var(--accepted-soft); border: 1px solid transparent;
}
.repair-suggestion a { font-weight: 500; word-break: break-all; }
.repair-suggestion p { margin: 6px 0 0; color: var(--text-second); line-height: var(--lh-normal); }
.repair-none {
  padding: 10px 12px; border-radius: var(--radius-md);
  background: var(--bg-main); color: var(--text-second); line-height: var(--lh-normal);
}
.repair-note { font-size: var(--fs-xs); color: var(--text-faint); }

/* --------------------------------------------------------------- onboarding
   Same modal shell as siteModal/dialog/repairModal; the four steps are text
   the JS writes in (see onboardingSteps() in app.js), not baked into the
   markup, so a language toggle mid-tour just re-renders the current step
   instead of fighting translateStatic(). Reopened any time from the
   sidebar's own "How this works" button — see helpBtn. The dot transition
   is finite (state change on click/step, never animation-iteration-count:
   infinite) and .onboarding-panel inherits .modal-panel's floating
   box-shadow rather than adding one of its own. */
.onboarding-panel { width: min(480px, calc(100vw - 32px)); }
.onboarding-head-text { display: flex; align-items: center; gap: 10px; }
.onboarding-body { margin: 0; color: var(--text-second); line-height: var(--lh-normal); }
.onboarding-dots { display: flex; gap: 6px; justify-content: center; }
.onboarding-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--bg-muted);
  transition: background-color 0.18s ease, transform 0.18s ease;
}
.onboarding-dot.on { background: var(--text-second); transform: scale(1.3); }

/* --------------------------------------------------------- ai design review
   Phase 4 (PRD-design-ai): a page-level, click-only section, kept visually
   separate from the Design Score row above it and the itemized findings below
   it — this is judgment, not measurement, and the two must never blur into
   each other. Observation cards reuse .issue/.dx/.tag as-is (see aiObsCard()
   in app.js): a card with no severity class declares no --sev, so its dot
   stays transparent — the same "clean costs no colour" rule real findings
   follow, since a qualitative observation is a suggestion, not a defect. */
.ai-review { margin: var(--sp-5) 0; padding-top: var(--sp-4); border-top: 1px solid var(--border); }
.ai-review-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: var(--sp-3); flex-wrap: wrap; }
.ai-review-head .btn-ghost { flex: none; white-space: nowrap; }
/* Standalone compact cards (Staging vs. live, AI review) on the page-detail
   view: this .ai-review block is the card's entire content there, so the
   divider/top-padding meant for "a section further down a long drawer"
   would just be a floating rule at the very top of an otherwise-empty card. */
.pd-staging-card .ai-review, .pd-ai-card .ai-review { margin-top: 0; padding-top: 0; border-top: none; }
.ai-review-head h4 { margin: 0; font-size: var(--fs-md); font-weight: 500; color: var(--text-main); }
.ai-review-list { display: flex; flex-direction: column; gap: var(--sp-2); }
.ai-review-note {
  margin: 0; padding: 10px 12px; border-radius: var(--radius-md);
  background: var(--bg-main); color: var(--text-second); font-size: var(--fs-sm); line-height: var(--lh-normal);
}
.ai-review-note.hidden { display: none; }
.ai-review-desc { margin: 0; font-size: var(--fs-sm); color: var(--text-second); line-height: var(--lh-normal); }

/* --------------------------------------------------------- staging/live */
.plive-tabs { display: flex; gap: 6px; margin-bottom: var(--sp-3); }
.plive-tabs.hidden { display: none; }
.plive-diff { margin-bottom: var(--sp-3); }
.plive-diff.hidden { display: none; }
.plive-diff-title { margin: 0 0 4px; font-size: var(--fs-sm); color: var(--text-second); }
.plive-item {
  display: flex; align-items: center; gap: 8px; padding: 7px 9px;
  border-radius: var(--radius-md); background: var(--bg-main);
}
.plive-url { font-size: var(--fs-sm); color: var(--text-second); word-break: break-all; }
.plive-ok { margin: 0; font-size: var(--fs-sm); color: var(--text-second); }

/* ------------------------------------------------------------- ai suggest */
.ai-suggest { width: 100%; display: flex; flex-direction: column; gap: 8px; align-items: flex-start; }
.ai-suggest-result { width: 100%; }
.ai-suggest-draft { font-style: italic; color: var(--text-main); }
.ai-suggest-actions { display: flex; gap: 8px; margin-top: 8px; }
/* --------------------------------------------------------- SERP simulator
   Two side-by-side preview cards (current text vs. an AI rewrite) for a long
   or missing meta description, sharing one platform switcher. Unlike the
   rest of Ojo's own UI, these cards deliberately use each platform's real,
   fixed-light chrome (Google's blue link, Facebook/X's link-card, Instagram's
   caption, WhatsApp's bubble) instead of the dashboard's neutral tokens —
   the whole point is recognising at a glance which destination is being
   previewed, which a same-grey-box-for-everything design can't do. The
   "colour only where you act" rule is about Ojo's own interface; a mockup of
   someone else's product is expected to look like that product. */
.serp-sim { width: 100%; display: flex; flex-direction: column; gap: var(--sp-3); }
.serp-tabs { display: flex; flex-wrap: wrap; gap: 6px; }
.serp-tab {
  border: 1px solid var(--border); background: transparent;
  border-radius: var(--radius-lg); padding: 4px 9px;
  font-size: var(--fs-xs); font-family: inherit; color: var(--text-second); cursor: pointer;
  transition: background 0.18s ease, color 0.18s ease, border-color 0.18s ease;
}
.serp-tab:hover { color: var(--text-main); border-color: var(--text-faint); }
.serp-tab.active { background: var(--text-main); color: var(--bg-second); border-color: var(--text-main); }
.serp-cols { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-3); }
.serp-col { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }
.serp-col-head { font-size: var(--fs-xs); color: var(--text-faint); text-transform: uppercase; letter-spacing: 0.03em; }
.serp-card {
  width: 100%; border-radius: var(--radius-md); overflow: hidden;
  min-height: 64px; font-family: Arial, Helvetica, sans-serif;
}
.serp-card-ai { box-shadow: 0 0 0 2px var(--accepted-soft) inset; }
.serp-snippet { margin: 0; line-height: var(--lh-normal); font-size: var(--fs-sm); white-space: pre-wrap; }
.serp-cutnote { display: block; margin-top: 6px; color: var(--text-faint); font-size: var(--fs-2xs); font-family: inherit; }
.serp-card--instagram > .serp-cutnote { margin: -2px 10px 10px; }
.serp-empty { margin: 0; padding: 10px 12px; color: var(--text-faint); font-size: var(--fs-sm); font-family: inherit; background: var(--bg-main); border: 1px solid var(--border); border-radius: inherit; }
@media (max-width: 560px) { .serp-cols { grid-template-columns: 1fr; } }

/* Google: modern SERP layout — favicon + domain on top, blue title, grey
   snippet — all on Google's own white result background. */
.serp-card--google { background: #fff; border: 1px solid #dfe1e5; padding: 10px 12px; }
.serp-g-head { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
.serp-g-favicon { width: 16px; height: 16px; border-radius: 50%; background: #e8eaed; flex-shrink: 0; }
.serp-g-domain { font-size: 13px; color: #202124; }
.serp-g-title { margin: 0 0 2px; font-size: 16px; color: #1a0dab; line-height: 1.3; }
.serp-g-desc { color: #4d5156 !important; font-size: 13px; }

/* Facebook / X: image-topped link card. Facebook's is a flat grey footer;
   X's is a single rounded card with a thin border, closer to how each
   product actually renders a shared link. */
.serp-card--facebook { background: #fff; border: 1px solid #dadde1; }
.serp-card--x { background: #fff; border: 1px solid #cfd9de; border-radius: 16px; }
.serp-image { display: block; width: 100%; aspect-ratio: 1.91 / 1; object-fit: cover; background: var(--bg-third); }
.serp-card-body { padding: 8px 12px 10px; }
.serp-card-body--facebook { background: #f0f2f5; }
.serp-domain { display: block; font-size: 12px; letter-spacing: 0.02em; color: #65676b; margin-bottom: 2px; }
.serp-title { margin: 0 0 2px; font-size: 14px; font-weight: 700; color: #050505; line-height: 1.3; }
.serp-card--x .serp-snippet, .serp-card--facebook .serp-snippet { color: #65676b; font-size: 13px; }

/* Instagram: square photo + caption row (bold handle, then the text), the
   closest recognisable stand-in for a link shared in a caption or bio. */
.serp-card--instagram { background: #fff; border: 1px solid #dbdbdb; }
.serp-ig-head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; }
.serp-ig-avatar { width: 24px; height: 24px; border-radius: 50%; background: linear-gradient(135deg, #f9ce34, #ee2a7b 60%, #6228d7); flex-shrink: 0; }
.serp-ig-user { font-size: 13px; font-weight: 600; color: #262626; }
.serp-card--instagram .serp-image-square { aspect-ratio: 1 / 1; }
.serp-ig-caption { margin: 0; padding: 8px 10px 10px; font-size: 13px; color: #262626; line-height: 1.35; }
.serp-ig-caption .serp-ig-user { margin-right: 4px; }

/* WhatsApp: an outgoing chat-bubble link preview, the shape everyone already
   recognises from sharing a link in a DM. */
.serp-card--whatsapp { background: #e5ddd5; padding: 10px; display: flex; justify-content: flex-end; }
.serp-wa-bubble { max-width: 92%; background: #d9fdd3; border-radius: var(--radius-sm) var(--radius-sm) 2px var(--radius-sm); overflow: hidden; }
.serp-wa-body { padding: 7px 9px 9px; }
.serp-wa-body .serp-title { color: #111b21; }
.serp-wa-body .serp-snippet { color: #3b4a54; font-size: 13px; }
.serp-wa-body .serp-domain { margin: 4px 0 0; text-transform: uppercase; color: #667781; }

.gen-image-prompt { display: flex; gap: 8px; width: 100%; }
.gen-image-input {
  flex: 1; min-width: 0; padding: 6px 10px; border-radius: var(--radius-md);
  border: 1px solid var(--border); background: var(--bg-main); color: var(--text-main);
  font-size: var(--fs-sm);
}
.gen-image-grid { display: flex; flex-wrap: wrap; gap: 10px; }
.gen-image-cell { display: flex; flex-direction: column; gap: 6px; align-items: center; width: 140px; }
.gen-image-cell img { width: 140px; height: 140px; object-fit: cover; border-radius: var(--radius-md); border: 1px solid var(--border); }

/* The confirm dialog replaces window.confirm(), so it has to carry the sentence
   that explains the consequence — pre-line keeps the paragraph break the copy
   writes, instead of running the warning into the description. */
.dialog-body {
  margin: 0; white-space: pre-line;
  font-size: var(--fs-sm); color: var(--text-second); line-height: var(--lh-normal);
}
.dialog-body:empty { display: none; }
.btn-danger {
  padding: 9px 13px;
  border: 1px solid var(--alert-line); border-radius: var(--radius-lg);
  background: var(--alert-soft); color: var(--alert-text);
  font-family: inherit; font-size: var(--fs-base); cursor: pointer;
}
.btn-danger:hover { background: var(--critical-solid-hover); color: var(--text-on-solid); }

/* ----------------------------------------------------------------- history */
/* Section I: day × time-slot heatmap, coloured by the worst run in each
   slot. Reuses .cov-cell/.sw-shape wholesale (same alert=square/review=
   rounded/ok=faint-square shapes as Coverage) so the two "worst status per
   cell" grids in the app share one visual language and the legend colours
   are guaranteed to match the cells exactly, per the brief's own rule for
   Coverage, applied here too. */
.history-heatmap {
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: var(--sp-3) var(--sp-5);
  margin-bottom: var(--sp-3);
}
.hm-legend { display: flex; flex-wrap: wrap; gap: 14px; margin-bottom: var(--sp-2); }
.hm-legend-item { display: flex; align-items: center; gap: 6px; font-size: var(--fs-xs); color: var(--text-second); }
/* Only the grid itself scrolls at 400px — never the page body — so the card
   stays legible without the day/slot labels ever compressing unreadably. */
.hm-scroll { overflow-x: auto; }
.hm-grid {
  display: grid; grid-template-columns: 40px repeat(4, 1fr); gap: 4px;
  align-items: center; min-width: 360px;
}
.hm-corner { min-width: 40px; }
.hm-colhead, .hm-rowhead {
  font-family: var(--mono); font-size: var(--fs-2xs); color: var(--text-faint);
  text-align: center;
}
.hm-rowhead { text-align: left; }
/* Fixed row height, not aspect-ratio — a 1fr column here is wide (one of only
   four across the card's full width), so sizing height off that width the
   way .cov-cell does made every row balloon to ~190px. A heatmap row reads
   at a glance specifically because it stays short. */
.hm-cell { width: 100%; height: 26px; border: 0; padding: 0; cursor: pointer; box-sizing: border-box; }
.history-list {
  display: flex; flex-direction: column;
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: 2px var(--sp-5);
}
.history-list:has(.empty), .history-list:has(.empty-panel) { background: none; border: 0; padding: 0; }
.history-item { border-top: 1px solid var(--border); }
.history-item:first-child { border-top: none; }
.history-row {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 0;
  font-size: var(--fs-base);
  cursor: pointer;
}
.history-chevron { color: var(--text-faint); flex-shrink: 0; transition: transform 0.18s ease; }
.history-item.open .history-chevron { transform: rotate(180deg); color: var(--text-second); }
.history-date { font-family: var(--mono); font-size: var(--fs-sm); color: var(--text-second); min-width: 120px; }
.history-open { font-size: var(--fs-sm); color: var(--text-second); min-width: 170px; }
.history-open.muted { color: var(--text-faint); font-style: italic; }
/* Section I: open-state used to be red/amber TEXT ("8 with alerts") — a
   persistent count, not news, so it no longer gets the alert hue. Three
   compact bars (alerts / review / broken links) at one shared scale replace
   it; the number is always printed too, so colour is never the only signal. */
.history-openbars { display: flex; align-items: center; gap: 10px; min-width: 190px; }
.hob-item { display: flex; align-items: center; gap: 5px; }
.hob-track {
  display: block; width: 30px; height: 6px; border-radius: 3px;
  background: var(--status-empty); overflow: hidden;
}
.hob-fill { display: block; height: 100%; border-radius: 3px; background: var(--text-faint); }
.hob-fill.critical { background: var(--status-critical); }
.hob-fill.warning { background: var(--status-warning); }
.hob-count { font-size: var(--fs-xs); color: var(--text-second); min-width: 10px; }
.history-summary { color: var(--text-second); font-size: var(--fs-sm); }
/* The only red left on this row: counts that are genuinely new and bad this
   run (draft leaks, newly-broken links, staging links found live) — not the
   neutral "added/removed/text changed" facts next to them. */
.history-new-bad { color: var(--alert-text); font-weight: 600; }
/* Revealed on click — the extra fields the one-line row above has no room
   for (health/design score at that run, plus summary fields the inline
   line skips). display:flex is toggled from JS, not this rule, so it stays
   in sync with the .open class on .history-item. */
.history-detail { flex-wrap: wrap; gap: 6px 18px; padding: 0 0 12px 22px; font-size: var(--fs-sm); color: var(--text-second); }
.history-detail.history-detail-empty { color: var(--text-faint); font-style: italic; }
.history-more { margin: var(--sp-3) 0; }
/* Brief section 5: every chart legible at 400px, no horizontal scroll on the
   body. .history-row's three fixed-min-width columns (date/bars/summary)
   added up to more than a narrow screen has — with min-width still in force
   the row pushed the whole page wider instead of wrapping. Letting the row
   wrap, and dropping the min-widths so each piece can actually shrink,
   keeps every field readable top-to-bottom instead of forcing a sideways
   scroll to read the last column. */
@media (max-width: 480px) {
  .history-row { flex-wrap: wrap; row-gap: 6px; }
  .history-date, .history-open, .history-openbars { min-width: 0; }
  .history-summary { flex-basis: 100%; margin-left: 30px; }
}
.signup-email { font-family: var(--mono); font-size: var(--fs-sm); min-width: 220px; }

/* Left, like everything above it. A centred line under an entirely left-aligned
   page is the one place the layout stops agreeing with itself. */
.foot {
  text-align: left; color: var(--text-faint); font-size: var(--fs-xs);
  border-top: 1px solid var(--border);
  padding-top: var(--sp-4); margin-top: var(--sp-8);
}

.issue {
  border: 1px solid var(--border);
  border-radius: var(--radius-lg); padding: var(--sp-3) var(--sp-3) var(--sp-3) 25px; margin-bottom: var(--sp-2);
}
.issue::before { top: 14px; left: var(--sp-3); width: 7px; height: 7px; }
/* A finding somebody has signed off on recedes: it is still fully readable, but
   it should never be the first thing the eye lands on in a list of real work. */
.issue.accepted { opacity: 0.78; }
.issue.accepted:hover { opacity: 1; }
.issue-head { display: flex; align-items: center; gap: 8px; margin-bottom: 5px; }
.issue-head strong { font-size: var(--fs-base); }
.issue p { margin: 0; font-size: var(--fs-sm); color: var(--text-second); line-height: var(--lh-normal); word-break: break-word; }
.issue-since { font-size: var(--fs-xs); color: var(--text-faint); margin-top: 5px; display: block; }

.bp-compare { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 8px; }
.bp-side { background: var(--bg-main); border-radius: var(--radius-md); padding: 8px 10px; }
.bp-side span {
  font-size: var(--fs-2xs); font-weight: 500;
  text-transform: uppercase; letter-spacing: var(--track-caps);
  color: var(--text-faint); display: block; margin-bottom: 3px;
}
.bp-side p { font-size: var(--fs-sm); color: var(--text-main); }

.word-diff { margin-top: 8px; font-size: var(--fs-sm); line-height: 1.6; background: var(--bg-main); padding: 9px 11px; border-radius: var(--radius-md); }
/* The one place green survives: here it is not "everything is fine", it is
   "this text was added", which is information the reader needs. */
.word-diff ins { background: var(--ok-soft); color: var(--add); text-decoration: none; padding: 0 2px; border-radius: var(--radius-md); }
.word-diff del { background: var(--alert-soft); color: var(--del); padding: 0 2px; border-radius: var(--radius-md); }
.word-diff .ctx { color: var(--text-faint); }

/* ------------------------------------------------------- issue diagnosis */
/* Each finding reads top to bottom: what was found, what it means, where it is,
   and what to do. The blocks are tinted differently so the eye can jump to the
   fix without reading the rest. */
.issue-detail { font-family: var(--mono); font-size: var(--fs-sm) !important; }
.issue-target {
  display: block; font-family: var(--mono); font-size: var(--fs-xs); margin-top: 4px;
  color: var(--link); text-decoration: none; word-break: break-all;
}
.issue-target:hover { text-decoration: underline; }

/* --------------------------------------------------------------- priority */
.priority-list { display: flex; flex-direction: column; gap: 10px; }
.priority-row {
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  padding: 16px 16px 16px 28px;
}
.priority-row::before { top: 16px; left: var(--sp-3); width: 7px; height: 7px; }
.priority-head { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-bottom: 8px; }
.priority-head strong { font-size: var(--fs-base); }
.priority-detail { font-family: var(--mono); font-size: var(--fs-sm) !important; color: var(--text-second); }
.priority-page-btn {
  display: inline-flex; align-items: center; margin-top: 8px; margin-right: 8px;
  font-size: var(--fs-xs); padding: 3px 9px; border-radius: var(--radius-md);
  background: var(--bg-main); border: 1px solid var(--border); color: var(--link);
  cursor: pointer;
}
.priority-page-btn:hover { text-decoration: underline; }
.priority-pages { margin-top: 8px; }
.priority-pages summary { cursor: pointer; list-style: none; color: var(--text-faint); font-size: var(--fs-sm); }
.priority-pages summary::-webkit-details-marker { display: none; }
.priority-pages summary:hover { color: var(--text-second); }
.priority-page-list { margin-top: 6px; display: flex; flex-wrap: wrap; }

/* Two-column broken-link card (Links section): the text above capped at
   650px on the left, the "normal page" + "broken page/404" screenshots on
   the right — see renderLinksSection() and shotBox(). Only links the app
   actually classifies as broken get this; "blocked for bots" links keep the
   single-column layout, since there is no target screenshot for those (see
   the comment on linkShotUrl() in src/workspace.js). Wraps to a single
   column on narrow screens, where there is no room for both side by side. */
.link-card-cols { display: flex; gap: 20px; align-items: flex-start; flex-wrap: wrap; margin-top: 4px; }
.link-card-text { flex: 1 1 320px; max-width: 650px; min-width: 0; }
.link-card-shots {
  flex: 1 1 280px; max-width: 420px; align-self: stretch;
  display: grid; grid-template-columns: 1fr 1fr; gap: 1px;
  background: var(--bg-third); border-radius: var(--radius-md); overflow: hidden;
}
@media (max-width: 720px) {
  .link-card-shots { grid-template-columns: 1fr; max-width: none; }
}

/* Fix list's "assign to a person" row — reuses .gen-image-input's field style
   so this doesn't invent a second text-input look. A small inline status
   ("Saved"/"Could not save") appears next to the field instead of a toast,
   since several rows can be edited one after another. */
.fixlist-assign { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
.fixlist-assign-input {
  flex: 0 1 220px; padding: 6px 10px; border-radius: var(--radius-md);
  border: 1px solid var(--border); background: var(--bg-main); color: var(--text-main);
  font-size: var(--fs-sm);
}
.fixlist-assign-input:disabled { opacity: 0.5; cursor: not-allowed; }
.fixlist-assign-status { font-size: var(--fs-xs); color: var(--text-faint); }

/* "Suggest a replacement URL" on a broken link — see renderLinkFixBox() and
   src/link-fixes.js. Reuses .gen-image-prompt/.gen-image-input for the input
   row so this doesn't invent a second text-field style. */
.link-fix { margin-top: 10px; }
.link-fix-saved {
  margin: 0; font-size: var(--fs-sm); color: var(--text-second);
  display: flex; align-items: baseline; gap: 4px; flex-wrap: wrap;
}
.link-fix-saved strong { color: var(--text-main); font-weight: 500; }
.link-fix-saved a { word-break: break-all; }
.link-fix-actions { display: flex; gap: 8px; margin-top: 6px; }

.design-scatter { margin-bottom: var(--sp-3); }
/* .scatter-svg/.scatter-axis below are shared with the "By category" bubble
   chart (renderDesignBreakdown) — only the base rules stay here; the dot/line
   styles that used to belong to the old "Worst design scores" line chart were
   exclusive to it and were removed with it (see .dotplot-dot/.dotplot-penalty
   near the rest of the .dotplot* rules further down for its replacement). */
.scatter-svg { width: 100%; height: 108px; display: block; }
.scatter-svg :where(line, path, circle) { vector-effect: non-scaling-stroke; }
.scatter-axis {
  display: flex; justify-content: space-between;
  font-size: var(--fs-2xs); color: var(--text-faint); margin-top: 2px;
}
.scatter-axis span:nth-child(2) { text-transform: uppercase; letter-spacing: var(--track-caps); }

/* Overview "worst design scores" card: a dot plot, not two separate charts.
   Every row's dot sits on the SAME 40-100 scale (see worstDesignPct in
   app.js), so position alone is the cross-page comparison — unlike the old
   per-row mini-bar, which sized each page's bars to that page's own worst
   category and so could render a -6 page and a -24 page as an identically
   "full" bar, and unlike the old rank-ordered connecting line above it, whose
   x axis was never a real quantity. One shared .dotplot-axis at the bottom
   labels the scale once for every row, context row included. */
.dotplot { display: flex; flex-direction: column; }
/* The context row: every qualifying page as one small, low-opacity dot —
   overlap is deliberate (pages sharing a score darken together instead of
   being jittered apart), so the overall distribution reads as a density
   before any single row below is labeled. Not a button: it stands for the
   whole set, not one clickable page. */
.dsplot-context { cursor: default; }
.dsplot-context .dotplot-track { height: 20px; }
.dsplot-faint {
  position: absolute; top: 50%; width: 6px; height: 6px; border-radius: 50%;
  transform: translate(-50%, -50%); background: var(--text-faint); opacity: 0.45;
}
/* The gap from 100 at scale, drawn behind the dot it belongs to — only on the
   5 highlighted rows below the context row, never repeated for every page. */
.dotplot-penalty { position: absolute; top: 50%; height: 2px; transform: translateY(-50%); border-radius: 1px; opacity: 0.35; }
.dotplot-penalty.alert { background: var(--status-critical); }
.dotplot-penalty.review { background: var(--status-warning); }
.dotplot-penalty.ok { background: var(--status-good); }
.dotplot-row {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(90px, 180px) 28px;
  align-items: center; gap: var(--sp-3); width: 100%;
  border: none; border-top: 1px solid var(--border);
  background: none; cursor: pointer; text-align: left; font-family: inherit; color: inherit;
  padding: 9px 2px;
}
.dotplot-row:first-child { border-top: none; }
.dotplot-row:hover .dotplot-title { color: var(--link); }
.dotplot-label { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.dotplot-title-row { display: flex; align-items: baseline; gap: 6px; min-width: 0; }
.dotplot-title {
  font-size: var(--fs-sm); font-weight: 600; color: var(--text-main);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0;
  transition: color 0.15s ease;
}
/* vs the previous scored run for this one page — its own element rather than
   appended into .dotplot-title's text, so it never gets swallowed by that
   title's ellipsis on a long page name. flex: none keeps it from shrinking
   even when the title next to it has to. */
.dotplot-delta {
  flex: none; font-size: var(--fs-2xs); font-weight: 600; color: var(--text-faint);
  font-variant-numeric: tabular-nums;
}
.dotplot-path {
  font-family: var(--mono); font-size: var(--fs-2xs); color: var(--text-faint);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.dotplot-track { position: relative; height: 14px; }
.dotplot-track::before {
  content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 1px;
  background: var(--border);
}
.dotplot-dot {
  position: absolute; top: 50%; width: 10px; height: 10px; border-radius: 50%;
  transform: translate(-50%, -50%); box-shadow: 0 0 0 2px var(--bg-second);
}
.dotplot-dot.alert { background: var(--status-critical); }
.dotplot-dot.review { background: var(--status-warning); }
.dotplot-dot.ok { background: var(--status-good); }
.dotplot-score { font-size: var(--fs-sm); font-weight: 700; color: var(--text-main); text-align: right; }
.dotplot-axis {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(90px, 180px) 28px;
  gap: var(--sp-3); margin-top: var(--sp-2);
}
.dotplot-axis-track { position: relative; height: 14px; }
.dotplot-axis-tick {
  position: absolute; top: 0; transform: translateX(-50%);
  font-size: var(--fs-2xs); color: var(--text-faint);
}
.dotplot-axis-tick:first-child { transform: translateX(0); }
.dotplot-axis-tick:last-child { transform: translateX(-100%); }
@media (max-width: 480px) {
  .dotplot-row, .dotplot-axis { grid-template-columns: minmax(0, 1fr) minmax(60px, 110px) 24px; gap: var(--sp-2); }
  .dotplot-path { display: none; }
}

/* Section 4.1: slope chart, staging vs live content length. One diagonal
   line per page whose content differs; only the top-5 by |lengthDelta| get
   full opacity, a label and real button hit targets at both endpoints —
   same "context + top-N labeled" split as .dotplot above. A content-length
   difference has no inherent good/bad direction, so every line/dot uses the
   neutral --data token, never a severity colour. */
.slope-chart {
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: var(--sp-3) var(--sp-5);
  margin-bottom: var(--sp-3);
}
.slope-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-2); margin-bottom: var(--sp-2); }
.slope-head h3 { font-size: var(--fs-sm); font-weight: 700; color: var(--text-main); margin: 0; }
.slope-cols {
  display: flex; justify-content: space-between; font-family: var(--mono);
  font-size: var(--fs-2xs); color: var(--text-faint); margin-bottom: 4px;
}
/* Fixed height, margin on the sides to leave room for the end dots (which
   sit exactly at left:0/left:100% and would otherwise render half-clipped). */
.slope-wrap { position: relative; height: 280px; margin: 0 10px; }
.slope-svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.slope-line { stroke: var(--data); }
.slope-line.context { stroke-opacity: 0.25; stroke-width: 1; }
.slope-line.highlight { stroke-opacity: 0.9; stroke-width: 2; }
.slope-dot {
  position: absolute; top: 0; width: 10px; height: 10px; border-radius: 50%;
  transform: translate(-50%, -50%); background: var(--data);
  border: 2px solid var(--bg-second); padding: 0; cursor: pointer;
}
.slope-dot.staging { left: 0; }
.slope-dot.live { left: 100%; }
/* Anchored to the left (staging) column, not centered on the line — a
   shared midpoint is where crossing lines collide most often, while the
   staging-side value spreads naturally across the full height of the axis. */
.slope-label {
  position: absolute; top: 0; left: 14px; transform: translateY(-50%);
  font-size: var(--fs-2xs); color: var(--text-second); white-space: nowrap;
  background: var(--bg-second); padding: 0 4px; pointer-events: none;
  max-width: 45%; overflow: hidden; text-overflow: ellipsis;
}
@media (max-width: 480px) {
  .slope-wrap { height: 340px; }
  .slope-label { font-size: 12px; max-width: 55%; }
}

/* Section 4.3: strip plot of broken-link age, above the Links list. A 1D
   beeswarm (see renderLinksStrip()'s row-packing) rather than a single
   overlapping line of dots — rows exist purely to stop points colliding,
   they carry no meaning of their own, unlike the slope chart's two named
   columns. Broken links are inherently bad, so this is the one strip/dot
   chart in the app that uses --status-critical rather than the neutral
   --data token. */
.strip-chart {
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: var(--sp-3) var(--sp-5);
  margin-bottom: var(--sp-3);
}
.strip-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-2); margin-bottom: var(--sp-2); }
.strip-head h3 { font-size: var(--fs-sm); font-weight: 700; color: var(--text-main); margin: 0; }
.strip-wrap {
  position: relative; margin: 0 10px;
  height: max(48px, calc(var(--rows, 1) * 26px + 14px));
}
.strip-svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.strip-dot {
  position: absolute; width: 10px; height: 10px; border-radius: 50%;
  transform: translate(-50%, -50%); background: var(--status-critical);
  border: 2px solid var(--bg-second); padding: 0; cursor: pointer;
}
.strip-dot.labeled { width: 12px; height: 12px; }
/* Anchor flips near either edge (see renderLinksStrip()'s anchorFor()) so a
   0d or max-day label never centers itself half outside the card. */
.strip-label {
  position: absolute; top: 0;
  font-size: var(--fs-2xs); color: var(--text-second); white-space: nowrap;
  pointer-events: none;
}
.strip-label.anchor-center { transform: translate(-50%, -18px); }
.strip-label.anchor-left { transform: translate(0, -18px); }
.strip-label.anchor-right { transform: translate(-100%, -18px); }
.strip-axis {
  display: flex; justify-content: space-between;
  font-size: var(--fs-xs); color: var(--text-faint); margin-top: 6px;
}
@media (max-width: 480px) {
  .strip-label { font-size: 12px; }
}

.dx { margin-top: 9px; padding: 8px 11px; border-radius: var(--radius-md); background: var(--bg-main); }
.dx-label {
  display: block; font-size: var(--fs-2xs); font-weight: 500;
  text-transform: uppercase; letter-spacing: var(--track-caps);
  color: var(--text-faint); margin-bottom: 4px;
}
.dx ul, .dx ol { margin: 0; padding-left: 17px; }
.dx li { font-size: var(--fs-sm); color: var(--text-second); line-height: 1.55; margin-bottom: 3px; }
.dx li::marker { color: var(--text-faint); }
/* The fix block earns its emphasis with a border and darker text rather than a
   green wash: it is the part you act on, not the part that is going well. */
.dx-fix { background: var(--bg-main); border-left: 1px solid var(--bg-muted); }
.dx-fix .dx-label { color: var(--text-second); }
.dx-fix li { color: var(--text-main); }
.dx-evidence { background: transparent; padding: 4px 0 0; }
.dx-evidence li { font-size: var(--fs-xs); color: var(--text-faint); }
.dx-evidence summary {
  display: block; cursor: pointer; list-style: none; user-select: none;
  font-size: var(--fs-2xs); font-weight: 500; text-transform: uppercase;
  letter-spacing: var(--track-caps); color: var(--text-faint); margin-bottom: 4px;
}
.dx-evidence summary::-webkit-details-marker { display: none; }
.dx-evidence summary:hover { color: var(--text-second); }
.dx-evidence[open] summary { margin-bottom: 4px; }
.dx-evidence ul { margin-top: 4px; }

.dx-check { margin-top: 9px; border-top: 1px solid var(--border); padding-top: 7px; }
.dx-check summary {
  cursor: pointer; font-size: var(--fs-xs); color: var(--text-faint);
  list-style: none; user-select: none;
}
.dx-check summary::-webkit-details-marker { display: none; }
.dx-check summary:hover { color: var(--text-second); }
.dx-check p { margin-top: 6px !important; font-size: var(--fs-sm) !important; }
.dx-check b { color: var(--text-main); }

/* ----------------------------------------------- marking a finding as meant */
/* The decision sits at the bottom of the card, after everything that informs
   it: what was found, what it means, and what fixing it would involve. */
.issue-foot {
  margin-top: 10px; padding-top: 9px; border-top: 1px solid var(--border);
  display: flex; flex-direction: column; gap: 8px; align-items: flex-start;
}
.mark-btn { font-size: var(--fs-xs); padding: 5px 10px; }
.mark-btn.on { color: var(--text-faint); }

.accepted-note, .accepted-stale { width: 100%; padding: 8px 11px; border-radius: var(--radius-md); }
.accepted-note { background: var(--accepted-soft); }
.accepted-note .dx-label { color: var(--status-neutral-text); }
.accepted-note small, .accepted-stale small {
  display: block; margin-top: 5px; font-size: var(--fs-xs); color: var(--text-faint);
}
/* A mark that stopped applying is the one thing here that has to be loud: a
   decision was made about something that is no longer the same. */
.accepted-stale { background: var(--alert-soft); }
.accepted-stale .dx-label { color: var(--alert-text); }

/* --------------------------------------------------- intentional (the list) */
.mark-row {
  border: 1px solid var(--border); background: var(--bg-second);
  border-radius: var(--radius-lg); padding: var(--sp-3) var(--sp-4) var(--sp-3) 27px; margin-bottom: var(--sp-2);
  display: flex; flex-direction: column; gap: 5px; align-items: flex-start;
}
.mark-row::before { top: 16px; left: var(--sp-3); width: 7px; height: 7px; }
.mark-row.gone { opacity: 0.7; }
.mark-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.mark-head strong { font-size: var(--fs-base); }
.mark-row p { margin: 0; font-size: var(--fs-sm); color: var(--text-second); line-height: var(--lh-normal); word-break: break-word; }
.mark-detail { font-family: var(--mono); font-size: var(--fs-xs) !important; }
.mark-now { color: var(--alert-text) !important; font-size: var(--fs-sm) !important; }
.mark-note { font-style: italic; color: var(--text-main) !important; }
.mark-meta { display: flex; gap: 10px; flex-wrap: wrap; font-size: var(--fs-xs); color: var(--text-faint); }
.mark-path { font-family: var(--mono); color: var(--link); text-decoration: none; }
.mark-path:hover { text-decoration: underline; }

.mark-log { margin-top: 14px; border-top: 1px solid var(--border); padding-top: 10px; }
.mark-log summary {
  cursor: pointer; font-size: var(--fs-sm); color: var(--text-faint);
  list-style: none; user-select: none;
}
.mark-log summary::-webkit-details-marker { display: none; }
.mark-log summary:hover { color: var(--text-second); }
.log-row {
  display: grid; grid-template-columns: 72px 118px 1fr; gap: 10px; align-items: baseline;
  padding: 6px 0; border-bottom: 1px solid var(--border); font-size: var(--fs-xs);
}
.log-act {
  text-transform: uppercase; letter-spacing: var(--track-caps);
  font-size: var(--fs-2xs); font-weight: 500;
}
.log-act.accepted { color: var(--status-neutral-text); }
.log-act.unmarked { color: var(--review); }
.log-when { font-family: var(--mono); color: var(--text-faint); }
.log-what { color: var(--text-second); word-break: break-word; }
.log-note { grid-column: 3; font-style: italic; color: var(--text-faint); }
@media (max-width: 640px) {
  .log-row { grid-template-columns: 1fr; gap: 2px; }
  .log-note, .log-what { grid-column: 1; }
}

/* ------------------------------------------------------------ what we check */
.scope-stats {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 10px; margin-bottom: 20px;
}
.scope-stat {
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: 13px 15px;
  display: flex; flex-direction: column; gap: 1px;
}
.scope-stat strong { font-size: var(--fs-xl); font-weight: 700; letter-spacing: var(--track-tight); }
.ss-label { font-size: var(--fs-sm); color: var(--text-main); }
.ss-note { font-size: var(--fs-xs); color: var(--text-faint); line-height: 1.35; }

/* ----------------------------------------------------------- weekly reports */
.report-section { margin: 18px 0; }
.report-section h3 { font-size: var(--fs-md); margin: 0 0 8px; }
#reportsDetailCard { padding: 22px 26px; }
#reportsDetailCard h2 { margin: 0 0 4px; }

.scope-body { display: flex; flex-direction: column; gap: 22px; }
.scope-group-head { margin-bottom: 8px; }
.scope-group-head h3 { margin: 0 0 2px; font-size: var(--fs-base); font-weight: 500; }
.scope-group-head p { margin: 0; }

.scope-check {
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  margin-bottom: 6px; background: var(--bg-second);
}
.scope-check summary {
  display: flex; align-items: center; gap: 9px; padding: 10px 13px;
  cursor: pointer; list-style: none; user-select: none; flex-wrap: wrap;
}
.scope-check summary::-webkit-details-marker { display: none; }
.scope-check summary:hover { background: var(--bg-main); border-radius: var(--radius-lg); }
.sev-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--review-vivid); flex: none; }
.sev-dot.alert { background: var(--alert); }
.sev-dot.info { background: var(--link-icon); }
.sc-name { font-size: var(--fs-base); font-weight: 500; flex: 1 1 140px; }
.sc-flag {
  font-size: var(--fs-2xs); font-family: var(--mono); color: var(--text-faint);
  background: var(--bg-third); padding: 2px 6px; border-radius: var(--radius-md);
}
.sc-state {
  font-size: var(--fs-2xs); font-weight: 500;
  text-transform: uppercase; letter-spacing: var(--track-caps);
}
.sc-state.alert { color: var(--alert-text); }
.sc-state.review { color: var(--review); }
.sc-state.info { color: var(--link); }
.sc-state.off { color: var(--text-faint); }
/* A check that cannot run on this domain is shown, not hidden: the scope page
   has to be honest about what is and is not covered. */
.scope-check.inactive { opacity: 0.55; }
.sc-body { padding: 0 13px 12px 30px; }
.sc-body p { margin: 0 0 7px; font-size: var(--fs-sm); color: var(--text-second); line-height: 1.6; }
.sc-body b { color: var(--text-main); }
.sc-fix-label { display: block; font-size: var(--fs-sm); margin: 10px 0 4px; }
.sc-body ol { margin: 0; padding-left: 17px; }
.sc-body li { font-size: var(--fs-sm); color: var(--text-second); line-height: 1.55; margin-bottom: 3px; }

/* Printing this app means one thing: handing someone the list of what we check.
   So the chrome goes, every other view goes, and the scope view prints open.
   The Reports view's own "Print / export PDF" button (only reachable from an
   already-open report — see #reportsDetailBar in index.html) reuses the same
   mechanism: print a single open report cleanly, with the list and the
   back/print buttons themselves left out. */
@media print {
  .sidebar, .topbar, .view-bar, #scopePrint { display: none !important; }
  .view { display: none !important; }
  .view[data-view="scope"] { display: block !important; padding: 0; }
  .view[data-view="reports"] { display: block !important; padding: 0; }
  .view[data-view="reports"] #reportsList { display: none !important; }
  .view[data-view="reports"] #reportsDetail { display: block !important; }
  .main { padding: 0; }
  .scope-check { break-inside: avoid; opacity: 1 !important; }
  .scope-check .sc-body { display: block !important; }
}

/* ------------------------------------------------------------------ tooltip */
/* One shared tooltip for every chart. It is positioned with a transform so it
   never triggers a layout, and it is measured while visible-but-transparent so
   it can flip sides near the edges of the window. */
.tip {
  position: fixed; top: 0; left: 0; z-index: 120;
  max-width: 320px; pointer-events: none;
  background: var(--bg-second); color: var(--text-main);
  border: 1px solid var(--bg-muted);
  border-radius: var(--radius-lg); padding: 10px 12px 10px 24px;
  box-shadow: var(--shadow-float);
  display: flex; flex-direction: column; gap: 5px;
  opacity: 1; transition: opacity 0.1s ease;
}
.tip::before { top: 12px; left: 11px; width: 7px; height: 7px; }
.tip.off { opacity: 0; }
.tip-title { font-size: var(--fs-base); line-height: 1.3; }
.tip-sub { font-size: var(--fs-xs); color: var(--text-faint); font-family: var(--mono); word-break: break-all; }
.tip-rows { display: flex; flex-direction: column; gap: 2px; margin-top: 2px; }
.tip-row { display: flex; justify-content: space-between; gap: 14px; font-size: var(--fs-xs); }
.tip-row span { color: var(--text-second); }
.tip-row b { font-family: var(--mono); }
.tip-tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 2px; }
.tip-note { font-size: var(--fs-xs); color: var(--text-second); line-height: var(--lh-normal); white-space: pre-line; }
.tip-hint {
  font-size: var(--fs-2xs); color: var(--text-faint); border-top: 1px solid var(--border);
  padding-top: 5px; margin-top: 2px;
}

/* --------------------------------------------------------------- lightbox */
.lightbox {
  position: fixed; inset: 0; z-index: 90;
  background: rgba(0, 0, 0, 0.85);
  display: grid; place-items: center; padding: 24px; cursor: zoom-out;
}
.lightbox img {
  max-width: 100%; max-height: 100%; object-fit: contain;
  border-radius: var(--radius-md); box-shadow: var(--shadow-pop);
}
/* "Ver completa" on a clipped page-detail preview: the image can be several
   viewports tall, so fit-to-screen (the default above) would shrink it back
   down to illegible — scroll it at natural width instead. */
.lightbox.scrollable {
  display: block; overflow: auto; cursor: default; padding: 24px 0;
}
.lightbox.scrollable img {
  display: block; max-width: min(100%, 900px); max-height: none; width: 100%;
  height: auto; margin: 0 auto; cursor: zoom-out;
}

/* Below 860px the rail becomes a header. Seven destinations do not fit across
   a narrow screen, so the nav scrolls sideways as one strip rather than
   wrapping into three ragged rows that cost more height than the view below
   them. The bleed and the padding cancel out, so the strip scrolls edge to
   edge while its first item still lines up with the content. */
@media (max-width: 860px) {
  .shell { flex-direction: column; }
  .sidebar {
    width: auto; height: auto; position: static;
    flex-direction: column; align-items: stretch; gap: 12px;
    padding: 14px 16px 10px;
    border-right: 0; border-bottom: 1px solid var(--border);
  }
  .brand { padding-left: 0; }

  .site-switch { flex-direction: row; align-items: center; gap: 8px; }
  .site-switch .side-label { display: none; }
  .site-tabs { flex-direction: row; overflow-x: auto; gap: 8px; }
  .site-tab, .site-add { flex: none; padding-left: 12px; }
  .site-add { width: auto; }

  .nav {
    flex-direction: row; flex-wrap: nowrap;
    overflow-x: auto; scrollbar-width: none;
    gap: 4px; margin: 0 -16px; padding: 0 16px 2px;
  }
  .nav::-webkit-scrollbar { display: none; }
  .nav-item { flex: none; white-space: nowrap; }

  /* With the long tail grouped, six entries are left: a 3x2 grid shows all of
     them at once instead of a strip that hides half off-screen. Each group's
     menu drops down under the grid at full width (absolute to .nav, which the
     sidebar no longer clips at this width — it has no fixed height here). */
  .sidebar { overflow: visible; }
  .nav {
    position: relative;
    display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
    overflow: visible; margin: 0; padding: 0;
  }
  .nav > .nav-item, .nav-group-head {
    justify-content: center; gap: 6px; min-width: 0;
    padding: 8px 6px; font-size: var(--fs-sm);
    background: var(--bg-main);
  }
  .nav > .nav-item > .icon, .nav-group-head > .icon:first-child { display: none; }
  .nav > .nav-item .nav-badge { margin-left: 0; }
  .ng-full { display: none; }
  .ng-short { display: inline; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .nav-group-chev { margin-left: 0; flex: none; transform: none; }
  .nav-group.open .nav-group-chev { transform: rotate(180deg); }
  .nav-group-menu {
    position: absolute; top: calc(100% + 6px); left: 0; right: 0;
    min-width: 0; box-shadow: var(--shadow-pop);
  }
  .nav-group-menu .nav-item { white-space: normal; }

  .sidebar-foot { flex-direction: row; align-items: center; gap: 8px; margin-top: 0; }
  .mini-card { flex: 1; }

  .main { padding: 0 16px 44px; }
  /* The status pill + "Check now" button alone are about as wide as a phone
     screen (statusPill + checkNow + theme toggle ≈ 360px), so on the same
     row as the title there is nothing left for it to shrink into — the title
     and subtitle collapsed to 0 width and wrapped one word per line. Wrap the
     row instead: the title takes its own full-width line, actions drop to
     the line below (and wrap further themselves if a longer status label
     ever pushes them past one row too). */
  .topbar { padding: 16px 0 12px; flex-wrap: wrap; row-gap: 10px; }
  .topbar-text { flex: 1 1 100%; }
  .actions { flex-wrap: wrap; }
}

/* --------------------------------------------------------------- login.html */
.login-body {
  min-height: 100vh; display: grid; place-items: center; padding: 24px;
}
.login-card {
  width: 100%; max-width: 340px;
  display: flex; flex-direction: column; gap: var(--sp-4);
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: var(--sp-5);
  box-shadow: var(--shadow-card);
}
.login-brand { padding: 0 0 4px; }
.login-submit { width: 100%; justify-content: center; }

/* Self-service onboarding (Phase 4 of the PRD): the token-login block added
   to this page, and login.html/signup.html's shared wrapper/divider/token
   display. Isolated here (rather than folded into the rules above) so all of
   it can be found and removed in one place if self-service ever needs to
   come back out. */
.login-wrap {
  display: flex; flex-direction: column; align-items: stretch; gap: var(--sp-3);
  width: 100%; max-width: 340px;
}
.login-lang-toggle { align-self: flex-end; }
.login-divider {
  display: flex; align-items: center; gap: 10px;
  color: var(--text-faint); font-size: var(--fs-xs); text-transform: uppercase;
  margin: 4px 0;
}
.login-divider::before, .login-divider::after { content: ""; flex: 1; height: 1px; background: var(--bg-third); }
.signup-note { font-size: var(--fs-xs); color: var(--text-faint); line-height: var(--lh-normal); text-align: center; }
.token-display {
  display: flex; gap: 8px; align-items: center;
  background: var(--bg-main); border: 1px solid var(--bg-muted); border-radius: var(--radius-lg);
  padding: 10px 12px;
}
.token-display code { flex: 1; font-family: monospace; font-size: var(--fs-sm); word-break: break-all; color: var(--text-main); }

/* ---------------------------------------------------------- page detail --
   Full-screen replacement for the old right-hand drawer, route #/pages/<path>.
   Reuses .card/.kpi/.chip/.issue/.dx/.pill wholesale — only the layout below
   (header, two-column grid, screenshot pins, history sparkline) is new. */
/* The page-detail view has its own header (title, status, re-check), so the
   shared topbar's title/status/"Check now" above it would just repeat the
   same things for no reason while it's open — but the theme toggle lives in
   this same bar and nowhere else, so only its other children hide. */
.main:has(> .view.active.pd-view) .topbar-text,
.main:has(> .view.active.pd-view) .topbar #statusPill,
.main:has(> .view.active.pd-view) .topbar #checkNow { display: none; }
.main:has(> .view.active.pd-view) .topbar { border-bottom: 0; padding-bottom: 0; justify-content: flex-end; }
.pd-view { padding-top: var(--sp-4); }
.pd-loading { padding: 60px 0; text-align: center; color: var(--text-faint); }

/* =====================================================================
   PAGE DETAIL — was a literal, un-tokenized structural copy of a static
   mockup, sized in the mockup's own px values instead of the app's
   --sp-* / --radius-* / --fs-* scales. That's exactly why this view used to
   look inconsistent with the rest of the app (Overview/Pages/Links/History):
   they were already on the token system, this view wasn't. Rewritten here
   to use the same tokens and, where a card/tile plays the same role as an
   existing component (.card, .kpi), the same sizes those already use —
   see docs/ui-audit/AUDIT.md for the before/after reasoning. */

.pd-header { display: flex; flex-direction: column; gap: var(--sp-5); margin-bottom: var(--sp-5); }
.pd-back {
  display: inline-flex; align-items: center; gap: 6px;
  text-decoration: none; font-size: var(--fs-sm); color: var(--text-second);
}
.pd-back:hover { color: var(--text-main); }
.pd-back-arrow { font-size: var(--fs-sm); line-height: 1; }
.pd-title-bar { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-5); flex-wrap: wrap; }
.pd-title-col { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.pd-title-line { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.pd-title-line h1 { margin: 0; font-size: var(--fs-3xl); font-weight: 600; letter-spacing: var(--track-tight); }
/* Reuses the app-wide .pill component (see .pill above) rather than a new
   one-off pill — only its size is tweaked here, same "reuse a real shared
   control" call as .chip and .btn-secondary/.btn-ghost below. */
.pd-title-line .pill { padding: 4px 10px; font-weight: 600; }
.pd-meta { margin: 0; display: flex; align-items: center; gap: var(--sp-3); font-size: var(--fs-sm); color: var(--text-second); flex-wrap: wrap; }
.pd-meta .mono { color: var(--text-main); }
.pd-actions { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
.pd-actions .btn-secondary, .pd-actions .btn-primary {
  height: 44px; padding: 0 var(--sp-4); border-radius: var(--radius-sm); min-height: 44px;
}

/* -------------------------------------------------------------- KPI row
   Same card treatment as the app-wide .kpi (radius-xl, --sp-4 padding) so
   these four tiles read as the same component as every other KPI in the
   app, not a page-detail-specific one. Only the value colour still varies
   deliberately: text-main unless the number itself names a real state
   (the Design-score tile's bullet-graph fill, see .pd-kpi-score-track
   above), never decoration. */
.pd-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--sp-4); margin-bottom: var(--sp-5); }
.pd-kpi-card {
  background: var(--bg-second); border: 1px solid var(--border); border-radius: var(--radius-xl); padding: var(--sp-4);
  display: flex; flex-direction: column; gap: 6px; min-width: 0;
}
.pd-kpi-card.pd-kpi-score, .pd-kpi-card.pd-kpi-trend { gap: 10px; }
.pd-kpi-label { font-size: var(--fs-sm); color: var(--text-second); }
.pd-kpi-value-row { display: flex; align-items: baseline; gap: 10px; }
.pd-kpi-value { font-size: var(--fs-2xl); font-weight: 700; letter-spacing: var(--track-tight); color: var(--text-main); font-variant-numeric: tabular-nums; }
.pd-kpi-score-row { display: flex; align-items: baseline; gap: 6px; }
.pd-kpi-score-suffix { font-size: var(--fs-sm); color: var(--text-second); }
/* Section A's bullet graph (.bullet-track/.bullet-fill/.bullet-mark, added
   by buildBulletTrack in app.js), just compact enough for a 4-up KPI tile —
   same bands/colour rules as the Overview's wide Health/Design bars. */
.pd-kpi-score-track.bullet-track { height: 10px; }
.pd-kpi-score-track.bullet-track .bullet-fill { height: 5px; }
.pd-kpi-trend-head { display: flex; justify-content: space-between; gap: 8px; }
.pd-kpi-trend-delta { font-size: var(--fs-sm); font-weight: 600; color: var(--text-second); font-variant-numeric: tabular-nums; }
.pd-kpi-trend-delta.ok { color: var(--status-good-text); }
.pd-kpi-trend-delta.alert { color: var(--alert-text); }
/* 59 = the 48px bar area (h) plus 11px reserved above it for the min/max
   direct labels (labelPad in pdSparkline) — kept in sync with the viewBox so
   preserveAspectRatio:none doesn't squash the bars to make room for them. */
.pd-kpi-trend-spark { color: var(--text-main); display: block; line-height: 0; min-height: 59px; }
.pd-kpi-trend-spark svg { display: block; width: 100%; height: 59px; }
.pd-kpi-trend-note { font-size: var(--fs-xs); color: var(--text-faint); margin-top: 2px; }
/* Same visual language as the Overview trend chart (.grid-line/.trend-band
   above): faint guide lines, fully transparent hover bands. */
.pd-spark-grid { stroke: var(--bg-third); stroke-width: 1; }
/* Section G: each bar is colored by that run's own severity (worst open
   state on that date), not a flat grey — "columnas coloreadas por estado de
   corrida". The current run gets a solid outline so it still reads as "now"
   without needing a different color from its own severity. */
.pd-spark-bar { cursor: pointer; transition: opacity 0.15s ease; }
.pd-spark-bar:hover { opacity: 0.75; }
.pd-spark-bar.alert { fill: var(--alert); }
.pd-spark-bar.review { fill: var(--review-vivid); }
.pd-spark-bar.accepted { fill: var(--accepted); }
.pd-spark-bar.ok { fill: var(--status-empty); }
.pd-spark-bar.current { stroke: var(--text-main); stroke-width: 1.5px; }
.pd-spark-label { font-size: 12px; fill: var(--text-second); text-anchor: middle; font-variant-numeric: tabular-nums; }

/* --------------------------------------------------------- main 12-col grid
   Two SEPARATE grid rows, exactly like the mockup's c35 and c103 — this is
   a deliberate reversal of an earlier merge into one .pd-left/.pd-right
   column pair; see REPORT-autonomo.md for the one layout tradeoff that
   brings back (uneven column heights when the right column is short). */
.pd-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--sp-5); align-items: start; margin-bottom: var(--sp-5); }
/* Same radius/padding as the app-wide .card so this reads as the same
   component, not a page-detail-only surface. */
.pd-issues-card {
  grid-column: span 7; background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: var(--sp-5);
  display: flex; flex-direction: column; gap: var(--sp-4); min-width: 0;
}
.pd-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.pd-card-head h2 { margin: 0; font-size: var(--fs-lg); font-weight: 500; letter-spacing: -0.01em; }
.pd-card-head-note { font-size: var(--fs-sm); color: var(--text-second); }
.pd-issue-filters { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.pd-issue-filters .chip { height: 36px; padding: 0 14px; border-radius: var(--radius-pill); font-size: var(--fs-sm); display: inline-flex; align-items: center; }
.pd-issue-filters .sort-toggle { margin-left: auto; }
.pd-issues { display: flex; flex-direction: column; gap: 10px; }
/* Suggestions/intentional disclosures reuse the app-wide .drawer-suggestions
   component (same disclosure-chevron family as .why-score/.text-expand
   above) rather than a one-off. */
.pd-issues-card .drawer-suggestions summary { display: flex; align-items: center; gap: 6px; height: 44px; padding: 0 4px; font-size: var(--fs-base); }
.pd-issues-card .drawer-suggestions summary .pd-toggle-sub { font-size: var(--fs-xs); color: var(--text-faint); margin-left: 6px; }

.pd-right { grid-column: span 5; display: flex; flex-direction: column; gap: var(--sp-5); min-width: 0; position: sticky; top: var(--sp-4); }
.pd-view-card {
  background: var(--bg-second); border: 1px solid var(--border); border-radius: var(--radius-xl);
  padding: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3);
}
.pd-view-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
/* Generic segmented control — also used by .pd-beforeafter-toggle below and
   reusable anywhere else a small set of mutually-exclusive views needs a
   tab strip (e.g. Desktop/Tablet/Mobile). */
.segmented { display: flex; gap: 4px; padding: 4px; border-radius: var(--radius-sm); background: var(--bg-third); }
.segmented-tab {
  height: 36px; padding: 0 12px; border-radius: 8px; border: 0;
  background: transparent; font: inherit; font-size: var(--fs-sm); color: var(--text-second); cursor: pointer;
  transition: background 0.15s ease, color 0.15s ease;
}
.segmented-tab.active { background: var(--bg-second); font-weight: 600; color: var(--text-main); }
.pd-viewport-tabs { display: flex; gap: 4px; padding: 4px; border-radius: var(--radius-sm); background: var(--bg-third); }
.pd-viewport-tab {
  height: 36px; padding: 0 12px; border-radius: 8px; border: 0;
  background: transparent; font: inherit; font-size: var(--fs-sm); color: var(--text-second); cursor: pointer;
}
.pd-viewport-tab.active { background: var(--bg-second); font-weight: 600; color: var(--text-main); }
/* No fixed crop height: the screenshot is shown at its full aspect ratio,
   scaled to the card's width, so nothing is cut off — click opens the
   existing app-wide #lightbox for a full-size zoom (see openDrawer/app.js). */
.pd-screenshot-wrap {
  position: relative; border-radius: var(--radius-sm); overflow: hidden;
  border: 1px solid var(--border); background: var(--bg-third); line-height: 0;
  cursor: zoom-in;
}
.pd-screenshot-wrap img { display: block; width: 100%; height: auto; }
/* Full-page screenshots can run many viewports tall — showing them at full
   height starved the findings column next to it (this card would end up far
   taller than the other one, leaving a gap on the shorter side). Clip to
   roughly a viewport height instead, fade the cut edge so it reads as
   "there's more" rather than an abrupt crop, and hand off to the existing
   lightbox (in scrollable mode, see below) for the full image. */
/* When there is no image to show edge-to-edge — no capture at all, or this
   viewport specifically wasn't captured — the wrap holds text instead. It
   normally has zero padding and line-height:0 (built for a full-bleed <img>),
   which left that text sitting flush against the card's own border with no
   breathing room. This modifier restores real padding/line-height and drops
   the image's zoom cursor for that state. */
.pd-screenshot-wrap.pd-screenshot-empty {
  padding: var(--sp-4); line-height: var(--lh-normal); cursor: default;
}
.pd-screenshot-wrap.clipped { max-height: min(640px, 70vh); cursor: default; }
.pd-screenshot-wrap.clipped::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 96px;
  background: linear-gradient(to bottom, transparent, var(--bg-third));
  pointer-events: none;
}
.pd-view-card-expand {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  align-self: center; height: 40px; padding: 0 var(--sp-4);
  background: var(--bg-second); color: var(--text-main);
  border: 1px solid var(--border); border-radius: var(--radius-lg);
  font-size: var(--fs-sm); font-weight: 500; font-family: inherit; cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease;
}
.pd-view-card-expand:hover { background: var(--bg-third); border-color: var(--text-faint); }
.pd-view-card-expand.hidden { display: none; }
/* .pd-screenshot-wrap sets line-height:0 (it normally holds only an <img>,
   to avoid the usual few-px gap under inline images) — this text sibling
   needs its own real line-height or it would inherit that 0 and collapse. */
.pd-view-card-still-checked { margin: var(--sp-3) 0 0; font-size: var(--fs-xs); line-height: var(--lh-normal); color: var(--text-faint); }
.pd-pin {
  position: absolute; width: 26px; height: 26px; margin: -13px 0 0 -13px;
  border-radius: 50%; background: var(--bg-second); color: var(--text-main);
  border: 1.5px solid var(--text-main); display: grid; place-items: center;
  font-size: 12px; font-weight: 600; cursor: pointer;
}
.pd-pin.alert { border-color: var(--alert); color: var(--alert-text); }
.pd-pin.review { border-color: var(--review-vivid); color: var(--review-vivid); }
.pd-pin.suggestion { border-color: var(--text-faint); color: var(--text-faint); }
.pd-pin:hover, .pd-pin:focus-visible { box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 85%, transparent); outline: none; }
.pd-view-card-note { font-size: var(--fs-xs); color: var(--text-second); }
/* "Antes / Ahora" toggle — a standalone bordered button, sibling (not
   child) of the Desktop/Tablet/Mobile segmented group. .active marks the
   pressed ("showing before") state. */
.pd-beforeafter-toggle {
  height: 36px; padding: 0 12px; border-radius: 8px; border: 1px solid var(--border);
  background: var(--bg-second); font: inherit; font-size: var(--fs-sm); color: var(--text-second); cursor: pointer;
}
.pd-beforeafter-toggle.active { background: var(--bg-third); color: var(--text-main); font-weight: 600; }

.pd-score-card {
  background: var(--bg-second); border: 1px solid var(--border); border-radius: var(--radius-xl);
  padding: var(--sp-4); display: flex; flex-direction: column; gap: var(--sp-3);
}
.pd-score-card-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }
.pd-score-card-head h2 { margin: 0; font-size: var(--fs-md); font-weight: 500; }
/* One bar per real design-score bucket (accessibility, consistency,
   hard-visual-errors — see BUCKET_LABEL_EN in app.js, there are no others,
   never a fabricated 4th like the mockup's illustrative "SEO" row). All
   bars share one solid colour, same as the mockup — the previous per-
   bucket rainbow (--cat-0/1/2) was this feature's own invention, not
   something the mockup does. */
.pd-score-bars { display: flex; flex-direction: column; gap: 12px; }
.pd-score-bar-row { display: grid; grid-template-columns: 110px minmax(0, 1fr) 44px; align-items: center; gap: 12px; font-size: 13px; }
.pd-score-bar-label { color: var(--text-second); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pd-score-bar-track { height: 8px; border-radius: 4px; background: var(--bg-muted); overflow: hidden; }
.pd-score-bar-fill { height: 100%; border-radius: 4px; background: var(--text-main); transition: width 0.5s cubic-bezier(0.22, 1, 0.36, 1); }
.pd-score-bar-fill.ok { background: var(--ok); }
.pd-score-bar-fill.review { background: var(--review-vivid); }
.pd-score-bar-fill.alert { background: var(--alert); }
.pd-score-bar-points { font-family: var(--mono); text-align: right; }

/* ---------------------------------------------------- accordion (findings) */
.pd-accordion-row { border: 1px solid var(--border); border-radius: var(--radius-lg); overflow: hidden; background: var(--bg-second); }
.pd-accordion-row.open { background: var(--bg-third); }
.pd-accordion-head {
  display: flex; align-items: center; gap: 14px; width: 100%;
  padding: 16px 18px; background: none; border: none; cursor: pointer;
  font: inherit; color: var(--text-main); text-align: left;
}
.pd-accordion-badge {
  width: 24px; height: 24px; border-radius: 50%; flex-shrink: 0;
  background: var(--bg-third); color: var(--text-main);
  font-size: 12px; font-weight: 600; display: flex; align-items: center; justify-content: center;
}
.pd-accordion-row.open .pd-accordion-badge { background: var(--text-main); color: var(--bg-main); }
.pd-accordion-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--text-faint); flex-shrink: 0; }
.pd-accordion-dot.alert { background: var(--alert); }
.pd-accordion-dot.review { background: var(--review-vivid); }
.pd-accordion-dot.suggestion { background: var(--text-faint); }
.pd-accordion-title { flex-grow: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 16px; font-weight: 600; }
.pd-accordion-row:not(.open) .pd-accordion-title { font-weight: 500; }
.pd-accordion-count { font-weight: 400; color: var(--text-second); }
.pd-accordion-cat { font-size: 13px; color: var(--text-second); white-space: nowrap; }
.pd-accordion-points { font-size: 13px; font-weight: 500; color: var(--text-main); font-family: var(--mono); min-width: 44px; text-align: right; white-space: nowrap; }
.pd-accordion-chevron { color: var(--text-main); transition: transform 0.18s ease; flex-shrink: 0; }
.pd-accordion-row:not(.open) .pd-accordion-chevron { color: var(--text-second); }
.pd-accordion-row.open .pd-accordion-chevron { transform: rotate(180deg); }
.pd-accordion-body { padding: 0 18px 18px 56px; display: flex; flex-direction: column; gap: 14px; }
/* Stacked, not a narrow 2-column grid — "Qué pasa" then "Cómo arreglarlo"
   read top-to-bottom like a short brief, not a cramped side-by-side. */
.pd-accordion-summary { display: flex; flex-direction: column; gap: var(--sp-3); }
.pd-accordion-summary-col { display: flex; flex-direction: column; gap: 4px; }
.pd-accordion-summary-col .dx-label { font-size: 12px; font-weight: 600; color: var(--text-second); text-transform: uppercase; letter-spacing: 0.04em; }
.pd-accordion-summary-col p, .pd-accordion-summary-col ol { margin: 0; font-size: 14px; line-height: 1.5; color: var(--text-main); }
.pd-accordion-summary-col ol { padding-left: 18px; }
.pd-accordion-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.pd-accordion-chip { display: inline-flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: 8px; background: var(--bg-third); font-family: var(--mono); font-size: 12px; color: var(--text-main); }
.pd-accordion-chip-more { display: inline-flex; align-items: center; padding: 6px 10px; border-radius: 8px; font-size: 12px; color: var(--text-second); }
.pd-accordion-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.pd-accordion-actions .btn-secondary, .pd-accordion-actions .btn-ghost {
  height: 40px; padding: 0 var(--sp-3); border-radius: var(--radius-sm); font-size: var(--fs-sm);
}
.pd-accordion-tech-trigger { height: 40px; padding: 0 10px; border: 0; background: transparent; font: inherit; font-size: 13px; color: var(--text-second); margin-left: auto; cursor: pointer; }
.pd-accordion-tech-trigger:hover { color: var(--text-main); }
.pd-accordion-tech { display: flex; flex-direction: column; gap: 14px; padding-top: 8px; border-top: 1px solid var(--border); }
.pd-accordion-tech.hidden { display: none; }
@media (max-width: 700px) {
  .pd-accordion-cat { display: none; }
  .pd-accordion-body { padding-left: 18px; }
}

/* ------------------------------------------------------------ history/staging/ai second grid row */
.pd-grid-secondary { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--sp-5); align-items: start; }
.pd-history-card {
  grid-column: span 7; background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: var(--sp-5);
  display: flex; flex-direction: column; gap: var(--sp-4); min-width: 0;
}
.pd-history-card .pd-card-head a { font-size: var(--fs-sm); color: var(--text-second); text-decoration: none; }
.pd-history-card .pd-card-head a:hover { color: var(--text-main); }
.pd-secondary-right { grid-column: span 5; display: flex; flex-direction: column; gap: var(--sp-5); min-width: 0; }
.pd-staging-card, .pd-ai-card {
  background: var(--bg-second); border: 1px solid var(--border);
  border-radius: var(--radius-xl); padding: var(--sp-5);
  display: flex; flex-direction: column; gap: var(--sp-3);
}
/* The mockup's staging/AI cards are one static paragraph each — this app's
   real Staging-vs-live and AI review sections are full interactive features
   (tabs, on-demand fetch, accept/reject), so their own internals stay as-is
   (.ai-review/.plive-* below); only their heading is sized to match c94. */
.pd-staging-card .ai-review-head h4, .pd-ai-card .ai-review-head h4 { font-size: 16px; font-weight: 600; }
.pd-staging-card .ai-review, .pd-ai-card .ai-review { display: flex; flex-direction: column; gap: 12px; }
.pd-staging-card .ai-review-head, .pd-ai-card .ai-review-head { margin-bottom: 0; }
.pd-ai-card .btn-ghost { align-self: flex-start; height: 40px; padding: 0 14px; border-radius: 10px; font-size: 13px; }

.pd-timeline-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.pd-timeline-row { display: grid; grid-template-columns: 96px 20px minmax(0, 1fr); gap: 12px; padding-bottom: 18px; }
.pd-timeline-row:last-child { padding-bottom: 0; }
.pd-timeline-date { font-size: 13px; color: var(--text-second); padding-top: 2px; white-space: nowrap; }
.pd-timeline-dot-col { position: relative; display: flex; justify-content: center; }
.pd-timeline-dot-col::before {
  content: ""; position: absolute; top: 14px; bottom: -14px; width: 1px; background: var(--bg-third);
}
.pd-timeline-row:last-child .pd-timeline-dot-col::before { display: none; }
.pd-timeline-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--text-faint); margin-top: 4px; z-index: 1; }
/* Matches the mockup's own colour semantics, which are the reverse of what
   this feature originally shipped with: a publish is neutral/dark, a brand
   new finding is the "review" tone, and something getting resolved/marked
   intentional is the "ok" tone. */
.pd-timeline-dot.publish { background: var(--text-main); }
.pd-timeline-dot.new { background: var(--review-vivid); }
.pd-timeline-dot.suggestion { background: var(--review-vivid); }
.pd-timeline-dot.accepted { background: var(--ok); }
.pd-timeline-text { font-size: 14px; color: var(--text-second); padding: 0 0 0; line-height: 1.5; }
.pd-timeline-text b { font-weight: 600; color: var(--text-main); }

@media (max-width: 1100px) {
  .pd-grid, .pd-grid-secondary { grid-template-columns: 1fr; }
  .pd-issues-card, .pd-right, .pd-history-card, .pd-secondary-right { grid-column: 1 / -1; }
  /* Preview moves below the findings at this width, so the 4 KPIs go 2x2
     instead of squeezing into the same single column. */
  .pd-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 700px) {
  .pd-title-bar { flex-direction: column; align-items: stretch; }
  .pd-actions { flex-direction: column; }
  .pd-actions .btn-secondary, .pd-actions .btn-primary { width: 100%; justify-content: center; }
  .pd-screenshot-wrap .pd-pin { display: none; }
  .pd-kpis { gap: 10px; }
  .pd-kpi-card { padding: 16px; }
  .pd-kpi-value { font-size: 28px; }
  .pd-issue-filters { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 4px; -webkit-overflow-scrolling: touch; }
  /* The re-check button becomes the one fixed, always-reachable action on a
     small screen — the other two (Framer/Open page) stay inline above it,
     same as desktop, just full-width. */
  #pdContent { padding-bottom: 76px; }
  .pd-actions #pdRecheckBtn {
    position: fixed; left: 16px; right: 16px; bottom: 16px; z-index: 40;
    min-height: 52px; box-shadow: var(--shadow-card);
  }
}

/* ======================================================== view: map =====
   Infinite-canvas graph of the site: pages as cards, links as edges, diffed
   against a prior scan. Drawn on a single <canvas> (not one DOM node per
   page) because the whole point of this view is staying smooth at 1000+
   pages — a real DOM node per page would not. Colour is spent exactly like
   everywhere else in the app: neutral by default, --alert/--review/--ok/
   --delta-good only where something needs a look, per tokens.css's own rule. */
.map-toolbar {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  flex-wrap: wrap; margin-bottom: var(--sp-3);
}
.map-toolbar-left, .map-toolbar-right { display: flex; align-items: center; gap: var(--sp-3); flex-wrap: wrap; }
.map-search {
  display: flex; align-items: center; gap: 6px;
  border: 1px solid var(--bg-muted); border-radius: var(--radius-lg);
  background: var(--bg-second); padding: 0 10px; height: 38px; color: var(--text-faint);
}
.map-search input {
  border: none; background: none; color: var(--text-main); font: inherit;
  font-size: var(--fs-sm); width: 180px; outline: none;
}
.map-check { display: flex; align-items: center; gap: 6px; font-size: var(--fs-sm); color: var(--text-second); cursor: pointer; }
.map-compare { display: flex; align-items: center; gap: 8px; font-size: var(--fs-sm); color: var(--text-second); }
.map-compare select {
  border: 1px solid var(--bg-muted); border-radius: var(--radius-lg); background: var(--bg-second);
  color: var(--text-main); font: inherit; font-size: var(--fs-sm); height: 38px; padding: 0 10px;
}
.map-zoom {
  display: flex; align-items: center; gap: 8px; border: 1px solid var(--bg-muted);
  border-radius: var(--radius-lg); padding: 0 4px; height: 38px;
}
.map-zoom .btn-icon { width: 30px; height: 30px; }
.map-zoom span { font-size: var(--fs-xs); color: var(--text-second); min-width: 34px; text-align: center; }

.map-body { display: flex; gap: var(--sp-3); height: calc(100vh - 230px); min-height: 480px; }
.map-panel {
  width: 240px; flex: none; display: flex; flex-direction: column; gap: var(--sp-4);
  overflow-y: auto; padding: var(--sp-3); border: 1px solid var(--border);
  border-radius: var(--radius-lg); background: var(--bg-second);
}
.map-panel-block h3 {
  font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--track-caps);
  color: var(--text-faint); font-weight: 600; margin: 0 0 var(--sp-2);
}
.map-panel-head { display: flex; align-items: center; justify-content: space-between; }
.map-panel-head h3 { margin: 0; }
.map-legend { display: flex; flex-direction: column; gap: 6px; }
.map-legend-item {
  display: flex; align-items: center; gap: 8px; font-size: var(--fs-sm); color: var(--text-second);
  background: none; border: none; padding: 3px 0; cursor: pointer; text-align: left; font-family: inherit;
  opacity: 1; transition: opacity 0.12s ease;
}
.map-legend-item:hover { color: var(--text-main); }
.map-legend-item.dimmed { opacity: 0.4; }
.map-legend-swatch { width: 10px; height: 10px; border-radius: 50%; flex: none; }
.map-legend-count { margin-left: auto; font-variant-numeric: tabular-nums; color: var(--text-faint); }

.map-flows-list { display: flex; flex-direction: column; gap: 6px; }
.map-flow-row {
  display: flex; flex-direction: column; gap: 2px; padding: 8px 10px; border-radius: var(--radius-md);
  border: 1px solid var(--border); cursor: pointer; background: var(--bg-main);
}
.map-flow-row:hover { border-color: var(--text-faint); }
.map-flow-row.selected { border-color: var(--text-main); }
.map-flow-top { display: flex; align-items: center; justify-content: space-between; gap: 6px; }
.map-flow-name { font-size: var(--fs-sm); font-weight: 600; color: var(--text-main); }
.map-flow-steps { font-size: var(--fs-2xs); color: var(--text-faint); }
.map-flow-badge {
  font-size: var(--fs-2xs); font-weight: 600; padding: 1px 7px; border-radius: var(--radius-pill);
}
.map-flow-badge.ok { background: var(--ok-soft); color: var(--status-good-text); }
.map-flow-badge.broken { background: var(--alert-soft); color: var(--alert-text); }
.map-flow-actions { display: flex; gap: 4px; margin-top: 4px; }
.map-flow-actions button {
  font-size: var(--fs-2xs); color: var(--text-faint); background: none; border: none;
  cursor: pointer; padding: 0; font-family: inherit;
}
.map-flow-actions button:hover { color: var(--text-main); text-decoration: underline; }

.map-canvas-wrap {
  flex: 1; min-width: 0; position: relative; border: 1px solid var(--border);
  border-radius: var(--radius-lg); background: var(--bg-main); overflow: hidden;
}
#mapCanvas { display: block; width: 100%; height: 100%; cursor: grab; touch-action: none; }
#mapCanvas.panning { cursor: grabbing; }

/* Section H: a dashboard's first Map question is "which part of the site is
   this", not "how does page A link to page B" — so a treemap of sections
   (tile size = page count, the one number every section genuinely has more
   or less of) is now the first thing shown, not the force-directed graph
   below. A tile only ever gets a status shape (reusing .ttf-sev from the
   Things-to-fix list, Section D) when that section actually has a problem —
   a clean section is just a plain, unmarked tile. */
.map-treemap { position: absolute; inset: 0; }
.treemap-tile {
  /* Label/marker anchored top-left (standard treemap convention) rather than
     centered or bottom-anchored — on a large tile (76 pages, say) that keeps
     its identity readable at a glance instead of making the tile look like
     an empty gap until you spot text at its far edge. */
  position: absolute; display: flex; flex-direction: column; justify-content: flex-start;
  align-items: flex-start; gap: 4px; padding: 10px; overflow: hidden; text-align: left;
  font-family: inherit; color: inherit; cursor: pointer;
  background: var(--bg-second); border: 1px solid var(--border); border-radius: var(--radius-md);
  transition: background 0.15s ease;
}
.treemap-tile:hover, .treemap-tile:focus-visible { background: var(--bg-third); }
.treemap-tile .ttf-sev { justify-self: unset; }
.treemap-tile-label {
  font-size: var(--fs-sm); font-weight: 600; color: var(--text-main);
  max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.treemap-tile-count { font-size: var(--fs-xs); color: var(--text-faint); font-variant-numeric: tabular-nums; }

/* One section drilled into: a path-segment tree (native <details> so
   collapse/expand and keyboard focus come for free), each leaf opening the
   same page detail drawer as every other list in the app. */
.map-tree { position: absolute; inset: 0; overflow-y: auto; padding: var(--sp-3); }
.map-tree-back {
  font-size: var(--fs-sm); margin-bottom: var(--sp-3);
}
.map-tree-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: var(--sp-3); }
.map-tree-head h3 { margin: 0; font-size: var(--fs-lg); font-weight: 700; color: var(--text-main); }
.map-tree-head-count { font-size: var(--fs-sm); color: var(--text-faint); }
.map-tree-list { display: flex; flex-direction: column; gap: 2px; }
.map-tree-branch-body { margin-left: 18px; display: flex; flex-direction: column; gap: 2px; padding-top: 2px; }
.map-tree-branch-label {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  cursor: pointer; list-style: none; padding: 6px 8px; border-radius: var(--radius-md);
  font-size: var(--fs-sm); font-weight: 600; color: var(--text-main);
}
.map-tree-branch-label::-webkit-details-marker { display: none; }
.map-tree-branch-label:hover { background: var(--bg-third); }
.map-tree-branch-label::before { content: "▸"; color: var(--text-faint); margin-right: 2px; font-size: var(--fs-2xs); }
details[open] > .map-tree-branch-label::before { content: "▾"; }
.map-tree-branch-count { font-size: var(--fs-xs); color: var(--text-faint); margin-left: auto; }
.map-tree-leaf {
  display: grid; grid-template-columns: 14px minmax(0, 1fr) auto 28px; align-items: center; gap: 10px;
  width: 100%; border: 0; background: none; font-family: inherit; color: inherit; cursor: pointer;
  text-align: left; padding: 6px 8px; border-radius: var(--radius-md);
}
.map-tree-leaf:hover { background: var(--bg-third); }
.map-tree-leaf-title { font-size: var(--fs-sm); color: var(--text-main); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.map-tree-leaf-path { font-size: var(--fs-2xs); font-family: var(--mono); color: var(--text-faint); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.map-tree-leaf-count { font-size: var(--fs-xs); color: var(--text-faint); text-align: right; font-variant-numeric: tabular-nums; }
.ttf-sev-spacer { width: 11px; height: 11px; flex: none; }

/* Graph-only toolbar/panel controls (search, compare, zoom, fit, tour, the
   legend/flows side panel) only make sense once "advanced view" is on —
   none of them apply to the treemap or the per-section tree. */
.view[data-view="map"]:not([data-map-mode="graph"]) .map-graph-only { display: none; }
.map-banner {
  position: absolute; top: var(--sp-3); left: 50%; transform: translateX(-50%);
  background: var(--bg-second); border: 1px solid var(--border); border-radius: var(--radius-pill);
  padding: 8px 16px; font-size: var(--fs-sm); box-shadow: var(--shadow-float);
  display: flex; align-items: center; gap: 10px; z-index: 5;
}
.map-banner button { font-size: var(--fs-xs); font-weight: 600; color: var(--link); background: none; border: none; cursor: pointer; font-family: inherit; }
#mapEmpty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; text-align: center; }

.map-panel-right { width: 300px; }
.map-inspector-title { font-size: var(--fs-md); font-weight: 700; color: var(--text-main); word-break: break-word; }
.map-inspector-path { font-size: var(--fs-xs); font-family: var(--mono); color: var(--text-faint); word-break: break-all; }
.map-inspector-row { display: flex; justify-content: space-between; gap: 8px; font-size: var(--fs-sm); padding: 4px 0; border-bottom: 1px solid var(--border); }
.map-inspector-row span:first-child { color: var(--text-second); }
.map-inspector-close { align-self: flex-end; }
.map-inspector-section h3 { font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: var(--track-caps); color: var(--text-faint); font-weight: 600; margin: 0 0 6px; }
.map-inspector-link-row { font-size: var(--fs-xs); color: var(--text-second); padding: 3px 0; }
.map-inspector-link-btn {
  display: block; width: 100%; text-align: left; font: inherit; font-size: var(--fs-xs);
  background: none; border: none; cursor: pointer; color: var(--text-second); padding: 3px 0;
}
.map-inspector-link-btn:hover { color: var(--text-main); }
.map-inspector-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.map-inspector-orphan-note {
  font-size: var(--fs-xs); color: var(--review-vivid); background: var(--review-soft);
  border-radius: var(--radius-md); padding: 8px 10px; line-height: var(--lh-normal);
}

/* Small always-visible overview in the corner of the canvas: same status
   colours as the full map, at a scale too small to read text — it exists
   purely to answer "where am I" and to jump around a large map in one click,
   the same job a code editor's minimap does. */
.map-minimap {
  position: absolute; right: var(--sp-3); bottom: var(--sp-3); width: 180px; height: 120px;
  background: var(--bg-second); border: 1px solid var(--border); border-radius: var(--radius-md);
  box-shadow: var(--shadow-float); cursor: pointer; z-index: 4;
}

.map-ai-panel { display: flex; flex-direction: column; gap: var(--sp-3); }
.map-ai-text { font-size: var(--fs-sm); line-height: var(--lh-normal); color: var(--text-main); white-space: pre-wrap; }
.map-ai-meta { font-size: var(--fs-2xs); color: var(--text-faint); }
.map-ai-loading { display: flex; align-items: center; gap: 8px; color: var(--text-faint); font-size: var(--fs-sm); }

.map-panel-head-actions { display: flex; gap: 4px; }

/* AI-detected flows (suggestions), listed right under the saved Flows list —
   same card shape as a saved flow, but with Add/Dismiss instead of
   Rename/Delete, since nothing here is persisted until "Add" is clicked. */
.map-flow-suggestions { display: flex; flex-direction: column; gap: 8px; margin-top: 8px; }
.map-flow-suggestion {
  border: 1px dashed var(--border); border-radius: var(--radius-md); padding: 8px 10px;
  background: var(--bg-second);
}
.map-flow-suggestion-name { font-size: var(--fs-sm); font-weight: 600; color: var(--text-main); }
.map-flow-suggestion-steps { display: block; font-size: var(--fs-2xs); font-family: var(--mono); color: var(--text-faint); margin: 3px 0; word-break: break-word; }
.map-flow-suggestion-reason { display: block; font-size: var(--fs-2xs); color: var(--text-second); margin-bottom: 6px; }
.map-flow-suggestion-actions { display: flex; gap: 8px; }
.map-flow-suggestion-actions button {
  font-size: var(--fs-2xs); font-weight: 600; background: none; border: none; cursor: pointer; padding: 0;
  font-family: inherit; color: var(--link);
}
.map-flow-suggestion-actions button:hover { text-decoration: underline; }
.map-flow-suggest-loading { font-size: var(--fs-xs); color: var(--text-faint); }

/* Aerial tour (feature 7): a floating transport-style bar while the camera
   auto-pans/zooms across each section in turn. Kept clear of the minimap in
   the opposite corner. */
.map-tour-bar {
  position: absolute; left: var(--sp-3); right: 200px; bottom: var(--sp-3);
  background: var(--bg-second); border: 1px solid var(--border); border-radius: var(--radius-pill);
  padding: 6px 8px 6px 14px; box-shadow: var(--shadow-float); z-index: 6;
  display: flex; align-items: center; gap: 10px;
}
.map-tour-bar button { flex-shrink: 0; }
.map-tour-caption { flex: 1; min-width: 0; }
.map-tour-title { font-size: var(--fs-sm); font-weight: 700; color: var(--text-main); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.map-tour-meta { font-size: var(--fs-2xs); color: var(--text-faint); }

@media (max-width: 900px) {
  .map-body { flex-direction: column; height: auto; }
  .map-panel { width: auto; max-height: 220px; }
  .map-canvas-wrap { height: 60vh; }
  /* The minimap is a fixed pixel size, so on the shorter canvas this
     breakpoint gives it, it was covering a much bigger share of the
     visible graph (real nodes/edges included) than at desktop width. */
  .map-minimap { width: 110px; height: 74px; }
}

/* =====================================================================
   "Requests" — provisional, entirely self-contained. See FEATURE_REQUESTS
   in app.js for the removal checklist; every rule below is scoped to a
   .request- or #request selector prefix, so this whole block can be
   deleted without touching any other rule in this file.
   ===================================================================== */
.request-fab {
  position: fixed; right: var(--sp-5); bottom: var(--sp-5); z-index: 50;
  display: flex; align-items: center; gap: 8px;
  padding: 12px 18px; border-radius: var(--radius-pill); border: none;
  background: var(--text-main); color: var(--bg-second);
  font-family: inherit; font-size: var(--fs-sm); font-weight: 600;
  box-shadow: var(--shadow-pop); cursor: pointer;
}
.request-fab:hover { opacity: 0.9; }
.request-fab.hidden { display: none; }
/* Map view's own minimap/tour bar live in this same bottom-right/bottom
   corner (see .map-minimap/.map-tour-bar above) — moving the FAB to the
   opposite corner there is simpler and more robust across viewport widths
   than trying to compute a shared, ever-changing "safe" offset. */
/* Audit fix: top:76px landed on top of the header's "Check now" button
   whenever the header wrapped. Bottom-left of the content area is clear of
   both the header and the minimap/tour bar on the right. */
.request-fab.request-fab--map { right: auto; left: calc(232px + var(--sp-5)); bottom: var(--sp-5); top: auto; }
@media (max-width: 900px) { .request-fab.request-fab--map { left: var(--sp-4); bottom: var(--sp-4); } }

.request-modal .modal-panel.request-panel-form {
  width: min(420px, calc(100vw - 32px));
  margin-left: auto; margin-right: var(--sp-5); margin-bottom: var(--sp-5);
  align-self: flex-end;
}
.request-modal { align-items: flex-end; justify-content: flex-end; }
#requestContextNote { margin: 0; }
.request-screenshot-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.request-screenshot-preview { max-width: 100%; max-height: 160px; border-radius: var(--radius-md); border: 1px solid var(--border); }
.request-screenshot-preview.hidden { display: none; }

.request-toast {
  position: fixed; right: var(--sp-5); bottom: var(--sp-5); z-index: 70;
  padding: 12px 18px; border-radius: var(--radius-lg);
  background: var(--text-main); color: var(--bg-second);
  font-size: var(--fs-sm); box-shadow: var(--shadow-pop);
}
.request-toast.hidden { display: none; }

.request-urgent { color: var(--alert-text); font-weight: 600; }
.request-status-select {
  padding: 6px 9px; border-radius: var(--radius-md); border: 1px solid var(--bg-muted);
  background: var(--bg-main); color: var(--text-main); font-family: inherit; font-size: var(--fs-sm);
}
.request-reply-field {
  width: 100%; margin-top: 8px; padding: 8px 10px; border-radius: var(--radius-md);
  border: 1px solid var(--bg-muted); background: var(--bg-main); color: var(--text-main);
  font-family: inherit; font-size: var(--fs-sm); resize: vertical;
}

@media (max-width: 900px) {
  .request-fab { right: var(--sp-4); bottom: var(--sp-4); padding: 12px; }
  .request-fab span:not(.icon) { display: none; }
  .request-modal .modal-panel.request-panel-form {
    width: calc(100vw - 24px); margin-right: 12px; margin-bottom: 12px;
  }
}

/* request-fab--map's top:76px is safe down to tablet width (checked against
   every real header control at 768px, not just container boxes — none of
   them sit anywhere near that band). Below ~480px the same header collapses
   into 3 stacked rows that run right up to the page title with no gap left
   for a floating element, so no top offset works there without covering
   something. Falling back to the plain bottom-right spot instead is safe at
   this width specifically: on a phone this tall/narrow, the map canvas is
   taller than the viewport, so the minimap it would otherwise land on
   never actually reaches the viewport's bottom-right corner (checked by
   scrolling all the way down and reading its position). That stops being
   true well before 768px, which is why this override is scoped this
   narrowly rather than to the same breakpoint as the rest of this file's
   sidebar-collapse. */
@media (max-width: 480px) {
  .request-fab.request-fab--map { top: auto; bottom: var(--sp-4); }
}

/* =====================================================================
   "Ask Beeby" — demo-scope, entirely self-contained. Every rule below is
   scoped to a .beeby- or #beeby selector prefix. Reuses .request-fab's own
   shape (pill button, corner-anchored panel) rather than a new one, offset
   above it so neither FAB covers the other.
   ===================================================================== */
.beeby-fab { bottom: calc(var(--sp-5) + 56px); }
@media (max-width: 900px) { .beeby-fab { bottom: calc(var(--sp-4) + 52px); } }

.beeby-modal .modal-panel.beeby-panel {
  width: min(380px, calc(100vw - 32px));
  margin-left: auto; margin-right: var(--sp-5); margin-bottom: var(--sp-5);
  align-self: flex-end;
  max-height: min(560px, calc(100vh - 48px));
}
#beebyIntro { margin: 0; }

.beeby-messages {
  display: flex; flex-direction: column; gap: 8px;
  overflow-y: auto; min-height: 120px; max-height: 320px;
  padding-right: 2px;
}
.beeby-msg { display: flex; }
.beeby-msg p {
  margin: 0; padding: 8px 11px; border-radius: var(--radius-lg);
  font-size: var(--fs-sm); line-height: var(--lh-normal); max-width: 88%;
  background: var(--bg-main); color: var(--text-main);
  white-space: pre-wrap;
}
.beeby-msg.user { justify-content: flex-end; }
.beeby-msg.user p { background: var(--text-main); color: var(--bg-second); }
.beeby-msg.beeby-typing p { color: var(--text-faint); }

.beeby-input-row { display: flex; gap: 8px; }
.beeby-input-row input {
  flex: 1; padding: 9px 11px;
  border: 1px solid var(--bg-muted); border-radius: var(--radius-lg);
  background: var(--bg-main); color: var(--text-main);
  font-family: inherit; font-size: var(--fs-base);
}
.beeby-input-row input:focus { outline: 2px solid var(--accent); outline-offset: -1px; border-color: transparent; }

@media (max-width: 900px) {
  .beeby-modal .modal-panel.beeby-panel { width: calc(100vw - 24px); margin-right: 12px; margin-bottom: 12px; }
}

/* --------------------------------------------------------------- fix it
   "Fix it" (broken links, meta descriptions): same ai-suggest shell as the
   other suggestion boxes, result rendered as a review card instead of a
   free-text draft — see renderProposalCard() in app.js. Deliberately
   neutral (no risk-tier color coding): a proposal's own validators already
   say pass/fail in words, a color stripe on top would not add information. */
.proposal-card {
  width: 100%; display: flex; flex-direction: column; gap: 8px;
  padding: 10px 12px; border-radius: var(--radius-md);
  background: var(--bg-main); border: 1px solid var(--border);
}
.proposal-risk {
  align-self: flex-start; padding: 2px 8px; border-radius: var(--radius-pill);
  background: var(--accepted-soft); color: var(--status-neutral-text);
  font-size: var(--fs-2xs); font-weight: 500;
}
.proposal-rows { display: flex; flex-direction: column; gap: 4px; }
.proposal-row { display: flex; flex-direction: column; gap: 1px; }
.proposal-row-label { font-size: var(--fs-xs); color: var(--text-faint); }
.proposal-row-value { font-size: var(--fs-sm); color: var(--text-main); word-break: break-word; }
.proposal-validators { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 2px; }
.proposal-validators li { font-size: var(--fs-xs); color: var(--text-faint); }
.proposal-validators li.ok::before { content: "✓ "; }
.proposal-validators li.fail { color: var(--alert-text); }
.proposal-validators li.fail::before { content: "✕ "; }
.proposal-actions { display: flex; gap: 8px; margin-top: 2px; }
.proposal-status { margin: 0; font-size: var(--fs-sm); }
.proposal-status.ok { color: var(--status-good-text); }

/* =====================================================================
   Audit additions (Oct 2026). Self-contained: every rule below belongs to
   a feature added after the UX/accessibility audit.
   ===================================================================== */

/* "Since the previous check" — plain-language summary above the KPIs */
.today-summary {
  display: flex; flex-direction: column; gap: 6px;
  background: var(--bg-second); border: 1px solid var(--border);
  border-left: 3px solid var(--accent);
  border-radius: var(--radius-xl); padding: var(--sp-4) var(--sp-5);
  margin-bottom: 14px; box-shadow: var(--shadow-card);
}
.today-summary.hidden { display: none; }
.ts-head { display: flex; align-items: center; gap: 8px; color: var(--text-main); font-size: var(--fs-sm); }
.ts-head .icon { color: var(--accent); }
.ts-facts { margin: 0; color: var(--text-main); font-size: var(--fs-md); line-height: var(--lh-normal); }
.ts-cta {
  align-self: flex-start; display: inline-flex; align-items: center; gap: 6px;
  margin-top: 4px; padding: 6px 12px; border-radius: var(--radius-pill);
  border: 1px solid var(--border); background: var(--bg-main); color: var(--text-main);
  font-family: inherit; font-size: var(--fs-sm); cursor: pointer; text-align: left;
}
.ts-cta:hover { border-color: var(--accent); }
.ts-chev { transform: rotate(-90deg); }

/* Clickable KPI tiles */
.kpi-clickable { cursor: pointer; transition: border-color .15s ease; }
.kpi-clickable:hover { border-color: var(--text-faint); }

/* Fix list: bot-blocked group collapsed at the end */
.fix-bot-group {
  margin-top: var(--sp-4); border: 1px dashed var(--border);
  border-radius: var(--radius-lg); padding: var(--sp-3) var(--sp-4);
  background: var(--bg-main);
}
.fix-bot-summary { cursor: pointer; display: flex; flex-direction: column; gap: 2px; list-style: none; }
.fix-bot-summary::-webkit-details-marker { display: none; }
.fix-bot-summary strong::before { content: "\25B8"; display: inline-block; margin-right: 6px; transition: transform .15s ease; }
.fix-bot-group[open] .fix-bot-summary strong::before { transform: rotate(90deg); }
.fix-bot-note { color: var(--text-second); font-size: var(--fs-sm); }
.fix-bot-group[open] .fix-bot-summary { margin-bottom: var(--sp-3); }

/* Command palette (Ctrl/Cmd + K) */
.cmdk-backdrop {
  position: fixed; inset: 0; z-index: 90; background: var(--overlay);
  display: flex; align-items: flex-start; justify-content: center; padding-top: 12vh;
}
.cmdk-backdrop.hidden { display: none; }
.cmdk {
  width: min(560px, calc(100vw - 32px)); background: var(--bg-second);
  border: 1px solid var(--border); border-radius: var(--radius-xl);
  box-shadow: var(--shadow-pop); overflow: hidden;
}
.cmdk-input {
  width: 100%; box-sizing: border-box; border: 0; border-bottom: 1px solid var(--border);
  padding: 14px 16px; background: transparent; color: var(--text-main);
  font-family: inherit; font-size: var(--fs-md); outline: none;
}
.cmdk-list { max-height: 50vh; overflow-y: auto; margin: 0; padding: 6px; list-style: none; }
.cmdk-item {
  display: flex; align-items: center; gap: 10px; padding: 8px 10px;
  border-radius: var(--radius-md); cursor: pointer; color: var(--text-main); font-size: var(--fs-sm);
}
.cmdk-item[aria-selected="true"] { background: var(--bg-muted); }
.cmdk-kind { margin-left: auto; color: var(--text-faint); font-size: var(--fs-xs); white-space: nowrap; }
.cmdk-sub { color: var(--text-second); font-family: var(--mono); font-size: var(--fs-xs); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.cmdk-empty { padding: 14px 16px; color: var(--text-second); font-size: var(--fs-sm); }
.cmdk-hint { padding: 8px 16px; border-top: 1px solid var(--border); color: var(--text-faint); font-size: var(--fs-xs); }
.search-trigger {
  display: flex; align-items: center; gap: 8px; width: 100%; box-sizing: border-box;
  margin: 0 0 var(--sp-3); padding: 7px 10px; border-radius: var(--radius-md);
  border: 1px solid var(--border); background: var(--bg-second); color: var(--text-second);
  font-family: inherit; font-size: var(--fs-sm); cursor: pointer;
}
.search-trigger kbd { margin-left: auto; font-family: var(--mono); font-size: var(--fs-2xs); color: var(--text-faint); }

/* Accessibility: a visible focus ring everywhere keyboard focus lands */
:where(button, a, [tabindex], input, select, textarea, summary):focus-visible {
  outline: 2px solid var(--accent); outline-offset: 2px;
}
.sr-only {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.st-host-staging { display: block; }



/* =====================================================================
   Ojo v4 — references: Orderze (dashboard composition, tags, textures)
   and Lightbox (shell, tray cards, light type, instruments).
   One family (Geist), light weights; numbers carry size, not weight.
   Panels are "trays": a white card sitting inside a pale gray frame.
   Primary actions are ink (near-black); the logo yellow is the accent
   for data, tags and the health instrument.
   spacing 4·8·12·16·20·24·32 · radius tray 20 / card 16 / control 10 / tag 999
   ===================================================================== */

:root, [data-theme="light"] {
  --ink: #18181b; --ink-2: #3f3f46; --ink-3: #5c5c66; --ink-4: #6b6b74;
  --line: #e7e7e4; --line-2: #dcdcd8; --tray: #f4f4f2; --tray-line: #e9e9e6;
  --page: #fcfcfb; --surface: #ffffff; --hover: #f4f4f3;
  --y: #f7bd15; --y-deep: #d99e00; --y-ink: #6b4d00; --y-soft: #fff3c6;
  --lime: #bdf26b; --lime-ink: #2f5300;
  --red: #f0503c; --red-soft: #ffe2dc; --red-ink: #b42614;
  --orange: #ff9a3c; --orange-soft: #ffeedc; --orange-ink: #a95300;
  --green: #4fb84a; --green-soft: #e3f6d6; --green-ink: #2d7a2a;
  --blue: #3aa0e8; --pink: #ec5fa3;

  --bg-main: var(--page); --bg-second: var(--surface); --bg-third: var(--hover); --bg-muted: #ebebe8;
  --sidebar-bg: var(--surface); --border: var(--line); --border-strong: var(--line-2);
  --text-main: var(--ink-2); --text-strong: var(--ink); --text-second: var(--ink-3); --text-faint: var(--ink-4);
  --accent: var(--y); --text-on-accent: #1a1300;
  --status-critical: var(--red); --status-critical-text: var(--red-ink);
  --status-warning: var(--orange); --status-warning-text: var(--orange-ink);
  --status-good: var(--green); --status-good-text: var(--green-ink);
  --alert: var(--red); --alert-text: var(--red-ink); --alert-soft: var(--red-soft);
  --review: var(--orange-ink); --review-vivid: var(--orange); --review-soft: var(--orange-soft);
  --ok: var(--green); --ok-soft: var(--green-soft); --status-empty: #ececea;
  --link: #1f6fb2; --overlay: rgba(24, 24, 27, 0.4);
  --gauge-on: var(--y); --gauge-on-dot: rgba(255, 255, 255, 0.55);
  --gauge-off: #ecece8; --gauge-off-dot: #d6d6d1;
  --yellow: var(--y); --yellow-lip: var(--y-deep); --yellow-soft: var(--y-soft); --yellow-ink: var(--y-ink);
  --red-lip: #c93b29; --blue-soft: #e1f0fb; --green-lip: #3c9938; --orange-lip: #e07f20;
  --hero-a: #fff4cc; --hero-b: #f1f8e8; --hero-c: #e3f1fb;
  --shadow-card: 0 1px 2px rgba(24, 24, 27, 0.04);
  --shadow-float: 0 8px 24px rgba(24, 24, 27, 0.08), 0 1px 3px rgba(24, 24, 27, 0.06);
  --shadow-pop: 0 24px 64px rgba(24, 24, 27, 0.16);
  color-scheme: light;
}
[data-theme="dark"] {
  --ink: #fafafa; --ink-2: #d4d4d8; --ink-3: #b4b4bc; --ink-4: #9a9aa3;
  --line: #27272a; --line-2: #3f3f46; --tray: #141416; --tray-line: #222225;
  --page: #0c0c0e; --surface: #18181b; --hover: #222225;
  --y-soft: rgba(247, 189, 21, 0.14); --y-ink: #ffd25a;
  --red-soft: rgba(240, 80, 60, 0.16); --red-ink: #ff8a78;
  --orange-soft: rgba(255, 154, 60, 0.16); --orange-ink: #ffb877;
  --green-soft: rgba(79, 184, 74, 0.16); --green-ink: #8ddb84;
  --lime-ink: #1d3600;
  --bg-muted: #2a2a2e; --status-empty: #26262a;
  --gauge-off: #26262a; --gauge-off-dot: #3a3a40;
  --hero-a: rgba(247, 189, 21, 0.16); --hero-b: rgba(79, 184, 74, 0.06); --hero-c: rgba(58, 160, 232, 0.1);
  --overlay: rgba(0, 0, 0, 0.6);
  --link: #6db7ef;
  color-scheme: dark;
}
:root {
  --s1: 4px; --s2: 8px; --s3: 12px; --s4: 16px; --s5: 20px; --s6: 24px; --s8: 32px;
  --r-tray: 20px; --r-card: 16px; --r-ctl: 10px;
  --ease: cubic-bezier(0.23, 1, 0.32, 1); --ease-io: cubic-bezier(0.77, 0, 0.175, 1);
  --z-sticky: 20; --z-fab: 40; --z-modal: 80; --z-tour: 90; --z-toast: 95; --z-tip: 100;
}

/* ---------------------------------------------------------------- base */
body { font-family: "Geist", "Inter", system-ui, -apple-system, "Segoe UI", sans-serif; font-weight: 400; font-size: 14px; line-height: 1.5; color: var(--ink-2); background: var(--page); letter-spacing: -0.005em; -webkit-font-smoothing: antialiased; }
h1, h2, h3 { font-family: inherit; color: var(--ink); font-weight: 500; text-wrap: balance; }
b, strong { font-weight: 500; }
::selection { background: var(--y); color: #1a1300; }
:where(button, a, [tabindex], input, select, textarea, summary):focus-visible { outline: 2px solid var(--ink) !important; outline-offset: 2px; }
.icon { stroke-width: 1.6; }

/* -------------------------------------------------------------- shell */
.shell { min-height: 100dvh; }
.sidebar {
  width: 264px !important; flex: none; box-sizing: border-box; padding: var(--s6) var(--s4) var(--s4) !important;
  background: var(--surface) !important; border-right: 1px solid var(--line) !important;
  display: flex !important; flex-direction: column; gap: var(--s4) !important;
  position: sticky; top: 0; height: 100dvh; overflow-y: auto;
}
.main { flex: 1; min-width: 0; padding: 0 var(--s8) var(--s8) !important; max-width: 1480px !important; box-sizing: border-box; }

.brand { display: flex; align-items: center; gap: var(--s3) !important; padding: 0 var(--s1) var(--s4) !important; margin: 0 !important; border-bottom: 1px solid var(--line); }
.logo-mark { width: 34px !important; height: 34px !important; background: none !important; border-radius: 0 !important; flex: none; }
.logo-mark .logo-img { width: 34px; height: 34px; display: block; transition: transform 200ms var(--ease); }
.brand:hover .logo-mark .logo-img { transform: rotate(-6deg); }
.logo-mark.blink .logo-img { animation: blink 360ms ease; }
@keyframes blink { 50% { transform: scaleY(0.86) translateY(1px); } }
.brand-text { display: flex; flex-direction: column; min-width: 0; }
.brand-text strong { font-size: 20px !important; font-weight: 600 !important; line-height: 1.1; color: var(--ink); letter-spacing: -0.02em; }
.brand-text .site { font-size: 12px !important; color: var(--ink-3) !important; text-decoration: none; }

/* sites: account-switcher style */
.site-switch { display: flex; flex-direction: column; gap: var(--s2) !important; margin: 0 !important; }
.site-switch > .side-label { display: none; }
.site-tabs { display: flex; flex-direction: column; gap: 2px; }
.site-tab {
  display: grid !important; grid-template-columns: 32px minmax(0, 1fr); grid-template-rows: auto auto; column-gap: var(--s3); align-items: center;
  padding: 8px 10px !important; margin: 0 !important; border: 1px solid transparent !important; border-radius: 12px !important;
  background: none !important; box-shadow: none !important; text-align: left; cursor: pointer; transition: background 150ms ease;
}
.site-tab:hover { background: var(--hover) !important; }
.site-tab.active { background: var(--surface) !important; border-color: var(--line) !important; box-shadow: 0 1px 2px rgba(0,0,0,.04), 0 0 0 4px var(--tray) !important; }
.st-av { grid-row: 1 / 3; width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center; background: var(--y); color: #1a1300; font-weight: 600; font-size: 14px; }
.site-tab:not(.active) .st-av { background: var(--hover); color: var(--ink-3); }
.st-main { display: flex; align-items: center; gap: var(--s2); min-width: 0; }
.st-name { font-size: 14px !important; font-weight: 500 !important; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.st-host { font-size: 12px !important; color: var(--ink-3) !important; font-family: inherit !important; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.st-host-staging { display: inline !important; }
.st-flag { display: none !important; }
.site-add { display: none !important; }

.search-trigger {
  display: flex; align-items: center; gap: var(--s2); width: 100%; height: 40px; margin: 0 !important; padding: 0 var(--s3); box-sizing: border-box;
  border: 1px solid var(--line); border-radius: var(--r-ctl); background: var(--surface); color: var(--ink-3);
  font: 400 14px inherit; cursor: pointer; box-shadow: 0 1px 2px rgba(0,0,0,.03); transition: border-color 150ms ease;
}
.search-trigger:hover { border-color: var(--line-2); }
.search-trigger kbd { margin-left: auto; padding: 1px 6px; border-radius: 6px; font: 500 12px inherit; color: var(--ink-3); background: var(--hover); border: 0; }

.nav { display: flex !important; flex-direction: column; gap: 2px !important; margin: 0 !important; }
.nav::before { content: attr(data-label); }
.nav-item {
  display: flex !important; align-items: center; gap: var(--s3) !important; height: 40px; box-sizing: border-box; padding: 0 var(--s3) !important;
  border-radius: var(--r-ctl) !important; border: 0; font-size: 14px !important; font-weight: 400 !important; color: var(--ink-2) !important; text-decoration: none;
  transition: background 150ms ease, color 150ms ease;
}
.nav-item .icon { width: 18px; height: 18px; flex: none; color: var(--ink-3); opacity: 1 !important; }
.nav-item:hover { background: var(--hover) !important; color: var(--ink) !important; }
.nav-item.active { background: var(--hover) !important; color: var(--ink) !important; font-weight: 500 !important; }
.nav-item.active .icon { color: var(--ink); }
.nav-item > span:not(.nav-badge) { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nav-badge { margin-left: auto; min-width: 20px; height: 20px; padding: 0 6px; box-sizing: border-box; border-radius: 10px; display: inline-grid; place-items: center; font-size: 12px; font-weight: 500; background: var(--hover) !important; color: var(--ink-3) !important; }
.nav-item[data-view="fixlist"] .nav-badge, .nav-item[data-view="pages"] .nav-badge, .nav-item[data-view="links"] .nav-badge { background: var(--red-soft) !important; color: var(--red-ink) !important; }
.nav-badge:empty { display: none !important; }
.nav-group { margin-top: var(--s4); }
.nav-group-head { display: block !important; height: auto !important; padding: 0 var(--s3) var(--s2) !important; background: none !important; border: 0 !important; pointer-events: none; text-align: left; width: 100%; }
.nav-group-head .ng-full { font-size: 12px !important; font-weight: 500 !important; letter-spacing: 0.02em !important; text-transform: uppercase; color: var(--ink-4) !important; }
.nav-group-head .icon, .nav-group-head .nav-group-dot, .nav-group-head .ng-short, .nav-group-chev { display: none !important; }
.nav-group-menu { position: static !important; display: flex !important; flex-direction: column; gap: 2px; visibility: visible !important; opacity: 1 !important; transform: none !important; padding: 0 !important; margin: 0 !important; border: 0 !important; box-shadow: none !important; background: none !important; width: auto !important; }

.sidebar-foot { margin-top: auto !important; display: grid !important; grid-template-columns: 1fr auto auto; gap: var(--s2) !important; padding-top: var(--s4); border-top: 1px solid var(--line); }
.sidebar-foot .mini-card { display: none !important; }
#helpBtn { grid-column: 1 / -1; justify-content: flex-start !important; }

/* First steps: Lightbox "trial" card */
.fs { position: static !important; width: auto !important; margin: 0 !important; padding: var(--s4) !important; border: 1px solid var(--line) !important; border-radius: 14px !important; background: var(--surface) !important; box-shadow: 0 1px 2px rgba(0,0,0,.04), 0 0 0 5px var(--tray) !important; }
.fs-head { display: flex; align-items: center; gap: var(--s3); width: 100%; padding: 0; border: 0; background: none; cursor: pointer; text-align: left; color: inherit; font: inherit; }
.fs-head .beeby-avatar { width: 32px !important; height: 32px !important; box-shadow: none !important; }
.fs-ht { display: flex; flex-direction: column; flex: 1; min-width: 0; line-height: 1.25; }
.fs-ht b { font-size: 16px; font-weight: 500; color: var(--ink); }
.fs-ht span { font-size: 13px; color: var(--ink-3); }
.fs-chev { color: var(--ink-4); transition: transform 200ms var(--ease); }
.fs.collapsed .fs-chev { transform: rotate(180deg); }
.fs-bar { height: 4px; margin: var(--s3) 0 0; border-radius: 2px; background: var(--hover); overflow: hidden; }
.fs-bar i { display: block; height: 100%; border-radius: 2px; background: var(--ink); transition: width 600ms var(--ease); }
.fs-list { list-style: none; margin: var(--s3) 0 0; padding: 0; display: flex; flex-direction: column; }
.fs.collapsed .fs-list, .fs.collapsed .fs-hide { display: none; }
.fs-list li { display: flex; align-items: center; gap: var(--s2); padding: 4px 0; font-size: 13px; color: var(--ink-2); }
.fs-check { width: 16px; height: 16px; flex: none; border-radius: 50%; border: 1.5px solid var(--line-2); display: grid; place-items: center; color: transparent; transition: background 200ms ease, border-color 200ms ease; }
.fs-check .icon { width: 10px; height: 10px; stroke-width: 3; }
.fs-list li.done { color: var(--ink-4); text-decoration: line-through; }
.fs-list li.done .fs-check { background: var(--ink); border-color: var(--ink); color: var(--page); }
.fs-list li.pop .fs-check { animation: check-pop 420ms var(--ease); }
@keyframes check-pop { 0% { transform: scale(0.6); } 60% { transform: scale(1.2); } 100% { transform: scale(1); } }
.fs-hide { display: inline-flex; margin-top: var(--s3); padding: 0 !important; border: 0; background: none; font: 500 13px inherit; color: var(--ink) !important; cursor: pointer; }

/* ------------------------------------------------------------- topbar */
.topbar {
  position: sticky; top: 0; z-index: var(--z-sticky); display: flex !important; align-items: center !important; justify-content: space-between; gap: var(--s4) !important;
  min-height: 76px; padding: var(--s4) 0 !important; margin: 0 0 var(--s6) !important; box-sizing: border-box;
  background: color-mix(in srgb, var(--page) 92%, transparent) !important; backdrop-filter: blur(10px); border-bottom: 1px solid var(--line) !important;
}
.topbar h1 { margin: 0 !important; font-size: 28px !important; font-weight: 500 !important; line-height: 1.2; letter-spacing: -0.02em !important; color: var(--ink); }
.topbar .sub { margin: 2px 0 0 !important; font-size: 13px !important; color: var(--ink-3) !important; }
.actions { display: flex !important; align-items: center; gap: var(--s2) !important; }
.actions .pill { order: -1; margin-right: var(--s2); }
.topbar h1.swap { animation: title-in 220ms var(--ease); }
@keyframes title-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }

/* ------------------------------------------------------------ controls */
.btn-primary, .btn-3d {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--s2); height: 40px; padding: 0 var(--s4); border: 0; border-radius: var(--r-ctl); cursor: pointer;
  background: var(--ink); color: var(--page); font: 500 14px/1 inherit; letter-spacing: 0; text-transform: none; box-shadow: 0 1px 2px rgba(0,0,0,.12), inset 0 1px 0 rgba(255,255,255,.08);
  transition: transform 140ms var(--ease), background 150ms ease;
}
.btn-primary:hover, .btn-3d:hover { background: color-mix(in srgb, var(--ink) 88%, var(--page)); }
.btn-primary:active, .btn-3d:active { transform: scale(0.97); }
.btn-primary:disabled { opacity: 0.6; cursor: progress; }
.btn-primary .icon { width: 16px; height: 16px; stroke-width: 2; }
.btn-primary:disabled .icon { animation: spin 0.9s linear infinite; }
.btn-primary.danger { background: var(--red) !important; color: #fff !important; }
.btn-3d.sm, .btn-ghost.sm { height: 34px !important; padding: 0 var(--s3) !important; font-size: 13px !important; }
.btn-ghost, .btn-secondary, .sort-toggle, .btn-dark {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--s2); height: 40px; padding: 0 var(--s4) !important; box-sizing: border-box;
  border: 1px solid var(--line) !important; border-radius: var(--r-ctl) !important; background: var(--surface) !important; color: var(--ink) !important;
  font: 500 14px inherit !important; text-decoration: none; cursor: pointer; box-shadow: 0 1px 2px rgba(0,0,0,.04) !important;
  transition: background 150ms ease, transform 140ms var(--ease);
}
.btn-ghost:hover, .btn-secondary:hover, .sort-toggle:hover { background: var(--hover) !important; }
.btn-ghost:active, .btn-secondary:active, .sort-toggle:active { transform: scale(0.97); }
.btn-icon, #themeToggle { width: 40px !important; padding: 0 !important; }
.btn-icon .icon, #themeToggle .icon { width: 18px; height: 18px; }
.pill { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 var(--s3) !important; border-radius: 999px !important; font-size: 13px !important; font-weight: 500 !important; border: 0 !important; }
.pill.alert { background: var(--red-soft) !important; color: var(--red-ink) !important; }
.pill.review { background: var(--orange-soft) !important; color: var(--orange-ink) !important; }
.pill.ok { background: var(--green-soft) !important; color: var(--green-ink) !important; }
.chip { height: 34px; padding: 0 var(--s3) !important; border-radius: 999px !important; border: 1px solid var(--line) !important; background: var(--surface) !important; color: var(--ink-2) !important; font: 400 14px inherit !important; transition: background 150ms ease, transform 140ms var(--ease); }
.chip:hover { background: var(--hover) !important; }
.chip:active { transform: scale(0.97); }
.chip.active { background: var(--ink) !important; border-color: var(--ink) !important; color: var(--page) !important; }
.tag, .badge { border-radius: 999px !important; font-weight: 500 !important; }
.tag-new { display: none !important; }
input[type="text"], input[type="search"], input:not([type]), textarea, select { border: 1px solid var(--line-2) !important; border-radius: var(--r-ctl) !important; background: var(--surface) !important; color: var(--ink) !important; font: 400 14px inherit !important; }
input:focus, textarea:focus, select:focus { border-color: var(--ink) !important; outline: none !important; box-shadow: 0 0 0 3px color-mix(in srgb, var(--ink) 12%, transparent) !important; }
::placeholder { color: var(--ink-3); opacity: 1; }

/* -------------------------------------------------------------- trays */
/* A white card inside a pale frame: border + 6px tray ring + outer line. */
.panel, .card {
  box-sizing: border-box; min-width: 0; padding: var(--s5) var(--s6) !important; margin: 7px 7px calc(var(--s4) + 7px) !important;
  background: var(--surface) !important; border: 1px solid var(--line) !important; border-radius: var(--r-card) !important;
  box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important;
}
.panel { display: flex; flex-direction: column; margin: 7px !important; }
.panel-head, .card-head { display: flex !important; align-items: flex-start !important; justify-content: space-between; gap: var(--s3) !important; margin: 0 0 var(--s4) !important; min-height: 34px; }
.panel-head h2, .card-head h2 { margin: 0 !important; font-size: 16px !important; font-weight: 500 !important; line-height: 1.3; letter-spacing: -0.01em !important; color: var(--ink) !important; }
.panel-sub, .card-sub { margin: 2px 0 0 !important; font-size: 13px !important; color: var(--ink-3) !important; }
.panel-note, .card-note { flex: none; font-size: 13px !important; font-weight: 400 !important; color: var(--ink-3) !important; white-space: nowrap; line-height: 34px; }
.panel-head .btn-icon, .card-head .table-toggle, .panel-head .table-toggle { flex: none; width: 34px !important; height: 34px !important; }
.zone-label { display: none !important; }

/* --------------------------------------------------------- overview grid */
.ov {
  display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--s4); row-gap: var(--s4); align-items: stretch;
  grid-template-areas:
    "hero hero hero hero hero hero kpi kpi kpi kpi kpi kpi"
    "next next next next next next next next side side side side"
    "trend trend trend trend fun fun fun fun cov cov cov cov"
    "types types types types types types burn burn burn burn burn burn"
    "cat cat cat cat cat cat worst worst worst worst worst worst"
    "sec sec sec sec sec sec sec sec sec sec sec sec";
}
.ov-hero { grid-area: hero; } .ov-kpis { grid-area: kpi; } .ov-next { grid-area: next; } .ov-side { grid-area: side; }
.ov-trend { grid-area: trend; } .ov-funnel { grid-area: fun; } .ov-cov { grid-area: cov; }
.ov-types { grid-area: types; } .ov-burn { grid-area: burn; } .ov-cat { grid-area: cat; } .ov-worst { grid-area: worst; } .ov-sections { grid-area: sec; }
.ov-side { display: flex; flex-direction: column; gap: var(--s4); min-width: 0; }
.ov-side > .panel { flex: 1; }
@media (max-width: 1200px) {
  .ov { grid-template-areas: "hero hero hero hero hero hero hero hero hero hero hero hero" "kpi kpi kpi kpi kpi kpi kpi kpi kpi kpi kpi kpi" "next next next next next next next next next next next next" "side side side side side side side side side side side side" "trend trend trend trend trend trend fun fun fun fun fun fun" "cov cov cov cov cov cov cov cov cov cov cov cov" "types types types types types types burn burn burn burn burn burn" "cat cat cat cat cat cat worst worst worst worst worst worst" "sec sec sec sec sec sec sec sec sec sec sec sec"; }
  .ov-side { flex-direction: row; }
}
@media (max-width: 860px) { .ov { grid-template-columns: 1fr; grid-template-areas: "hero" "kpi" "next" "side" "trend" "fun" "cov" "types" "burn" "cat" "worst" "sec"; } .ov-side { flex-direction: column; } }

@media (prefers-reduced-motion: no-preference) {
  .view.active .ov > * { animation: settle 420ms var(--ease) both; }
  .ov > *:nth-child(2) { animation-delay: 50ms; } .ov > *:nth-child(3) { animation-delay: 90ms; } .ov > *:nth-child(4) { animation-delay: 120ms; } .ov > *:nth-child(n+5) { animation-delay: 160ms; }
}
@keyframes settle { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.view.active { animation: none !important; }

/* --------------------------------------------------------- hero (Orderze) */
.ov-hero {
  align-items: center; text-align: center; gap: var(--s2); padding: var(--s6) var(--s6) var(--s5) !important; overflow: hidden;
  background: radial-gradient(120% 90% at 0% 0%, var(--hero-a), transparent 60%), radial-gradient(100% 90% at 100% 100%, var(--hero-c), transparent 60%), linear-gradient(var(--hero-b), var(--hero-b)) !important;
}
.hero-hello { margin: 0; font-size: 28px; font-weight: 500; letter-spacing: -0.03em; line-height: 1.15; }
.hero-sub { margin: var(--s1) 0 0; font-size: 16px; color: var(--ink-2); }
.score-bars { width: 100%; display: flex !important; flex-direction: column !important; align-items: center !important; gap: 0 !important; margin: var(--s2) 0 0 !important; }
.gauge { position: relative; width: min(380px, 100%); aspect-ratio: 400 / 262; }
.gauge svg { width: 100%; height: 100%; display: block; overflow: visible; }
.gseg-off { fill: url(#gDotsOff); stroke: var(--gauge-off); stroke-linejoin: round; }
.gseg-on { fill: url(#gDotsOn); stroke: var(--gauge-on); stroke-linejoin: round; }
@media (prefers-reduced-motion: no-preference) {
  .gseg .gseg-on { animation: seg-in 420ms var(--ease) both; animation-delay: calc(150ms + var(--k) * 100ms); }
  .gknob { animation: seg-in 300ms var(--ease) 750ms both; }
  .gauge-chip { animation: chip-in 360ms var(--ease) 900ms both; }
}
@keyframes seg-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes chip-in { from { opacity: 0; transform: translate(-50%, calc(-100% + 6px)); } to { opacity: 1; transform: translate(-50%, -100%); } }
.gknob-ring { fill: #fff; stroke: rgba(0,0,0,.08); stroke-width: 1; filter: drop-shadow(0 2px 4px rgba(0,0,0,.12)); }
.gknob-dot { fill: var(--y); }
.ggoal-line { display: none; }
.gauge-hit { fill: none; stroke: transparent; pointer-events: stroke; cursor: help; }
.gauge-center { position: absolute; left: 0; right: 0; bottom: 8%; display: flex; flex-direction: column; align-items: center; gap: 2px; pointer-events: none; }
.gauge-num { font-size: 64px; font-weight: 500; line-height: 1; letter-spacing: -0.04em; color: var(--ink); font-variant-numeric: tabular-nums; }
.gauge-cap { font-size: 16px; font-weight: 400; color: var(--ink-2); }
.gauge-delta { margin-top: 2px; padding: 0; background: none !important; font-size: 14px; font-weight: 400; color: var(--ink-3) !important; }
.gauge-delta.bad::first-letter { color: var(--red); }
/* the goal callout: white bubble with a pointer cursor, like Orderze's */
.gauge-chip {
  position: absolute; transform: translate(-50%, -100%); display: flex; flex-direction: column; align-items: flex-start; gap: 0;
  padding: 8px 12px; border-radius: 12px; background: #fff; color: var(--ink-3); box-shadow: 0 6px 20px rgba(24,24,27,.1), 0 0 0 1px rgba(24,24,27,.04);
  font-size: 13px; font-weight: 400; white-space: nowrap; line-height: 1.2; text-align: left;
}
.gauge-chip b { font-size: 20px; font-weight: 500; color: #18181b; letter-spacing: -0.02em; }
.gauge-chip::after { content: ""; position: absolute; left: 50%; bottom: -14px; width: 16px; height: 18px; transform: translateX(-30%) rotate(-12deg);
  background: no-repeat center/contain url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 18'%3E%3Cpath d='M1.5 1.5l12 6.2-5.4 1.4-2.4 5.3z' fill='%23fff' stroke='%2318181b' stroke-width='1.5' stroke-linejoin='round'/%3E%3C/svg%3E"); }
.gauge-under { display: flex; gap: var(--s4); justify-content: center; margin-top: var(--s1); }
.gauge-pill { display: inline-flex; align-items: center; gap: 6px; height: auto; padding: 0; background: none; font-size: 14px; color: var(--ink-2); }
.gauge-pill i { width: 8px; height: 8px; border-radius: 50%; background: var(--pink); }
.gauge-pill i.prev { background: var(--ink-4); }
.bullet-note { font-size: 12px; color: var(--ink-3); }

/* ------------------------------------------------------- KPI tiles (Orderze) */
.ov-kpis { display: grid !important; grid-template-columns: 1fr 1fr !important; grid-auto-rows: 1fr; gap: var(--s4) !important; margin: 0 !important; }
.kpi {
  display: flex !important; flex-direction: column; justify-content: space-between; gap: var(--s3) !important; min-width: 0; box-sizing: border-box; margin: 7px;
  padding: var(--s5) !important; border-radius: var(--r-card) !important; background: var(--surface) !important; border: 1px solid var(--line) !important;
  box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important; transition: transform 160ms var(--ease); animation: none !important;
}
.kpi.sk { min-height: 150px; background: var(--hover) !important; }
.kpi-clickable { cursor: pointer; }
.kpi-clickable:active { transform: scale(0.99); }
.kpi-head { display: flex; align-items: center; gap: var(--s2); min-width: 0; }
.kpi-icon { display: none !important; }
.kpi-label { flex: 1; min-width: 0; font-size: 16px !important; font-weight: 400 !important; color: var(--ink) !important; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.kpi-go { flex: none; width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; border: 1.5px solid var(--y); color: var(--ink); transition: background 150ms ease, transform 200ms var(--ease); }
.kpi-go .icon { width: 15px; height: 15px; stroke-width: 1.8; }
@media (hover: hover) { .kpi-clickable:hover .kpi-go { background: var(--y); transform: rotate(45deg); } }
.kpi-row { display: flex; align-items: center; justify-content: space-between; gap: var(--s2); }
.kpi-value { font-size: 40px !important; font-weight: 500 !important; line-height: 1 !important; letter-spacing: -0.035em !important; color: var(--ink) !important; font-variant-numeric: tabular-nums; }
.kpi-tag { flex: none; height: 28px; padding: 0 12px; border-radius: 999px; display: inline-flex; align-items: center; font-size: 13px; font-weight: 400; white-space: nowrap; }
.kpi-tag.alert { background: var(--red-soft); color: var(--red-ink); }
.kpi-tag.warn { background: var(--y); color: #1a1300; }
.kpi-tag.good { background: var(--lime); color: var(--lime-ink); }
.kpi-tag.muted { background: var(--hover); color: var(--ink-2); }
.kpi-bars { display: none !important; }
.kpi-note { font-size: 14px !important; font-weight: 400 !important; color: var(--ink-3) !important; line-height: 1.4 !important; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.kpi .kpi-delta, .kpi .kpi-spark { display: none !important; }

/* ------------------------------------------------- fix next (table rows) */
.fn-table { display: flex; flex-direction: column; gap: 6px; flex: 1; }
.fn-thead, .fn-row { display: grid; grid-template-columns: minmax(0, 2.4fr) minmax(0, 1.4fr) 64px 92px; align-items: center; column-gap: var(--s4); padding: 0 var(--s4); }
.fn-thead { height: 36px; font-size: 13px; color: var(--ink-3); }
.fn-thead span:nth-child(3) { text-align: right; }
.fix-next { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.fn-row { min-height: 58px; border-radius: 12px; background: var(--tray); cursor: pointer; transition: background 150ms ease; }
.fn-row:hover { background: var(--hover); }
[data-theme="light"] .fn-row:hover, :root:not([data-theme="dark"]) .fn-row:hover { background: #efefec; }
@media (prefers-reduced-motion: no-preference) { .fn-row { animation: settle 300ms var(--ease) both; animation-delay: calc(80ms + var(--i) * 40ms); } }
.fn-cell { min-width: 0; }
.fn-issue { display: flex; align-items: center; gap: var(--s3); }
.fn-sev { width: 30px; height: 30px; flex: none; border-radius: 50%; display: grid; place-items: center; background: var(--surface); box-shadow: 0 0 0 1px var(--line); }
.fn-sev.alert { color: var(--red); } .fn-sev.review { color: var(--orange); }
.fn-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.fn-title { font-size: 14px; font-weight: 500; color: var(--ink); }
.fn-detail { font-size: 13px; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fn-path { font-size: 13px; color: var(--ink-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fn-reach { text-align: right; font-size: 16px; font-weight: 500; color: var(--ink); font-variant-numeric: tabular-nums; }

/* --------------------------------------------- side: goal strip + Beeby */
.gs-head { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); }
.gs-num { display: flex; align-items: baseline; gap: 6px; }
.gs-num b { font-size: 40px; font-weight: 500; letter-spacing: -0.035em; color: var(--ink); line-height: 1; }
.gs-num span { font-size: 16px; color: var(--ink-3); }
.gs-strip { display: grid; grid-template-columns: repeat(50, 1fr); gap: 2px; height: 40px; margin-top: var(--s4); }
.gs-strip i { border-radius: 3px; background: var(--hover); }
.gs-strip i.goal { background: var(--y-soft); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--y) 40%, transparent); }
.gs-strip i.on { background: var(--y); }
@media (prefers-reduced-motion: no-preference) { .gs-strip i.on { animation: strip-in 300ms var(--ease) both; animation-delay: calc(var(--k) * 12ms); transform-origin: bottom; } }
@keyframes strip-in { from { transform: scaleY(0.2); opacity: 0; } to { transform: none; opacity: 1; } }
.gs-foot { margin-top: var(--s3); font-size: 13px; color: var(--ink-3); }

.ov-beeby { padding: 0 !important; overflow: hidden; background: linear-gradient(160deg, var(--surface) 30%, var(--tray)) !important; }
.today-summary { display: flex !important; flex-direction: row !important; align-items: stretch !important; gap: 0 !important; margin: 0 !important; padding: 0 !important; border: 0 !important; background: none !important; box-shadow: none !important; min-height: 100%; }
.today-summary.hidden { display: none !important; }
.bc-text { flex: 1; min-width: 0; padding: var(--s5); display: flex; flex-direction: column; gap: 4px; }
.bc-who { margin: 0; font-size: 13px; color: var(--ink-3); }
.bc-who b { color: var(--ink); font-weight: 500; }
.bc-facts { margin: 0; font-size: 16px; line-height: 1.45; color: var(--ink); }
.bc-cta { align-self: flex-start; margin-top: auto; display: inline-flex; align-items: center; gap: 6px; padding: 0; border: 0; background: none; color: var(--ink); font: 500 14px inherit; cursor: pointer; text-align: left; max-width: 100%; }
.bc-cta strong { font-weight: 500; }
.bc-cta .ts-chev { transform: rotate(-90deg); transition: transform 200ms var(--ease); }
.bc-cta:hover .ts-chev { transform: rotate(-90deg) translateY(3px); }
.bc-cta:hover { text-decoration: underline; text-underline-offset: 3px; }
.bc-pic { width: 112px; flex: none; position: relative; align-self: flex-end; }
.bc-pic img { display: block; width: 112px; height: 112px; object-fit: cover; object-position: 50% 0; border-radius: 16px 0 0 0; }

/* ------------------------------------------- health dot matrix (Lightbox) */
.ov-trend .health-row, .ov-trend .trend { flex: 1; display: flex; flex-direction: column; }
.dm { display: grid; grid-template-columns: repeat(var(--cols), 1fr); gap: 3px; margin-top: auto; }
.dm-col { display: grid; grid-template-rows: repeat(10, 1fr); gap: 3px; cursor: help; border-radius: 4px; }
.dm-col i { aspect-ratio: 1; border-radius: 50%; background: var(--hover); }
.dm-col i.on { background: color-mix(in srgb, var(--y) 55%, var(--surface)); }
.dm-col i.on.hi { background: var(--y); }
.dm-col i.on.top { background: var(--y-deep); }
.dm-col:hover i.on { filter: brightness(0.92); }
@media (prefers-reduced-motion: no-preference) { .dm-col { animation: settle 300ms var(--ease) both; animation-delay: calc(var(--c) * 14ms); } }
.dm-axis { display: flex; justify-content: space-between; margin-top: var(--s2); font-size: 12px; color: var(--ink-3); }
.dm-stats { display: grid; grid-template-columns: repeat(3, 1fr); margin-top: var(--s4); padding-top: var(--s3); border-top: 1px solid var(--line); }
.dm-stats div { display: flex; flex-direction: column; }
.dm-stats b { font-size: 20px; font-weight: 500; color: var(--ink); letter-spacing: -0.02em; }
.dm-stats span { font-size: 12px; color: var(--ink-3); }

/* ----------------------------------------------- funnel list (Lightbox) */
.funnel { flex: 1; display: flex; flex-direction: column; }
.fu-head { display: flex; align-items: baseline; gap: var(--s2); }
.fu-big { font-size: 40px; font-weight: 500; letter-spacing: -0.035em; color: var(--ink); line-height: 1; }
.fu-cap { font-size: 13px; color: var(--ink-3); }
.fu-list { display: flex; flex-direction: column; margin-top: var(--s3); }
.fu-row { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); padding: var(--s3) 0; }
.fu-row + .fu-row { border-top: 1px solid var(--line); }
.fu-row div { display: flex; flex-direction: column; min-width: 0; }
.fu-row b { font-size: 14px; font-weight: 500; color: var(--ink); }
.fu-row span { font-size: 13px; color: var(--ink-3); }
.fu-pct { font-size: 16px; color: var(--ink) !important; font-variant-numeric: tabular-nums; }
.fu-pct.hot { color: var(--red-ink) !important; }
.fu-btn { margin-top: auto; width: 100%; }

/* --------------------------------------------------- coverage pixels */
.ov-cov .coverage { flex: 1; display: flex; flex-direction: column; margin: 0 !important; }
.hive { display: flex; flex-direction: column; gap: var(--s4); flex: 1; }
.hive-grid { display: grid !important; grid-template-columns: repeat(14, minmax(0, 1fr)); gap: 3px !important; margin-top: auto; }
.hive-row { display: contents !important; }
.hive-cell { width: auto !important; height: auto !important; aspect-ratio: 1; padding: 0; border: 0; border-radius: 2px !important; cursor: pointer; background: var(--status-empty); clip-path: none !important; transition: transform 120ms var(--ease); }
@media (prefers-reduced-motion: no-preference) { .hive-cell { animation: px-in 240ms var(--ease) both; animation-delay: calc(var(--i) * 4ms); } }
@keyframes px-in { from { opacity: 0; transform: scale(0.6); } to { opacity: 1; transform: none; } }
.hive-cell:hover, .hive-cell:focus-visible { transform: scale(1.3); position: relative; z-index: 1; }
.hive-cell.alert { background: var(--red); } .hive-cell.review { background: var(--y); } .hive-cell.accepted { background: #b8b8b2; } .hive-cell.ok { background: var(--lime); }
[data-theme="dark"] .hive-cell.ok { background: #6f9c33; }
.hive-grid.dim .hive-cell:not(.hl) { opacity: 0.2; }
.hive-legend { display: grid; grid-template-columns: 1fr 1fr; gap: 2px var(--s4); padding-top: var(--s3); border-top: 1px solid var(--line); }
.hive-leg { display: flex; align-items: center; gap: var(--s2); padding: 4px 6px; margin: 0 -6px; border: 0; border-radius: 8px; background: none; cursor: pointer; font: 400 13px inherit; color: var(--ink-2); text-align: left; text-transform: capitalize; }
.hive-leg:hover { background: var(--hover); }
.hive-leg i { width: 10px !important; height: 10px !important; aspect-ratio: auto !important; border-radius: 2px !important; flex: none; animation: none !important; }
.hive-leg b { margin-left: auto; font-weight: 500; color: var(--ink); font-variant-numeric: tabular-nums; }

/* ---------------------------------------- by type: hatched bars (Orderze) */
.ttf-list { display: flex !important; flex-direction: column; gap: var(--s2) !important; }
.ttf-row { padding: 6px 0 !important; margin: 0 !important; border-radius: 0 !important; background: none !important; }
.ttf-label { font-size: 14px !important; font-weight: 400 !important; color: var(--ink) !important; }
.ttf-track { height: 14px !important; border-radius: 7px !important; background: #fde8e1 !important; overflow: hidden; }
[data-theme="dark"] .ttf-track { background: #2a2224 !important; }
.ttf-fill { border-radius: 7px !important; transition: width 800ms var(--ease) !important;
  background: repeating-linear-gradient(-45deg, rgba(255,255,255,.45) 0 2px, transparent 2px 6px), linear-gradient(90deg, var(--lime), var(--y) 55%, #ffb18a) !important; }
.ttf-count { font-size: 16px !important; font-weight: 500 !important; color: var(--ink) !important; font-variant-numeric: tabular-nums; }
.ttf-delta { color: var(--ink-4) !important; }
.ttf-sev { display: none !important; }

/* ------------------------------------------------ opened vs resolved */
.ov-burn .burndown-chart { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; }
.dv svg { width: 100%; height: auto; display: block; overflow: visible; }
.dv-bar { transform-box: fill-box; }
@media (prefers-reduced-motion: no-preference) { .dv-bar { animation: grow 520ms var(--ease) both; } }
.dv-bar.up { fill: var(--red); transform-origin: bottom; }
.dv-bar.down { fill: var(--lime); transform-origin: top; }
[data-theme="dark"] .dv-bar.down { fill: #8fc84b; }
@keyframes grow { from { transform: scaleY(0.02); } to { transform: scaleY(1); } }
.dv-axis { stroke: var(--line-2); stroke-width: 1; }
.dv-net { fill: none; stroke: var(--ink); stroke-width: 1.5; stroke-linejoin: round; stroke-linecap: round; stroke-dasharray: var(--len); stroke-dashoffset: var(--len); animation: draw 800ms var(--ease) 400ms forwards; }
@keyframes draw { to { stroke-dashoffset: 0; } }
.dv-net-dot { fill: var(--surface); stroke: var(--ink); stroke-width: 1.5; }
.dv-label { fill: var(--ink-3); font: 400 12px "Geist", sans-serif; }
.dv-val { font: 500 12px "Geist", sans-serif; fill: var(--ink); }
.dv-col .dv-hover { fill: transparent; }
.dv-col:hover .dv-hover { fill: var(--hover); }
.dv-legend { display: flex; gap: var(--s4); flex-wrap: wrap; margin-top: var(--s3); font-size: 13px; color: var(--ink-3); }
.dv-legend span { display: inline-flex; align-items: center; gap: 6px; }
.dv-legend i { width: 10px; height: 10px; border-radius: 3px; }
.dv-legend span:nth-child(2) i { background: var(--lime) !important; }
.dv-legend span:last-child i { background: var(--ink) !important; height: 2px; width: 14px; }

/* --------------------------------------------------------- design list */
.db-list { display: flex; flex-direction: column; }
.db-row { display: grid; grid-template-columns: minmax(120px, 1.1fr) 2fr 48px; align-items: center; column-gap: var(--s3); padding: 10px 0; }
.db-row + .db-row { border-top: 1px solid var(--line); }
.db-hdr { padding-top: 0; font-size: 13px; color: var(--ink-3); }
.db-hdr span:last-child, .db-pages { text-align: right; }
.db-name { font-size: 14px; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.db-bar { display: flex; align-items: center; gap: var(--s2); min-width: 0; }
.db-bar i { height: 8px; border-radius: 4px; background: var(--ink-4); flex: none; max-width: calc(100% - 44px); }
.db-bar i.top { background: var(--y); }
.db-bar b { font-size: 13px; font-weight: 500; color: var(--ink); font-variant-numeric: tabular-nums; }
.db-pages { font-size: 14px; font-weight: 500; color: var(--ink); font-variant-numeric: tabular-nums; }
.db-note { margin: var(--s4) 0 0; padding: var(--s3) var(--s4); border-radius: 12px; background: var(--tray); font-size: 14px; color: var(--ink-2); }

.group-grid { display: grid !important; grid-template-columns: repeat(auto-fill, minmax(176px, 1fr)) !important; gap: var(--s2) !important; }
.group-card { border: 0 !important; border-radius: 12px !important; background: var(--tray) !important; padding: var(--s3) var(--s4) !important; box-shadow: none !important; transition: background 150ms ease; }
.group-card:hover { background: var(--hover) !important; transform: none !important; }

/* --------------------------------------------------------- other views */
.view-bar { display: flex !important; align-items: center !important; justify-content: space-between; gap: var(--s3); min-height: 40px; margin: 0 0 var(--s5) !important; flex-wrap: wrap; }
.view-sub { font-size: 14px !important; color: var(--ink-3) !important; }
.priority-row, .history-item, .page-card, .request-card, .mark-row, .seo-group, .issue { border: 1px solid var(--line) !important; border-radius: 14px !important; background: var(--surface) !important; box-shadow: 0 1px 2px rgba(0,0,0,.03) !important; }
.priority-list { display: flex; flex-direction: column; gap: var(--s3); }
.priority-row { padding: var(--s4) var(--s5) !important; }
.priority-row::before { display: none !important; }
.page-card:hover { border-color: var(--line-2) !important; transform: none !important; }
.page-card.alert, .page-card.review { border-top: 1px solid var(--line) !important; background: var(--surface) !important; }
.scope-stat { border: 1px solid var(--line) !important; border-radius: 14px !important; background: var(--surface) !important; box-shadow: 0 0 0 5px var(--tray), 0 0 0 6px var(--tray-line) !important; margin: 6px; }
.scope-stat strong { font-size: 28px !important; font-weight: 500 !important; letter-spacing: -0.03em; }
.fix-bot-group { border: 1px dashed var(--line-2) !important; border-radius: 14px !important; background: var(--tray) !important; }
.bar-track { height: 8px !important; border-radius: 4px !important; background: var(--hover) !important; }
.bar-fill { border-radius: 4px !important; }
.bar-fill.alert { background: var(--red) !important; } .bar-fill.ok { background: var(--lime) !important; }
.hm-cell { border-radius: 6px !important; }
.hm-cell.alert { background: var(--red) !important; } .hm-cell.review { background: var(--y) !important; }
.modal-backdrop { background: var(--overlay) !important; }
.modal-panel { border: 1px solid var(--line) !important; border-radius: 18px !important; box-shadow: var(--shadow-pop) !important; }
@media (prefers-reduced-motion: no-preference) { .modal-panel { animation: pop-in 220ms var(--ease); } }
@keyframes pop-in { from { opacity: 0; transform: translateY(8px) scale(0.98); } to { opacity: 1; transform: none; } }
.tip { border: 1px solid var(--line) !important; border-radius: 12px !important; background: var(--surface) !important; box-shadow: var(--shadow-float) !important; z-index: var(--z-tip) !important; }
.tip-title { font-weight: 500 !important; }

/* =============================================================== Beeby */
.beeby-avatar { position: relative; flex: none; width: 40px; height: 40px; border-radius: 50%; overflow: hidden; background: #a3c93a; box-shadow: 0 0 0 2px var(--surface), 0 0 0 3px var(--line); animation: none !important; }
.beeby-avatar img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 10%; display: block; }
.beeby-avatar.sm { width: 32px; height: 32px; box-shadow: none; }
.beeby-avatar.xs { width: 24px; height: 24px; box-shadow: none; }
.beeby-avatar .beeby-fallback { display: none; }
.request-fab { display: none !important; }
.beeby-fab { display: flex !important; position: fixed !important; right: var(--s6) !important; bottom: var(--s6) !important; z-index: var(--z-fab); align-items: center; gap: var(--s2) !important; height: 48px; padding: 0 var(--s4) 0 6px !important; border: 1px solid var(--line) !important; border-radius: 999px !important; background: var(--surface) !important; color: var(--ink) !important; box-shadow: var(--shadow-float) !important; font: 500 14px inherit !important; cursor: pointer; transition: transform 160ms var(--ease); }
.beeby-fab:active { transform: scale(0.97); }
.beeby-fab .beeby-avatar.sm { width: 36px; height: 36px; }
.beeby-fab .beeby-dot { position: absolute; left: 34px; top: 6px; width: 10px; height: 10px; border-radius: 50%; background: var(--red); box-shadow: 0 0 0 2px var(--surface); }
.beeby-panel { max-height: calc(100dvh - 96px) !important; overflow-y: auto !important; display: flex; flex-direction: column; gap: var(--s3); }
.beeby-panel .modal-head { position: sticky; top: 0; z-index: 1; background: var(--surface); }
.beeby-panel .beeby-messages { max-height: none; overflow: visible; flex: none; display: flex; flex-direction: column; gap: var(--s2); }
.beeby-panel .beeby-input-row { position: sticky; bottom: 0; background: var(--surface); padding-top: var(--s2); }
.beeby-msg p { margin: 0; padding: 10px var(--s3) !important; border-radius: 14px !important; line-height: 1.45; }
.beeby-msg.assistant p { background: var(--tray) !important; color: var(--ink) !important; border-top-left-radius: 4px !important; }
.beeby-msg.user { align-self: flex-end; }
.beeby-msg.user p { background: var(--ink) !important; color: var(--page) !important; border-top-right-radius: 4px !important; }
.beeby-sugg { display: flex; flex-wrap: wrap; gap: 6px; }
.dots { display: inline-flex; gap: 4px; }
.dots i { width: 6px; height: 6px; border-radius: 50%; background: var(--ink-3); animation: hop 900ms ease-in-out infinite; }
.dots i:nth-child(2) { animation-delay: 120ms; } .dots i:nth-child(3) { animation-delay: 240ms; }
@keyframes hop { 0%, 100% { transform: none; opacity: 0.5; } 40% { transform: translateY(-3px); opacity: 1; } }
.bi { display: flex; flex-direction: column; gap: var(--s2); }
.bi-head { display: flex; align-items: center; gap: var(--s2); font-size: 13px; }
.bi-head b { font-weight: 500; color: var(--ink); }
.bi-head span { margin-left: auto; min-width: 20px; height: 20px; border-radius: 10px; display: grid; place-items: center; background: var(--y); color: #1a1300; font-weight: 500; font-size: 12px; }
.bi-card { padding: var(--s3) var(--s4); border: 1px solid var(--line); border-radius: 12px; background: var(--surface); transition: opacity 200ms ease, transform 200ms var(--ease); }
.bi-card::before { display: none; }
.bi-card.bye { opacity: 0; transform: translateX(12px); }
.bi-title { display: block; font-size: 14px; font-weight: 500; color: var(--ink); }
.bi-body { margin: 2px 0 var(--s3); font-size: 13px; line-height: 1.45; color: var(--ink-3); }
.bi-row { display: flex; align-items: center; gap: var(--s3); }
.bi-no { border: 0; background: none; cursor: pointer; font: 500 13px inherit; color: var(--ink-3); padding: 4px; }
.beeby-tip { display: flex; align-items: center; gap: var(--s3); margin: 0 0 var(--s5); padding: var(--s2) var(--s2) var(--s2) var(--s3); border: 1px solid var(--line); border-radius: 12px; background: var(--surface); box-shadow: 0 0 0 5px var(--tray); font-size: 14px; color: var(--ink); }
.beeby-tip .beeby-avatar.xs { width: 28px; height: 28px; }
.beeby-tip-x { margin-left: auto; width: 28px !important; height: 28px !important; border: 0 !important; box-shadow: none !important; background: none !important; display: grid !important; place-items: center; padding: 0 !important; }

/* walkthrough (Gitterdone language) */
.wt { position: fixed; inset: 0; z-index: var(--z-tour); pointer-events: none; }
.wt.hidden { display: none; }
.wt.behind { z-index: var(--z-sticky); }
.wt-block { position: fixed; pointer-events: auto; }
.wt-hole { position: fixed; border-radius: 16px; pointer-events: none; box-shadow: 0 0 0 200vmax rgba(12, 12, 14, 0.62); transition: left 380ms var(--ease-io), top 380ms var(--ease-io), width 380ms var(--ease-io), height 380ms var(--ease-io); }
.wt:not(.pass) .wt-hole { pointer-events: auto; }
.wt-ring { position: fixed; pointer-events: none; overflow: visible; }
.wt-scribble { fill: none; stroke: var(--y); stroke-width: 3.5; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1; stroke-dashoffset: 1; animation: scribble 660ms cubic-bezier(.65, 0, .35, 1) 120ms forwards; }
@keyframes scribble { to { stroke-dashoffset: 0; } }
.wt-card { position: fixed; width: 340px; max-width: calc(100vw - 32px); box-sizing: border-box; pointer-events: auto; padding: var(--s4); border-radius: 14px; border: 1px solid rgba(255,255,255,.1); background: #181c24; color: #fff; box-shadow: 0 24px 60px rgba(0,0,0,.4); opacity: 0; transform: translateY(4px); transition: left 380ms var(--ease-io), top 380ms var(--ease-io), opacity 180ms ease, transform 240ms var(--ease); }
.wt-card.in { opacity: 1; transform: none; }
.wt-top { display: flex; align-items: center; gap: var(--s3); }
.wt-top .beeby-avatar { width: 40px; height: 40px; box-shadow: 0 0 0 2px #181c24, 0 0 0 3.5px var(--y); }
.wt-step { margin: 0; font-size: 12px; font-weight: 500; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(255,255,255,.5); }
.wt-title { margin: 1px 0 0; font-size: 16px; font-weight: 500; color: #fff; }
.wt-body { margin: 10px 0 0; font-size: 14px; line-height: 1.55; color: rgba(255,255,255,.85); min-height: 3.1em; }
.wt-input { width: 100%; box-sizing: border-box; margin-top: var(--s3); height: 40px; padding: 0 var(--s3); background: rgba(255,255,255,.07) !important; color: #fff !important; border: 1px solid rgba(255,255,255,.18) !important; }
.wt-input::placeholder { color: rgba(255,255,255,.6); }
.wt-input:focus { border-color: var(--y) !important; box-shadow: 0 0 0 3px rgba(247,189,21,.25) !important; }
.wt-foot { display: flex; align-items: center; gap: var(--s3); margin-top: var(--s4); }
.wt-bar { flex: 1; height: 3px; border-radius: 3px; background: rgba(255,255,255,.12); overflow: hidden; }
.wt-bar i { display: block; height: 100%; background: var(--y); transition: width 400ms var(--ease); }
.wt-link { border: 0; background: none; padding: 4px 2px; cursor: pointer; font: 500 13px inherit; color: rgba(255,255,255,.6); }
.wt-link:hover { color: #fff; }
.wt-card .btn-3d { height: 34px; padding: 0 var(--s3); font-size: 13px; background: var(--y); color: #1a1300; box-shadow: none; }
.wt-wait { font-size: 12px; font-weight: 500; color: var(--y); display: inline-flex; align-items: center; gap: 6px; }
.wt-wait::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--y); animation: breathe 1.4s ease-in-out infinite; }
@keyframes breathe { 50% { opacity: 0.35; } }

.cmdk-backdrop { z-index: var(--z-modal) !important; }
.cmdk { border: 1px solid var(--line) !important; border-radius: 18px !important; box-shadow: var(--shadow-pop) !important; }
.cmdk-input { height: 52px; font: 400 16px inherit !important; border: 0 !important; border-bottom: 1px solid var(--line) !important; border-radius: 0 !important; box-shadow: none !important; }
.cmdk-item { border-radius: 10px !important; }
.cmdk-item[aria-selected="true"] { background: var(--hover) !important; }
.confetti { position: fixed; inset: 0; pointer-events: none; z-index: var(--z-toast); overflow: hidden; }
.confetti i { position: absolute; top: -14px; width: 8px; height: 12px; border-radius: 2px; animation: fall var(--d, 2.2s) cubic-bezier(.2,.7,.4,1) forwards; }
@keyframes fall { to { transform: translate3d(var(--x, 0), 105vh, 0) rotate(var(--r, 540deg)); } }

@media (max-width: 900px) { .sidebar { position: static; height: auto; width: 100% !important; } .main { padding: 0 var(--s4) var(--s8) !important; } .topbar-report span { display: none; } }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 1ms !important; animation-delay: 0ms !important; animation-iteration-count: 1 !important; transition-duration: 1ms !important; } }
.sidebar > * { flex-shrink: 0; }
.bc-cta { display: block !important; line-height: 1.4; }
.bc-cta .ts-chev { display: none; }
.bc-cta::after { content: " \2192"; }
.dm { gap: 4px; }
.dm-col { gap: 4px; }
.ov-trend .trend, .ov-cov .coverage { justify-content: flex-start; }
.ov-trend .dm, .ov-cov .hive { margin-top: var(--s4); }
.ov-cov .hive-grid { margin-top: 0; }
.ov-cov .hive-legend { margin-top: auto; }
.ov-trend .dm-axis { margin-bottom: 0; }
:root { --mono: "Geist", ui-sans-serif, system-ui, sans-serif; }
.ttf-row { grid-template-columns: minmax(0, 1.2fr) minmax(60px, 1.4fr) 36px 28px !important; column-gap: var(--s4) !important; }
.ttf-row:hover { background: none !important; }
.ttf-row:hover .ttf-label { text-decoration: underline; text-underline-offset: 3px; }
.group-grid { grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)) !important; grid-auto-rows: 1fr; gap: var(--s2) !important; }
.group-tile { display: flex; flex-direction: column; justify-content: space-between; gap: 6px; padding: var(--s3) var(--s4) !important; border: 0 !important; border-radius: 12px !important; background: var(--tray) !important; transition: background 150ms ease; }
.group-tile:hover { background: var(--hover) !important; transform: none !important; }
.group-tile.has-alert { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--red) 35%, transparent); }
.group-name { font-size: 14px !important; font-weight: 500 !important; color: var(--ink); }
.group-meta { font-size: 13px !important; color: var(--ink-3) !important; }
.ov-worst .dotplot-name, .ov-worst b { font-weight: 500; }

/* =====================================================================
   v4.1 — spacing audit. One rhythm everywhere:
   page sections 24 · between trays 16 (+7px ring each side) · inside a
   card 20/24 · between a card's head and body 16 · list rows 12.
   ===================================================================== */
:root { --gap: 16px; --ring: 7px; }

/* Trays never collide: their 7px ring lives inside the grid gap. */
.ov { column-gap: calc(var(--gap) + 2px) !important; row-gap: calc(var(--gap) + 2px) !important; }
.ov-kpis { gap: calc(var(--gap) + 2px) !important; }
.ov-side { gap: calc(var(--gap) + 2px) !important; }

/* ---------------------------------------------------------- page detail */
body.on-detail .topbar { display: none !important; }
body.on-detail .main { padding-top: var(--s6) !important; }
.pd-header { gap: var(--s4) !important; margin: 0 0 var(--s6) !important; }
.pd-back { font-size: 13px !important; color: var(--ink-3) !important; }
.pd-title-bar { align-items: center !important; gap: var(--s4) !important; }
.pd-title-line h1, #pdTitle { font-size: 28px !important; font-weight: 500 !important; letter-spacing: -0.02em !important; margin: 0 !important; }
.pd-meta { font-size: 13px !important; color: var(--ink-3) !important; }
.pd-actions { display: flex; gap: var(--s2) !important; align-items: center; }
.pd-kpis { gap: calc(var(--gap) + 2px) !important; margin: 0 0 calc(var(--s6) + 2px) !important; }
.pd-kpis > * {
  margin: var(--ring) !important; padding: var(--s4) var(--s5) !important; border: 1px solid var(--line) !important; border-radius: var(--r-card) !important;
  background: var(--surface) !important; box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important;
}
.pd-grid { display: grid !important; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr) !important; gap: calc(var(--gap) + 2px) !important; align-items: start !important; margin: 0 !important; }
.pd-left, .pd-right { display: flex !important; flex-direction: column; gap: calc(var(--gap) + 2px) !important; min-width: 0; grid-column: auto !important; position: static !important; }
.pd-issues-card, .pd-history-card, .pd-view-card, .pd-staging-card, .pd-ai-card, .pd-score-card:not(.hidden) {
  grid-column: auto !important; margin: var(--ring) !important; padding: var(--s5) var(--s6) !important;
  border: 1px solid var(--line) !important; border-radius: var(--r-card) !important; background: var(--surface) !important;
  box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important;
  display: flex; flex-direction: column; gap: var(--s4) !important;
}
.pd-staging-card.hidden, .pd-score-card.hidden { display: none !important; }
.pd-card-head { min-height: 34px; margin: 0 !important; }
.pd-card-head h2, .ai-review-head h4 { font-size: 16px !important; font-weight: 500 !important; letter-spacing: -0.01em !important; margin: 0 !important; }
.ai-review-head { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); }
.ai-review p, .plive-intro, .pd-ai-card p { margin: 0 !important; font-size: 14px; color: var(--ink-3); line-height: 1.5; }
.pd-issues { gap: var(--s3) !important; }
.pd-issues-card .drawer-suggestions { margin: 0 !important; padding-top: var(--s3); border-top: 1px solid var(--line); }
.pd-issues-card .drawer-suggestions summary { height: 32px !important; padding: 0 !important; color: var(--ink-3); }
.pd-view-card { padding: var(--s4) !important; }
.pd-screenshot-wrap { border-radius: 12px; overflow: hidden; }
.pd-view-card-note { margin: 0 !important; font-size: 13px; color: var(--ink-3); }

/* history: the last 8 events; "See all" opens the full list */
.pd-timeline-list { margin: 0 !important; padding: 0 !important; display: flex; flex-direction: column; }
.pd-timeline-row { display: grid !important; grid-template-columns: 140px 20px minmax(0, 1fr); align-items: center; min-height: 36px; gap: 0 !important; margin: 0 !important; }
.pd-timeline-row:nth-child(n+9) { display: none !important; }
.pd-timeline-date { font-size: 13px; color: var(--ink-3); font-variant-numeric: tabular-nums; }
.pd-timeline-text { font-size: 14px; color: var(--ink); }
.pd-history-card .pd-card-head a { font-size: 13px !important; color: var(--ink) !important; font-weight: 500; }

/* ------------------------------------------------------------ Beeby panel */
.beeby-panel {
  overflow: hidden !important; max-height: calc(100dvh - 48px) !important; padding: 0 !important; gap: 0 !important;
  border-radius: 20px !important; display: flex !important; flex-direction: column;
}
.beeby-panel .modal-head { position: static !important; display: flex !important; align-items: center !important; justify-content: space-between; gap: var(--s3); margin: 0 !important; padding: var(--s4) var(--s4) var(--s4) var(--s5) !important; border-bottom: 1px solid var(--line); background: var(--surface) !important; }
.bp-who { display: flex; align-items: center; gap: var(--s3); min-width: 0; }
.bp-av, .beeby-avatar.bp-av { width: 40px !important; height: 40px !important; box-shadow: 0 0 0 2px var(--surface), 0 0 0 3.5px var(--y) !important; }
.bp-names { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
#beebyPanelTitle { margin: 0 !important; padding: 0 !important; font-size: 16px !important; font-weight: 500 !important; color: var(--ink) !important; background: none !important; box-shadow: none !important; border: 0 !important; }
.bp-role { font-size: 13px; color: var(--ink-3); }
.beeby-panel .modal-head .btn-icon { width: 36px !important; height: 36px !important; flex: none; }
.bp-scroll { flex: 1; min-height: 0; overflow-y: auto; padding: var(--s4) var(--s5); display: flex; flex-direction: column; gap: var(--s4); scrollbar-gutter: stable; }
.bp-scroll::-webkit-scrollbar { width: 8px; }
.bp-scroll::-webkit-scrollbar-thumb { background: var(--line-2); border-radius: 8px; border: 2px solid var(--surface); }
#beebyIntro { margin: 0 !important; font-size: 14px !important; color: var(--ink-3) !important; }
.beeby-panel .beeby-input-row { position: static !important; display: flex; gap: var(--s2); margin: 0 !important; padding: var(--s3) var(--s4) !important; border-top: 1px solid var(--line); background: var(--surface) !important; }
.beeby-panel .beeby-input-row input { flex: 1; height: 40px; padding: 0 var(--s3); }
.beeby-modal .modal-panel.beeby-panel { width: min(400px, calc(100vw - 32px)) !important; margin: 0 var(--s6) var(--s6) auto !important; }

/* ----------------------------------------------------- small consistency */
.view-bar + .beeby-tip { margin-top: 0; }
.beeby-tip { margin: 0 var(--ring) var(--s6) !important; }
.card { margin: var(--ring) var(--ring) calc(var(--gap) + 2px + var(--ring)) !important; }
.priority-list > *, .page-grid > * { margin: 0 !important; }
.ov-goal #goalContent { flex: 1; display: flex; flex-direction: column; }
.ov-goal .gs-strip { margin-top: auto; }
.ov-goal .gs-head { margin-bottom: var(--s4); }
.bc-pic img { border-radius: 16px 0 15px 0; }

/* ---- v5: hero callouts --------------------------------------------- */
.ov-hero .gauge { width: 100%; max-width: 520px; }
.gauge-callout { position: absolute; bottom: 4%; display: flex; flex-direction: column; text-align: left; line-height: 1.2; padding: 8px 12px; border-radius: 12px; background: color-mix(in srgb, var(--surface) 82%, transparent); box-shadow: 0 0 0 1px var(--line); }
.gauge-callout.left { left: 0; }
.gauge-callout.right { right: 0; text-align: right; align-items: flex-end; }
.gauge-callout b { font-size: 20px; font-weight: 500; letter-spacing: -0.02em; color: var(--ink); }
.gauge-callout b.bad { color: var(--red-ink); }
.gauge-callout span { font-size: 13px; color: var(--ink-3); }
@media (prefers-reduced-motion: no-preference) { .gauge-callout { animation: settle 360ms var(--ease) 600ms both; } }
.ov-hero .gauge-center { bottom: 2%; }
.ov-hero .score-bars { flex: 1; justify-content: flex-end; }

/* ---- v5: health over time ends on numbers ---------------------------- */
.dm-stats { display: grid; grid-template-columns: repeat(3, 1fr); margin-top: auto; padding-top: var(--s4); border-top: 1px solid var(--line); }
.ov-trend .dm-axis { margin-bottom: var(--s4); }
.dm-stats div { display: flex; flex-direction: column; }
.dm-stats div + div { padding-left: var(--s4); border-left: 1px solid var(--line); }
.dm-stats b { font-size: 20px; font-weight: 500; color: var(--ink); letter-spacing: -0.02em; line-height: 1.1; }
.dm-stats span { font-size: 13px; color: var(--ink-3); }

/* ---- v5: Beeby "today" card ----------------------------------------- */
.ov-beeby { padding: var(--s5) !important; background: var(--surface) !important; overflow: visible; }
.ov-beeby .today-summary { display: flex !important; flex-direction: column !important; align-items: stretch !important; gap: var(--s3) !important; min-height: 0; height: 100%; }
.bt-head { display: flex; align-items: center; gap: var(--s3); }
.bt-av, .beeby-avatar.bt-av { width: 36px !important; height: 36px !important; box-shadow: 0 0 0 2px var(--surface), 0 0 0 3.5px var(--y) !important; }
.bt-who { display: flex; flex-direction: column; line-height: 1.2; }
.bt-who b { font-size: 14px; font-weight: 500; color: var(--ink); }
.bt-who span { font-size: 13px; color: var(--ink-3); }
.bt-title { margin: var(--s1) 0 0; font-size: 16px; font-weight: 500; letter-spacing: -0.01em; color: var(--ink); }
.bt-item { display: flex; align-items: center; gap: var(--s3); padding: var(--s3); border-radius: 12px; background: var(--tray); }
.bt-item .fn-sev { width: 34px; height: 34px; }
.bt-item-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.bt-item-text b { font-size: 14px; font-weight: 500; color: var(--ink); }
.bt-item-text span { font-size: 13px; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bt-why { margin: 0; font-size: 14px; line-height: 1.5; color: var(--ink-2); }
.bt-go { width: 100%; margin-top: auto; }
.bt-chips { display: flex; flex-wrap: wrap; gap: 6px; padding-top: var(--s3); border-top: 1px solid var(--line); }
.bt-chip { height: 26px; padding: 0 10px; border-radius: 999px; display: inline-flex; align-items: center; font-size: 13px; background: var(--hover); color: var(--ink-2); }
.bt-chip.bad { background: var(--red-soft); color: var(--red-ink); }
.bt-chip.good { background: var(--green-soft); color: var(--green-ink); }
.ov-hero .gauge { max-width: 440px; }
.gauge-ends { width: 100%; max-width: 440px; display: flex; justify-content: space-between; margin-top: var(--s2); }
.gauge-callout { position: static !important; padding: 0 !important; background: none !important; box-shadow: none !important; }
.gauge-callout.left { align-items: flex-start; }

/* ===================================================================
   v6: chart + spacing audit
   =================================================================== */
.tray {
  margin: var(--ring) !important; padding: var(--s5) var(--s6) !important; border: 1px solid var(--line) !important; border-radius: var(--r-card) !important;
  background: var(--surface) !important; box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important;
}
.view > .view-bar { margin-bottom: calc(var(--s4) + 4px) !important; min-height: 36px; align-items: center !important; }
.view > .view-bar .card-note { margin-left: auto; }
.view > .tip, .view > .beeby-tip { margin-bottom: calc(var(--s4) + 4px) !important; }

/* -------- links: age dot histogram */
#linksStrip.strip-chart {
  margin: var(--ring) var(--ring) calc(var(--ring) + var(--s6)) !important; padding: var(--s5) var(--s6) !important; border: 1px solid var(--line) !important; border-radius: var(--r-card) !important;
  background: var(--surface) !important; box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important;
  display: grid !important; grid-template-columns: minmax(220px, 1fr) minmax(0, 2.4fr); grid-template-areas: "head cols" "big cols"; column-gap: var(--s8, 32px); row-gap: var(--s4); align-items: start;
}
#linksStrip.hidden { display: none !important; }
.ag-head { grid-area: head; }
.ag-head h3 { margin: 0; font-size: 16px; font-weight: 500; color: var(--ink); letter-spacing: -0.01em; }
.ag-sub { margin: 4px 0 0; font-size: 13px; color: var(--ink-3); line-height: 1.45; }
.ag-big { grid-area: big; align-self: end; display: flex; flex-direction: column; gap: 4px; }
.ag-big b { font-size: 40px; font-weight: 500; letter-spacing: -0.03em; line-height: 1; color: var(--ink); }
.ag-big span { font-size: 13px; color: var(--ink-3); }
.ag-cols { grid-area: cols; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: var(--s2); }
.ag-col { display: flex; flex-direction: column; gap: var(--s3); padding: var(--s3) var(--s4); border-radius: 12px; background: var(--tray); }
.ag-stack { height: 156px; display: flex; flex-direction: column-reverse; flex-wrap: wrap; align-content: flex-start; gap: 4px; }
.ag-dot { flex: none; width: 12px; height: 12px; padding: 0; border: 0; border-radius: 50%; cursor: pointer; background: var(--red); transition: transform 140ms var(--ease); }
.ag-dot:hover, .ag-dot:focus-visible { transform: scale(1.35); outline: none; box-shadow: 0 0 0 2px var(--surface), 0 0 0 3.5px var(--ink); }
@media (prefers-reduced-motion: no-preference) { .ag-dot { animation: agpop 360ms var(--ease) both; animation-delay: calc(var(--i) * 30ms); } }
@keyframes agpop { from { opacity: 0; transform: scale(.2); } }
.ag-col.t1 .ag-dot { background: var(--y); } .ag-col.t2 .ag-dot { background: var(--orange); }
.ag-col.t3 .ag-dot, .ag-col.t4 .ag-dot, .ag-col.t5 .ag-dot { background: var(--red); }
.ag-foot { display: flex; flex-direction: column; gap: 2px; padding-top: var(--s2); border-top: 1px solid var(--line); }
.ag-foot b { font-size: 20px; font-weight: 500; color: var(--ink); line-height: 1.1; }
.ag-foot span { font-size: 12px; color: var(--ink-3); }
.ag-col.empty .ag-foot b { color: var(--ink-4); }

/* -------- links: cards without screenshots use the full width */
#linksBody, #fixListBody { display: flex !important; flex-direction: column; gap: calc(var(--gap) + 2px) !important; }
#linksBody > *, #fixListBody > * { margin: var(--ring) !important; }
.link-card-cols.no-shots { display: block !important; }
.link-card-cols.no-shots > .link-card-shots { display: none !important; }

/* -------- fix list / link rows: one internal rhythm */
.priority-row { display: flex !important; flex-direction: column; gap: var(--s3); padding: var(--s5) var(--s6) !important; }
.priority-row > * { margin: 0 !important; }
.priority-head { display: flex !important; align-items: center !important; flex-wrap: wrap; gap: var(--s2) !important; }
.priority-head > strong { font-size: 16px; font-weight: 500; color: var(--ink); margin-right: 2px; }
.priority-head > .priority-bulk { margin-left: auto !important; }
.priority-head .btn-ghost { height: 36px; padding: 0 14px !important; }
.priority-detail { color: var(--ink-3) !important; font-size: 13px !important; line-height: 1.5; }
.issue-target { font-size: 13px; word-break: break-all; }
.priority-row .dx { margin: 0 !important; padding: var(--s3) var(--s4) !important; border-radius: 12px !important; background: var(--tray) !important; border: 0 !important; }
.priority-row .dx-label { display: block; margin: 0 0 6px !important; font-size: 12px !important; font-weight: 500 !important; letter-spacing: .04em; text-transform: uppercase; color: var(--ink-3) !important; }
.priority-row .dx p { margin: 0 !important; font-size: 14px; line-height: 1.5; color: var(--ink); }
.priority-row .dx ol { margin: 0 !important; padding-left: 18px !important; }
.priority-row .dx li { font-size: 14px !important; color: var(--ink) !important; margin: 0 0 2px !important; }
.priority-row .dx-replace { background: var(--y-soft) !important; box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--y) 45%, transparent); }
.dx-replace .dx-hint { color: var(--ink-2) !important; font-size: 13px !important; margin: 0 0 var(--s3) !important; }
.link-fix { margin: 0 !important; }
.link-fix .gen-image-prompt { gap: var(--s2) !important; }
.link-fix .gen-image-input, .fixlist-assign-input {
  flex: 1; height: 40px; padding: 0 14px !important; border: 1px solid var(--line-2) !important; border-radius: 10px !important; background: var(--surface) !important; font: inherit; font-size: 14px; color: var(--ink);
}
.link-fix .gen-image-input:focus, .fixlist-assign-input:focus { outline: none; border-color: var(--ink) !important; box-shadow: 0 0 0 3px color-mix(in srgb, var(--y) 40%, transparent); }
.link-fix .btn-ghost { height: 40px; padding: 0 18px !important; background: var(--ink) !important; color: #fff !important; border-color: var(--ink) !important; }
.link-fix-saved { margin: 0 !important; font-size: 14px; }
.link-fix-actions { margin-top: var(--s2) !important; }
.link-fix-actions .btn-ghost { background: var(--surface) !important; color: var(--ink) !important; border-color: var(--line-2) !important; height: 34px; }
.priority-page-btn { align-self: flex-start; }
.fixlist-assign { display: flex !important; align-items: center !important; gap: var(--s3) !important; padding-top: var(--s3); border-top: 1px solid var(--line); }
.fixlist-assign .dx-label { margin: 0 !important; font-size: 12px; letter-spacing: .04em; text-transform: uppercase; color: var(--ink-3); white-space: nowrap; }
.fixlist-assign-input { flex: 0 1 280px; height: 36px; }
.link-card-cols { gap: var(--s5) !important; }

/* -------- history: one table inside one tray */
.history-heatmap:not(.hidden) {
  margin: var(--ring) var(--ring) calc(var(--ring) + var(--s6)) !important; padding: var(--s5) var(--s6) !important; border: 1px solid var(--line) !important; border-radius: var(--r-card) !important;
  background: var(--surface) !important; box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important;
}
.hm-legend .sw-shape.review { background: var(--y) !important; }
.hm-legend .sw-shape.alert { background: var(--red) !important; }
.hm-cell { height: 22px !important; min-height: 0 !important; }
#historyList {
  margin: var(--ring) !important; padding: var(--s2) var(--s6) var(--s4) !important; border: 1px solid var(--line) !important; border-radius: var(--r-card) !important;
  background: var(--surface) !important; box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important;
  display: flex !important; flex-direction: column; gap: 0 !important;
}
#historyList > .history-item { margin: 0 !important; border: 0 !important; border-bottom: 1px solid var(--line) !important; border-radius: 0 !important; box-shadow: none !important; background: transparent !important; padding: 0 !important; }
#historyList > .history-item:last-of-type { border-bottom: 0 !important; }
#historyList .history-row {
  display: grid !important; grid-template-columns: 20px 150px 150px minmax(320px, 1.3fr) minmax(0, 1fr); align-items: center; column-gap: var(--s4) !important;
  min-height: 56px; padding: var(--s2) 0 !important; margin: 0 !important; background: transparent !important; border: 0 !important; cursor: pointer;
}
#historyList .history-row:hover { background: transparent !important; }
#historyList .history-item:hover { background: var(--tray) !important; }
#historyList .history-row > * { margin: 0 !important; min-width: 0; }
#historyList .hr-head { min-height: 40px; cursor: default; border-bottom: 1px solid var(--line) !important; font-size: 12px; color: var(--ink-3); }
#historyList .hr-status { display: flex; gap: 6px; flex-wrap: wrap; }
#historyList .history-date { color: var(--ink); font-size: 14px; white-space: nowrap; }
#historyList .history-summary { color: var(--ink-3); font-size: 14px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#historyList .history-chevron { width: 16px; height: 16px; color: var(--ink-4); transition: transform 160ms var(--ease); }
#historyList .history-item.open .history-chevron { transform: rotate(180deg); }
#historyList .history-detail { padding: 0 0 var(--s4) calc(20px + var(--s4)) !important; margin: 0 !important; }
#historyList > .btn-ghost, #historyList > button { margin: var(--s4) 0 0 !important; }
.history-openbars { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s4) !important; width: 100%; }
.hob-item { display: flex !important; flex-direction: column; gap: 5px; min-width: 0; }
.hob-count { font-size: 12px !important; color: var(--ink-3) !important; white-space: nowrap; }
.hob-count b { font-weight: 500; color: var(--ink); font-size: 13px; }
.hob-track { width: 100% !important; height: 6px !important; border-radius: 99px !important; background: var(--tray) !important; overflow: hidden; }
.hob-fill { display: block; height: 100%; border-radius: 99px; }
.hob-fill.critical { background: var(--red) !important; } .hob-fill.warning { background: var(--y) !important; }

/* -------- weekly opened vs resolved */
.wk { display: flex; flex-direction: column; }
.wk-row { display: grid; grid-template-columns: 76px minmax(0, 1fr) minmax(0, 1fr) 56px; align-items: center; column-gap: var(--s4); min-height: 40px; border-bottom: 1px solid var(--line); }
.wk-row:last-child { border-bottom: 0; }
.wk-headrow { min-height: 30px; font-size: 12px; color: var(--ink-3); }
.wk-week { font-size: 13px; color: var(--ink-2); white-space: nowrap; }
.wk-cell { display: grid; grid-template-columns: minmax(0, 1fr) 36px; align-items: center; gap: var(--s2); }
.wk-cell b { font-size: 13px; font-weight: 500; color: var(--ink); text-align: right; }
.wk-track { height: 10px; border-radius: 99px; background: var(--tray); overflow: hidden; }
.wk-fill { display: block; height: 100%; width: var(--w); border-radius: 99px; }
.wk-fill.up { background: var(--red); } .wk-fill.down { background: var(--lime); }
@media (prefers-reduced-motion: no-preference) { .wk-fill { animation: wkgrow 600ms var(--ease) both; animation-delay: var(--d); } }
@keyframes wkgrow { from { width: 0; } }
.wk-net { text-align: right; font-size: 13px; font-weight: 500; color: var(--ink-3); }
.wk-net.bad { color: var(--red-ink, var(--red)); } .wk-net.good { color: var(--green-ink, #3d7a12); }
.wk-headrow .wk-net { font-weight: 400; }
.burndown-chart { flex: 1; display: flex; flex-direction: column; }

/* -------- lowest design scores */
.ds-list { display: flex; flex-direction: column; }
.ds-row { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) 36px; align-items: center; column-gap: var(--s4); min-height: 52px; padding: 0; border: 0; border-bottom: 1px solid var(--line); background: none; font: inherit; text-align: left; cursor: pointer; color: inherit; }
.ds-row:last-child { border-bottom: 0; }
.ds-row:not(.ds-headrow):hover { background: var(--tray); }
.ds-headrow { min-height: 32px; cursor: default; font-size: 12px; color: var(--ink-3); }
.ds-name { display: flex; flex-direction: column; min-width: 0; }
.ds-name b { font-weight: 500; font-size: 14px; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ds-name small { font-size: 12px; color: var(--ink-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ds-track { height: 10px; border-radius: 99px; background: var(--tray); overflow: hidden; }
.ds-fill { display: block; height: 100%; width: var(--w); border-radius: 99px; }
.ds-fill.bad { background: var(--red); } .ds-fill.mid { background: var(--y); } .ds-fill.ok { background: var(--lime); }
@media (prefers-reduced-motion: no-preference) { .ds-fill { animation: wkgrow 600ms var(--ease) both; animation-delay: var(--d); } }
.ds-n { text-align: right; font-size: 14px; font-weight: 500; color: var(--ink); }

/* -------- sections grid: never an orphan row */
.group-grid.collapsed > .gt-more { display: none !important; }
.gt-toggle { align-self: stretch; width: 100%; height: 40px; margin-top: var(--s3) !important; }

/* -------- map: rows of page squares */
.map-treemap.mp { position: static !important; height: auto !important; min-height: 0 !important; display: flex; flex-direction: column; padding: var(--s5) var(--s6) !important; overflow: visible !important; }
.map-canvas-wrap:has(.mp:not(.hidden)) { height: auto !important; min-height: 0 !important; overflow: visible !important; }
.mp-legend { display: flex; flex-wrap: wrap; gap: var(--s4); padding-bottom: var(--s4); border-bottom: 1px solid var(--line); font-size: 13px; color: var(--ink-3); }
.mp-legend span { display: inline-flex; align-items: center; gap: 6px; }
.mp-legend .mp-sq { width: 12px; height: 12px; }
.mp-row { display: grid; grid-template-columns: 220px minmax(0, 1fr); column-gap: var(--s6); align-items: start; padding: var(--s4) 0; border-bottom: 1px solid var(--line); }
.mp-row:last-child { border-bottom: 0; padding-bottom: 0; }
.mp-name { display: flex; flex-direction: column; gap: 2px; padding: 0; border: 0; background: none; font: inherit; text-align: left; color: inherit; cursor: pointer; }
.mp-name:disabled { cursor: default; }
.mp-name b { font-size: 14px; font-weight: 500; color: var(--ink); }
.mp-name:not(:disabled):hover b { text-decoration: underline; text-underline-offset: 3px; }
.mp-name small { font-size: 12px; color: var(--ink-3); }
.mp-grid { display: flex; flex-wrap: wrap; gap: 5px; }
.mp-sq { display: inline-block; width: 18px; height: 18px; padding: 0; border: 0; border-radius: 5px; background: var(--lime); cursor: pointer; transition: transform 120ms var(--ease); }
button.mp-sq:hover, button.mp-sq:focus-visible { transform: scale(1.25); outline: none; box-shadow: 0 0 0 2px var(--surface), 0 0 0 3.5px var(--ink); }
.mp-sq.alert { background: var(--red); } .mp-sq.review { background: var(--y); } .mp-sq.orphan { background: var(--ink-4); }

/* -------- pages: equal card heights per row */
.page-grid { grid-auto-rows: 1fr; gap: calc(var(--gap) + 2px) !important; }
.page-grid > .page-card { margin: var(--ring) !important; height: auto; }

@media (max-width: 900px) {
  #linksStrip.strip-chart { grid-template-columns: 1fr; grid-template-areas: "head" "big" "cols"; }
  #historyList .history-row { grid-template-columns: 20px 1fr 1fr; row-gap: 6px; }
  #historyList .history-openbars, #historyList .history-summary { grid-column: 2 / -1; }
  .mp-row { grid-template-columns: 1fr; row-gap: var(--s3); }
}
.map-body:has(#mapTreemap.mp:not(.hidden)) { height: auto !important; min-height: 0 !important; }
.map-body:has(#mapTreemap.mp:not(.hidden)) .map-canvas-wrap { height: auto !important; border: 0 !important; background: transparent !important; box-shadow: none !important; }
#mapTreemap.mp:not(.hidden) {
  margin: var(--ring) !important; border: 1px solid var(--line) !important; border-radius: var(--r-card) !important; background: var(--surface) !important;
  box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important;
}
.hob-item { align-items: stretch !important; text-align: left !important; }
.hob-count { text-align: left !important; }
.view { padding-top: 0 !important; }
#fixListBody .priority-row { display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: var(--s3); row-gap: var(--s3); }
#fixListBody .priority-row > * { grid-column: 1 / -1; }
#fixListBody .priority-row > .dx-cause { grid-column: 1; }
#fixListBody .priority-row > .dx-fix { grid-column: 2; }
#fixListBody .priority-row:not(:has(> .dx-fix)) > .dx-cause, #fixListBody .priority-row:not(:has(> .dx-cause)) > .dx-fix { grid-column: 1 / -1; }
#fixListBody .priority-row > .priority-page-btn, #fixListBody .priority-row > .priority-pages { grid-column: 1; align-self: center; justify-self: start; }
#fixListBody .priority-row > .fixlist-assign { grid-column: 2; justify-self: end; border-top: 0; padding-top: 0; }
#fixListBody .priority-row > .dx-replace { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); column-gap: var(--s4); align-items: center; }
#fixListBody .dx-replace .dx-label { grid-column: 1; }
#fixListBody .dx-replace .dx-hint { grid-column: 1; margin: 0 !important; }
#fixListBody .dx-replace .link-fix { grid-column: 2; grid-row: 1 / span 2; }
.by-trend.flat, .ttf-trend.flat { visibility: hidden; }
@media (max-width: 900px) {
  #fixListBody .priority-row > * { grid-column: 1 / -1 !important; justify-self: stretch !important; }
  #fixListBody .priority-row > .dx-replace { grid-template-columns: 1fr; }
  #fixListBody .dx-replace .link-fix { grid-column: 1; grid-row: auto; }
}

.fixlist-assign-status:empty { display: none; }
.link-card-text { flex: 1 1 320px; max-width: none !important; display: flex; flex-direction: column; gap: var(--s3); }
.link-card-text > * { margin: 0 !important; }
.link-card-cols { display: flex !important; flex-wrap: nowrap !important; align-items: stretch !important; margin: 0 !important; }
.link-card-shots { flex: 0 0 42%; }

/* progress lists: hairline rows, no boxes in boxes */
#progressOldest, #progressRegressions { display: flex !important; flex-direction: column; gap: 0 !important; }
#progressOldest > .history-item, #progressRegressions > .history-item { margin: 0 !important; padding: 0 !important; border: 0 !important; border-bottom: 1px solid var(--line) !important; border-radius: 0 !important; box-shadow: none !important; background: transparent !important; }
#progressOldest > .history-item:last-child, #progressRegressions > .history-item:nth-last-child(2) { border-bottom: 0 !important; }
#progressOldest .history-row, #progressRegressions .history-row { display: grid !important; grid-template-columns: 84px minmax(0, 1fr) minmax(0, 1.2fr); column-gap: var(--s4) !important; align-items: center; min-height: 44px; padding: 0 !important; margin: 0 !important; background: transparent !important; border: 0 !important; }
#progressOldest .history-row > *, #progressRegressions .history-row > * { margin: 0 !important; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
#progressOldest .pill, #progressRegressions .pill { justify-self: start; }
#progressOldest .history-date, #progressRegressions .history-date { font-size: 14px; color: var(--ink); }
#progressOldest .history-summary, #progressRegressions .history-summary { font-size: 13px; color: var(--ink-3); }
#progressOldest, #progressRegressions { padding: 0 !important; border: 0 !important; background: transparent !important; box-shadow: none !important; border-radius: 0 !important; }
#progressOldest .history-row, #progressRegressions .history-row { grid-template-columns: 104px minmax(0, 1fr) minmax(0, 1.2fr) !important; }
#progressRegressions > .gt-toggle { margin-top: var(--s3) !important; }
@media (max-width: 640px) {
  .topbar, header.topbar { flex-wrap: wrap !important; row-gap: var(--s3) !important; }
  .topbar .actions, .actions { flex-wrap: wrap !important; min-width: 0; max-width: 100%; justify-content: flex-start !important; }
}

/* ===================== v7 ===================== */
:root { --gap: 8px; --on-y: #1a1300; }
.tip.off { opacity: 0 !important; visibility: hidden; transition: opacity 100ms ease, visibility 0s linear 100ms; }
@media (hover: hover) { .kpi-clickable:hover .kpi-go { color: var(--on-y) !important; } }
.kpi-go { color: var(--ink); }
.page-grid { grid-auto-rows: auto !important; gap: 12px !important; align-items: stretch; }
.page-grid > .page-card { margin: 0 !important; }

/* visual diff */
.vd-layer { position: absolute; top: 0; left: 0; width: 100%; pointer-events: none; z-index: 2; }
.vd-box { position: absolute; border: 2px solid var(--red); border-radius: 4px; background: color-mix(in srgb, var(--red) 12%, transparent); box-shadow: 0 0 0 1px rgba(255,255,255,.7); }
.vd-box.tail { border-style: dashed; background: repeating-linear-gradient(45deg, color-mix(in srgb, var(--red) 14%, transparent) 0 6px, transparent 6px 12px); }
.vd-box i { position: absolute; top: -9px; left: -9px; width: 18px; height: 18px; border-radius: 50%; display: grid; place-items: center; background: var(--red); color: #fff; font: 600 12px/1 "Geist", sans-serif; font-style: normal; }
@media (prefers-reduced-motion: no-preference) { .vd-box { animation: vdin 420ms var(--ease) both; } }
@keyframes vdin { from { opacity: 0; transform: scale(1.06); } }
.shot { position: relative; }
.vd-badge { display: inline-flex; align-items: center; gap: 6px; align-self: flex-start; height: 24px; padding: 0 10px; border: 0; border-radius: 99px; background: var(--red-soft); color: var(--red-ink); font: 500 12px "Geist", sans-serif; cursor: default; }
button.vd-badge { cursor: pointer; margin-left: 8px; }
.vd-badge::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--red); }
.vd-badge.none { background: var(--green-soft, #e7f6d5); color: var(--green-ink, #2f5e0e); }
.vd-badge.none::before { background: var(--lime); }
.vd-badge.pending { background: var(--tray); color: var(--ink-3); }
.vd-badge.pending::before { background: var(--ink-4); animation: breathe 1.2s ease-in-out infinite; }
.pd-screenshot-wrap.vd-compare { display: grid !important; grid-template-columns: 1fr 1fr; gap: var(--s3); line-height: normal; overflow: visible !important; max-height: none !important; }
.vd-col { margin: 0; display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.vd-col figcaption { font-size: 12px; color: var(--ink-3); }
.vd-frame { position: relative; max-height: min(560px, 64vh); overflow-y: auto; border: 1px solid var(--line); border-radius: 10px; scrollbar-width: thin; }
.vd-frame img { display: block; width: 100%; height: auto; }
.vd-frame .vd-layer { position: absolute; }

/* contrast pass (WCAG AA): secondary text tokens darkened in light, lifted in dark */
.tag.accepted, .badge.accepted, .log-act.accepted, .dx-label { color: var(--ink-3) !important; }
.tag.suggestion { color: var(--ink-3) !important; }
.tag.review { color: var(--orange-ink, #8a4300) !important; }
.issue.accepted, .mark-row.gone { opacity: 1 !important; }
.mark-row.gone { background: var(--tray) !important; }
.link-fix .btn-ghost { color: var(--surface) !important; }
.gauge-chip span { color: #52525b !important; } .gauge-chip b { color: #18181b !important; }
.preview-grid { grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)) !important; gap: calc(var(--gap) + 4px) !important; }
.preview-grid > .slide { margin: 0 !important; max-width: none !important; }
.pd-screenshot-wrap.vd-compare { background: transparent !important; padding: 0 !important; border: 0 !important; }
.pd-beforeafter-toggle.active { background: var(--ink) !important; color: var(--surface) !important; border-color: var(--ink) !important; }

/* ===================== v8/v9: reveal on scroll, once =====================
   Before a chart is revealed it shows its FINAL state (no animation), so a
   print, a screenshot or a missed trigger never shows fake zeros. When it
   comes on screen the animations start from their first frame. */
[data-rv]:not(.rv-in), [data-rv]:not(.rv-in) * { animation: none !important; }
[data-rv] .rv-zero, [data-rv] .rv-zero * { width: 0 !important; transition: none !important; }
[data-rv].rv-in :is(.hob-fill, .ds-fill, .wk-fill) { transition: width 700ms var(--ease); }
[data-rv].rv-done, [data-rv].rv-done *:not([class*="spin"]):not(.vd-badge):not(.wt-wait):not(.fab-hop) { animation: none !important; }
[data-rv].rv-done :is(.ttf-fill, .bar-fill, .bullet-fill, .fs-bar i, .pd-score-bar-fill, .wk-fill, .ds-fill, .hob-fill) { transition: none !important; }
@media print { [data-rv] *, [data-rv] { animation: none !important; transition: none !important; } }

/* ============================== v9 ============================== */
/* Welcome card (Overview): Beeby's tour offer + First steps */
.ow { display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr) 36px; align-items: center; gap: var(--s6) !important; margin: var(--ring) var(--ring) calc(var(--ring) + var(--s5)) !important; position: relative; }
.ow.bye { opacity: 0; transform: translateY(-6px); transition: opacity 240ms ease, transform 240ms var(--ease); }
.ow-intro { display: flex; align-items: center; gap: var(--s4); min-width: 0; }
.ow-av { width: 56px !important; height: 56px !important; flex: none; }
.ow-text h2 { margin: 0; font-size: 16px; font-weight: 500; color: var(--ink); }
.ow-text p { margin: 4px 0 var(--s3); font-size: 14px; color: var(--ink-3); line-height: 1.45; }
.ow-acts { display: flex; gap: var(--s2); }
.ow-acts .btn-primary { height: 36px; padding: 0 16px !important; font-size: 14px; }
.ow-close { align-self: start; justify-self: end; }
.ow .fs { padding: 0 !important; border: 0 !important; box-shadow: none !important; background: transparent !important; }
.ow .fs-head { cursor: default; pointer-events: none; }
.ow .fs-head .beeby-avatar, .ow .fs-chev { display: none !important; }
.ow .fs-list { display: grid !important; grid-template-columns: 1fr 1fr; column-gap: var(--s4); }
.ow .fs.collapsed .fs-list { display: grid !important; }
.ow .fs-hide { display: none !important; }
.ow .fs-list li { font-size: 13px; }
.ow .fs-list li.done { color: var(--ink-3); }
.sidebar .fs { display: none !important; }
#helpBtn.btn-icon-only { width: 36px; padding: 0 !important; justify-content: center; }
#helpBtn.btn-icon-only #lblHelp { display: none; }

/* Fix next: status column + age; table semantics live in JS roles */
.fn-thead span:nth-child(3), .fn-reach { text-align: left !important; }
.fn-reach { font-size: 13px; color: var(--ink-3); white-space: nowrap; }
.fn-path-inline { display: none; }
.fn-status .kpi-tag { white-space: nowrap; }
.fn-thead, .fn-row { grid-template-columns: minmax(0, 2.3fr) minmax(0, 1.3fr) 72px 124px !important; }

/* Ask Beeby: out of the way of Beeby's own card */
.beeby-fab { transition: transform 220ms var(--ease), opacity 180ms ease !important; }
.beeby-fab.fab-away { opacity: 0; transform: translateY(16px) scale(.96); pointer-events: none; }
.main { padding-bottom: 96px !important; }

/* Opened vs resolved: the current week is partial */
.wk-row.live .wk-fill { opacity: .45; background-image: repeating-linear-gradient(45deg, rgba(255,255,255,.35) 0 4px, transparent 4px 8px); }
.wk-live { display: block; font-size: 12px; color: var(--ink-3); }
.wk-row.live .wk-net { font-weight: 400; color: var(--ink-3); }

/* Hero: goal chip clear of the arc */
.gauge { padding-top: 12px; }

/* Mobile bar hidden on desktop */
.m-bar, .m-scrim { display: none; }

@media (max-width: 900px) {
  .shell { display: block !important; }
  .m-bar { display: flex; align-items: center; gap: var(--s3); position: sticky; top: 0; z-index: 30; height: 56px; margin: 0 calc(-1 * var(--s4)); padding: 0 var(--s4); background: var(--page); border-bottom: 1px solid var(--line); }
  .m-brand { display: flex; align-items: center; gap: var(--s2); min-width: 0; }
  .m-brand img { width: 30px; height: 30px; }
  .m-brand-text { display: flex; flex-direction: column; line-height: 1.15; min-width: 0; }
  .m-brand-text b { font-size: 16px; font-weight: 500; color: var(--ink); }
  .m-site { font-size: 12px; color: var(--ink-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .m-menu { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 10px; border: 1px solid var(--line); background: var(--surface); color: var(--ink); }
  .m-menu .icon { width: 20px; height: 20px; }
  .sidebar {
    position: fixed !important; top: 0 !important; left: 0 !important; bottom: 0 !important; height: 100dvh !important;
    width: min(320px, 86vw) !important; z-index: 75 !important; overflow-y: auto !important;
    display: flex !important; flex-direction: column !important; align-items: stretch !important; gap: var(--s3) !important;
    padding: var(--s4) var(--s4) var(--s6) !important; border-right: 1px solid var(--line) !important; border-bottom: 0 !important;
    background: var(--sidebar-bg, var(--page)) !important; transform: translateX(-104%); transition: transform 260ms var(--ease); box-shadow: none;
  }
  body.nav-open .sidebar { transform: none; box-shadow: var(--shadow-pop); }
  .m-scrim { display: block; position: fixed; inset: 0; z-index: 74; background: rgba(9,9,11,.36); opacity: 0; pointer-events: none; transition: opacity 200ms ease; }
  body.nav-open .m-scrim { opacity: 1; pointer-events: auto; }
  .sidebar .nav { display: flex !important; flex-direction: column !important; margin: 0 !important; padding: 0 !important; overflow: visible !important; }
  .sidebar .nav > .nav-item, .sidebar .nav-group-menu .nav-item { justify-content: flex-start !important; background: transparent; padding: 0 var(--s3) !important; font-size: 14px !important; }
  .sidebar .nav > .nav-item > .icon, .sidebar .nav-item .icon { display: inline-block !important; }
  .sidebar .ng-full { display: inline !important; }
  .sidebar .ng-short { display: none !important; }
  .sidebar .nav-group-menu { position: static !important; box-shadow: none !important; }
  .sidebar .site-switch { flex-direction: column !important; align-items: stretch !important; }
  .sidebar .site-tabs { flex-direction: column !important; overflow: visible !important; }
  .sidebar .sidebar-foot { flex-direction: row !important; flex-wrap: wrap; margin-top: var(--s4) !important; }
  .main { padding: 0 var(--s4) 104px !important; }
  .topbar { padding-top: var(--s4) !important; }

  /* Fix next: page path as a second line under the title */
  .fn-thead { display: none !important; }
  .fn-row { grid-template-columns: minmax(0, 1fr) auto !important; row-gap: 4px; padding: var(--s3) !important; }
  .fn-row .fn-path, .fn-row .fn-reach { display: none !important; }
  .fn-path-inline { display: block; font-size: 12px; color: var(--ink-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fn-row .fn-detail { display: none; }

  /* Ask Beeby: a round avatar button */
  .beeby-fab { width: 56px; height: 56px !important; padding: 0 !important; justify-content: center; right: var(--s4) !important; bottom: var(--s4) !important; }
  .beeby-fab #beebyFabLabel, .beeby-fab > .icon { display: none !important; }
  .beeby-fab .beeby-avatar { display: block !important; width: 44px !important; height: 44px !important; }
  .beeby-fab .beeby-dot { left: 40px; top: 6px; }

  /* Welcome card stacks */
  .ow { grid-template-columns: minmax(0, 1fr) 36px; }
  .ow-steps { grid-column: 1 / -1; grid-row: 2; }
  .ow .fs-list { grid-template-columns: 1fr; }

  /* Opened vs resolved keeps real bars on small screens */
  .wk-row { grid-template-columns: 64px minmax(0, 1fr) minmax(0, 1fr) 44px !important; column-gap: var(--s2) !important; }
  .wk-cell { grid-template-columns: minmax(24px, 1fr) 30px !important; }
}
@media (max-width: 560px) {
  .ov-kpis { grid-template-columns: 1fr !important; }
  .kpi-label { white-space: normal !important; overflow: visible !important; }
  .panel-head { flex-wrap: wrap; }
  .panel-head .btn-ghost.sm { white-space: nowrap; }
  .gauge-ends { padding: 0 4px; }
  .ov-hero .gauge { margin-bottom: var(--s3); }
  .wk-headrow span:nth-child(2), .wk-headrow span:nth-child(3) { font-size: 12px; }
}
/* Ask Beeby in the top bar */
.topbar-beeby { position: relative; display: inline-flex !important; align-items: center; gap: 8px; height: 40px; padding: 0 14px 0 4px !important; border: 1px solid var(--line) !important; border-radius: 999px !important; background: var(--surface) !important; color: var(--ink) !important; font: 500 14px "Geist", sans-serif !important; cursor: pointer; transition: background 150ms ease, transform 140ms var(--ease); }
.topbar-beeby:hover { background: var(--hover) !important; }
.topbar-beeby:active { transform: scale(.97); }
.topbar-beeby > .icon { display: none !important; }
.topbar-beeby .beeby-avatar { width: 32px !important; height: 32px !important; }
.topbar-beeby .beeby-dot { position: absolute; left: 28px; top: 3px; width: 9px; height: 9px; border-radius: 50%; background: var(--red); box-shadow: 0 0 0 2px var(--surface); }
.main { padding-bottom: 48px !important; }
@media (max-width: 900px) {
  .topbar-beeby { padding: 0 4px !important; width: 40px; justify-content: center; }
  .topbar-beeby #beebyFabLabel { display: none; }
  .main { padding-bottom: 48px !important; }
}
@media (max-width: 900px) { .m-bar .topbar-beeby { margin-left: auto; } }
@media (max-width: 560px) { .ov-hero .gauge-chip { display: none !important; } }
:where(button, input, select, textarea) { font-size: 14px; font-family: inherit; }

/* ===================== v10: onboarding ===================== */
.ob { position: fixed; inset: 0; z-index: var(--z-tour); pointer-events: none; }
.ob.hidden { display: none; }
.ob-block { position: fixed; pointer-events: auto; background: transparent; }
.ob-block.full { background: rgba(12, 12, 14, .55); }
@media (prefers-reduced-motion: no-preference) { .ob-block.full { animation: obfade 240ms ease both; } }
@keyframes obfade { from { opacity: 0; } }
.ob-spot { position: fixed; border-radius: 18px; box-shadow: 0 0 0 200vmax rgba(12, 12, 14, .55), 0 0 0 3px var(--y); pointer-events: auto; transition: left 360ms var(--ease-io), top 360ms var(--ease-io), width 360ms var(--ease-io), height 360ms var(--ease-io), opacity 200ms ease; }
.ob.passthrough .ob-spot { pointer-events: none; }
.ob-spot.pulse::after { content: ""; position: absolute; inset: -3px; border-radius: inherit; box-shadow: 0 0 0 3px var(--y); animation: obpulse 1.6s ease-out infinite; }
@keyframes obpulse { 0% { opacity: .9; transform: scale(1); } 100% { opacity: 0; transform: scale(1.04); } }

.ob-card {
  position: fixed; width: 380px; max-width: calc(100vw - 32px); box-sizing: border-box; pointer-events: auto;
  padding: 20px; border-radius: 20px; background: var(--surface); color: var(--ink); border: 1px solid var(--line);
  box-shadow: 0 24px 64px rgba(0,0,0,.28), 0 2px 6px rgba(0,0,0,.08);
  opacity: 0; transform: translateY(8px) scale(.98);
  transition: left 360ms var(--ease-io), top 360ms var(--ease-io), opacity 200ms ease, transform 280ms var(--ease);
}
.ob-card.in { opacity: 1; transform: none; }
.ob-card.centered { left: 50% !important; top: 50% !important; transform: translate(-50%, calc(-50% + 8px)) scale(.98); width: 440px; }
.ob-card.centered.in { transform: translate(-50%, -50%); }
.ob-card.sheet { left: 12px !important; right: 12px; top: auto !important; bottom: 12px; width: auto; max-width: none; }
.ob-card.sheet.top { bottom: auto; top: 12px !important; }
.ob-card.nudge { animation: obnudge 380ms var(--ease); }
@keyframes obnudge { 20% { translate: -6px 0; } 40% { translate: 6px 0; } 60% { translate: -4px 0; } 80% { translate: 3px 0; } }
.ob-card.cheer .ob-av { animation: obhop 420ms var(--ease); }
@keyframes obhop { 40% { transform: translateY(-6px) rotate(-6deg); } }

.ob-head { display: flex; align-items: center; gap: 12px; }
.ob-av { width: 44px !important; height: 44px !important; flex: none; box-shadow: 0 0 0 2px var(--surface), 0 0 0 4px var(--y) !important; }
.ob-ht { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.ob-kicker { font-size: 12px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-3); }
.ob-title { margin: 2px 0 0; font-size: 20px; font-weight: 500; letter-spacing: -0.01em; color: var(--ink); }
.ob-x { width: 32px; height: 32px; display: grid; place-items: center; border: 0; border-radius: 10px; background: transparent; color: var(--ink-3); cursor: pointer; }
.ob-x:hover { background: var(--hover); color: var(--ink); }
.ob-body { margin: 12px 0 0; font-size: 16px; line-height: 1.5; color: var(--ink-2); min-height: 3em; }
.ob-extra:empty { display: none; }
.ob-extra { margin-top: 16px; }

.ob-choices { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.ob-choice { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; padding: 14px; border: 1.5px solid var(--line-2); border-bottom-width: 3px; border-radius: 14px; background: var(--surface); color: var(--ink); text-align: left; cursor: pointer; font: inherit; transition: transform 120ms var(--ease), border-color 150ms ease, background 150ms ease; }
.ob-choice b { font-size: 16px; font-weight: 500; }
.ob-choice span { font-size: 13px; color: var(--ink-3); }
.ob-choice:hover { border-color: var(--y); background: var(--y-soft); }
.ob-choice:active, .ob-choice.picked { transform: translateY(2px); border-bottom-width: 1.5px; margin-bottom: 1.5px; }
.ob-choice.picked { border-color: var(--y); background: var(--y-soft); }

.ob-quiz { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.ob-opt { height: 48px; border: 1.5px solid var(--line-2); border-bottom-width: 3px; border-radius: 12px; background: var(--surface); color: var(--ink); font: 500 14px "Geist", sans-serif; cursor: pointer; transition: transform 120ms var(--ease), background 150ms ease, border-color 150ms ease; }
.ob-opt:hover { border-color: var(--ink-4); }
.ob-opt:active { transform: translateY(2px); border-bottom-width: 1.5px; }
.ob-quiz.answered .ob-opt { cursor: default; }
.ob-quiz.answered .ob-opt:not(.right):not(.wrong) { opacity: .5; }
.ob-opt.right { border-color: #6aa51f; background: var(--green-soft, #e9f7d6); color: var(--green-ink, #2f5e0e); }
.ob-opt.wrong { border-color: var(--red); background: var(--red-soft); color: var(--red-ink); animation: obnudge 380ms var(--ease); }
.ob-feedback { margin: 12px 0 0; font-size: 14px; line-height: 1.45; }
.ob-feedback:empty { display: none; }
.ob-feedback.ok { color: var(--green-ink, #2f5e0e); }
.ob-feedback.no { color: var(--ink-2); }
.ob-spark { position: fixed; width: 7px; height: 7px; border-radius: 50%; background: var(--y); pointer-events: none; animation: obspark 640ms var(--ease) forwards; }
.ob-spark:nth-child(even) { background: var(--lime); }
@keyframes obspark { to { transform: translate(var(--dx), var(--dy)); opacity: 0; } }

.ob-next { display: flex; flex-direction: column; gap: 8px; }
.ob-try { display: flex; align-items: center; gap: 12px; padding: 12px; border: 1px solid var(--line); border-radius: 14px; background: var(--tray); color: var(--ink); text-align: left; cursor: pointer; font: inherit; transition: background 150ms ease; }
.ob-try:hover { background: var(--hover); }
.ob-try-ic { width: 36px; height: 36px; flex: none; display: grid; place-items: center; border-radius: 10px; background: var(--y); color: #1a1300; }
.ob-try b { display: block; font-size: 14px; font-weight: 500; }
.ob-try small { font-size: 13px; color: var(--ink-3); }

.ob-foot { display: flex; align-items: center; gap: 12px; margin-top: 18px; }
.ob-dots { display: flex; gap: 5px; flex: 1; }
.ob-dots i { width: 7px; height: 7px; border-radius: 99px; background: var(--line-2); transition: width 260ms var(--ease), background 200ms ease; }
.ob-dots i.done { background: var(--ink); }
.ob-dots i.now { width: 22px; background: var(--y); }
.ob-btns { display: flex; align-items: center; gap: 8px; }
.ob-btn { height: 40px; padding: 0 18px; border: 0; border-radius: 12px; background: var(--y); color: #1a1300; font: 500 14px "Geist", sans-serif; cursor: pointer; box-shadow: 0 3px 0 var(--y-deep, #c9940a); transition: transform 100ms var(--ease), box-shadow 100ms; }
.ob-btn:active { transform: translateY(3px); box-shadow: 0 0 0 var(--y-deep, #c9940a); }
.ob-btn:focus-visible, .ob-ghost:focus-visible, .ob-opt:focus-visible, .ob-choice:focus-visible, .ob-try:focus-visible { outline: 2px solid var(--ink); outline-offset: 2px; }
.ob-ghost { height: 40px; padding: 0 12px; border: 0; border-radius: 12px; background: transparent; color: var(--ink-3); font: 500 14px "Geist", sans-serif; cursor: pointer; }
.ob-ghost:hover { background: var(--hover); color: var(--ink); }
.ob-wait { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; color: var(--ink-3); }
.ob-wait::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--y); animation: breathe 1.4s ease-in-out infinite; }

/* the old walkthrough is retired */
.wt { display: none !important; }

@media (max-width: 699px) {
  .ob-card.centered { width: calc(100vw - 24px); }
  .ob-body { font-size: 15px; }
  .ob-choices { grid-template-columns: 1fr; }
  .ob-foot { flex-wrap: wrap; }
  .ob-btns { margin-left: auto; }
}
@media (prefers-reduced-motion: reduce) {
  .ob-card, .ob-spot { transition: none !important; }
}
.ob-btn, .ob-ghost, .ob-wait { white-space: nowrap; }
.ob-dots { flex: 1 1 auto; min-width: 60px; }
.ob-spot { transition: opacity 200ms ease !important; }
.ob-card { transition: opacity 200ms ease, transform 280ms var(--ease) !important; }
@media (max-width: 900px) {
  .pd-grid { grid-template-columns: 1fr !important; }
  .pd-kpis { grid-template-columns: 1fr 1fr !important; }
  .pd-head, .pd-top { flex-wrap: wrap; }
}
.fn-thead, .fn-row { grid-template-columns: minmax(0, 2.2fr) minmax(0, 1.3fr) 92px 124px !important; } .fn-thead span { white-space: nowrap; }

/* ============================== v11 ============================== */
/* Focus: a ring only for keyboard users; chart marks get a soft outline */
:focus:not(:focus-visible) { outline: none !important; }
svg [tabindex]:focus { outline: none !important; }
svg [tabindex]:focus-visible { outline: none !important; stroke: var(--ink); stroke-width: 2px; paint-order: stroke; }

/* Sidebar on the tray colour */
.sidebar { background: var(--tray) !important; border-right: 1px solid var(--tray-line) !important; scrollbar-width: none; }
.sidebar::-webkit-scrollbar { width: 0; height: 0; }
.sidebar .brand { border-bottom-color: var(--tray-line) !important; }
.sidebar .nav-item:hover { background: color-mix(in srgb, var(--surface) 60%, transparent) !important; }
.sidebar .nav-item.active { background: var(--surface) !important; box-shadow: 0 1px 2px rgba(24,24,27,.06), 0 0 0 1px var(--tray-line); }
.sidebar .nav-badge:not(.alert) { background: var(--surface) !important; }
.sidebar .nav-item.active .nav-badge:not(.alert) { background: var(--tray) !important; }
.sidebar .site-tab.active { box-shadow: 0 1px 2px rgba(24,24,27,.06), 0 0 0 1px var(--tray-line) !important; }
.sidebar .site-tab:hover:not(.active) { background: color-mix(in srgb, var(--surface) 60%, transparent) !important; }
.sidebar .search-trigger { background: var(--surface) !important; border-color: var(--tray-line) !important; }
.sidebar .search-trigger kbd { background: var(--tray) !important; }
.sidebar .mini-card { background: var(--surface) !important; border-color: var(--tray-line) !important; }

/* Sidebar footer: one tidy row */
.sidebar-foot { display: grid !important; grid-template-columns: 1fr auto auto; align-items: center; gap: var(--s2) !important; padding-top: var(--s4) !important; border-top: 1px solid var(--tray-line); }
.sidebar-foot .mini-card { grid-column: 1 / -1; }
.sidebar-foot #helpBtn, .sidebar-foot #langToggle { width: 36px !important; height: 36px !important; min-width: 0; padding: 0 !important; display: inline-grid !important; place-items: center; border-radius: 10px !important; background: var(--surface) !important; border: 1px solid var(--tray-line) !important; }
.sidebar-foot #helpBtn .icon { margin: 0 !important; }
.sidebar-foot #langToggle .lang-label { font-size: 13px; font-weight: 500; }
.sidebar-foot #logoutBtn:not(.hidden) { grid-column: 1; justify-self: start; }
.sidebar-foot > :first-child:not(.mini-card) { grid-column: 1; }

/* Lists of rows inside cards: hairlines, never boxes inside boxes */
.history-list:not(#historyList):not(.hidden) { display: flex !important; flex-direction: column; gap: 0 !important; padding: 0 !important; border: 0 !important; background: transparent !important; box-shadow: none !important; }
.history-list:not(#historyList) > .history-item { margin: 0 !important; padding: 0 !important; border: 0 !important; border-bottom: 1px solid var(--line) !important; border-radius: 0 !important; box-shadow: none !important; background: transparent !important; }
.history-list:not(#historyList) > .history-item:last-child { border-bottom: 0 !important; }
.history-list:not(#historyList) .history-row { display: flex !important; align-items: center; gap: var(--s4) !important; min-height: 48px; padding: 0 !important; margin: 0 !important; border: 0 !important; background: transparent !important; }
.history-list:not(#historyList) .history-row > * { margin: 0 !important; }
.history-list:not(#historyList) .history-summary { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--ink-2); font-size: 14px; }
.history-list:not(#historyList) .history-date { white-space: nowrap; font-size: 14px; color: var(--ink); }
.history-list:not(#historyList) .history-chevron { flex: none; color: var(--ink-4); }
.report-section .history-list { margin-top: var(--s2); }
.report-section h3 { margin: var(--s6) 0 0 !important; font-size: 16px !important; font-weight: 500 !important; }

/* The weekly reports list is a card of its own */
#reportsList:not(.hidden) {
  margin: var(--ring) !important; padding: var(--s2) var(--s6) !important; border: 1px solid var(--line) !important; border-radius: var(--r-card) !important;
  background: var(--surface) !important; box-shadow: 0 1px 2px rgba(24,24,27,.04), 0 0 0 6px var(--tray), 0 0 0 7px var(--tray-line) !important;
}
#reportsList .history-row { min-height: 56px; cursor: pointer; }
#reportsList .history-row .pill { min-width: 48px; justify-content: center; }
#reportsList .history-date { min-width: 120px; }
#reportsList .history-item:hover { background: var(--tray) !important; }
#helpBtn { gap: 0 !important; } #helpBtn > :not(.icon) { display: none !important; }
.history-list .history-item.hidden { display: none !important; }
#reportsDetail .scope-stats { gap: var(--s3) !important; }
#reportsDetail .scope-stat { margin: 0 !important; box-shadow: none !important; border: 0 !important; background: var(--tray) !important; border-radius: 14px !important; }
.sidebar-foot { display: flex !important; flex-direction: row !important; flex-wrap: wrap; align-items: center; }
.sidebar-foot .mini-card { flex: 1 1 100%; }
.sidebar-foot #helpBtn, .sidebar-foot #langToggle { grid-column: auto !important; }
.sidebar-foot #logoutBtn:not(.hidden) { margin-left: auto !important; height: 36px; }
.sidebar-foot #helpBtn, .sidebar-foot #langToggle { display: inline-flex !important; align-items: center !important; justify-content: center !important; }
#reportsDetail .scope-stats { margin-top: var(--s4) !important; }

/* Long unbroken URLs (e.g. a framerusercontent image link) in a Fix list
   row pushed the page past 390px wide. */
.priority-row, .priority-row > * { min-width: 0; }
.priority-row, .priority-detail { overflow-wrap: anywhere; }



/* Ojo v11 → Fuego Brand (Buena Design System).
   Cada variable propia del v11 apunta al token ojo-* de bds.css.
   El valor después de la coma es el del v11 y solo se usa mientras
   bds.css no tenga publicados los tokens ojo-*.
   Cargar DESPUÉS del CSS del v11 y de bds.css. Generado el 2026-11-05. */

:root, [data-theme="light"] {
  --accent: var(--bds-ojo-accent, #f7bd15);
  --accent-hover: var(--bds-ojo-accent-hover, #ffc933);
  --accent-soft: var(--bds-ojo-accent-soft, #fff3c6);
  --accepted: var(--bds-ojo-neutral, #a3a39d);
  --accepted-soft: var(--bds-ojo-neutral-soft, #f0f0ec);
  --add: var(--bds-ojo-good, #4fb84a);
  --alert: var(--bds-ojo-critical, #f0503c);
  --alert-line: var(--bds-ojo-critical-line, #ffc1bd);
  --alert-soft: var(--bds-ojo-critical-soft, #ffe2dc);
  --alert-text: var(--bds-ojo-critical-ink, #b42614);
  --bg-main: var(--bds-ojo-page, #fcfcfb);
  --bg-muted: var(--bds-ojo-muted, #ebebe8);
  --bg-second: var(--bds-ojo-surface, #ffffff);
  --bg-third: var(--bds-ojo-hover, #f4f4f3);
  --blue: var(--bds-ojo-data, #3aa0e8);
  --blue-soft: var(--bds-ojo-data-soft, #e1f0fb);
  --border: var(--bds-ojo-line, #e7e7e4);
  --border-strong: var(--bds-ojo-line-strong, #dcdcd8);
  --critical-solid: var(--bds-ojo-critical, #f0503c);
  --data: var(--bds-ojo-data, #3aa0e8);
  --data-soft: var(--bds-ojo-data-soft, #e1f0fb);
  --del: var(--bds-ojo-critical, #f0503c);
  --delta-bad: var(--bds-ojo-critical-ink, #b42614);
  --delta-good: var(--bds-ojo-good-ink, #2d7a2a);
  --gauge-off: var(--bds-ojo-gauge-off, #ecece8);
  --gauge-off-dot: var(--bds-ojo-gauge-off-dot, #d6d6d1);
  --gauge-on: var(--bds-ojo-accent, #f7bd15);
  --gauge-on-dot: var(--bds-ojo-gauge-on-dot, #ffffff8c);
  --green: var(--bds-ojo-good, #4fb84a);
  --green-ink: var(--bds-ojo-good-ink, #2d7a2a);
  --green-soft: var(--bds-ojo-good-soft, #e3f6d6);
  --hero-a: var(--bds-ojo-hero-a, #fff4cc);
  --hero-b: var(--bds-ojo-hero-b, #f1f8e8);
  --hero-c: var(--bds-ojo-hero-c, #e3f1fb);
  --hover: var(--bds-ojo-hover, #f4f4f3);
  --ink: var(--bds-ojo-ink, #18181b);
  --ink-2: var(--bds-ojo-ink-2, #3f3f46);
  --ink-3: var(--bds-ojo-ink-3, #5c5c66);
  --ink-4: var(--bds-ojo-ink-4, #6b6b74);
  --lime: var(--bds-ojo-lime, #bdf26b);
  --lime-ink: var(--bds-ojo-lime-ink, #2f5300);
  --line: var(--bds-ojo-line, #e7e7e4);
  --line-2: var(--bds-ojo-line-strong, #dcdcd8);
  --link: var(--bds-ojo-link, #1f6fb2);
  --link-icon: var(--bds-ojo-data, #3aa0e8);
  --ok: var(--bds-ojo-good, #4fb84a);
  --ok-soft: var(--bds-ojo-good-soft, #e3f6d6);
  --on-y: var(--bds-ojo-on-accent, #1a1300);
  --orange: var(--bds-ojo-warning, #ff9a3c);
  --orange-ink: var(--bds-ojo-warning-ink, #a95300);
  --orange-soft: var(--bds-ojo-warning-soft, #ffeedc);
  --overlay: var(--bds-ojo-overlay, #18181b66);
  --page: var(--bds-ojo-page, #fcfcfb);
  --pink: var(--bds-ojo-pink, #ec5fa3);
  --red: var(--bds-ojo-critical, #f0503c);
  --red-ink: var(--bds-ojo-critical-ink, #b42614);
  --red-soft: var(--bds-ojo-critical-soft, #ffe2dc);
  --review: var(--bds-ojo-warning-ink, #a95300);
  --review-line: var(--bds-ojo-warning-line, #ffd59c);
  --review-soft: var(--bds-ojo-warning-soft, #ffeedc);
  --review-vivid: var(--bds-ojo-warning, #ff9a3c);
  --sidebar-bg: var(--bds-ojo-surface, #ffffff);
  --status-critical: var(--bds-ojo-critical, #f0503c);
  --status-critical-text: var(--bds-ojo-critical-ink, #b42614);
  --status-empty: var(--bds-ojo-empty, #ececea);
  --status-good: var(--bds-ojo-good, #4fb84a);
  --status-good-text: var(--bds-ojo-good-ink, #2d7a2a);
  --status-neutral: var(--bds-ojo-neutral, #a3a39d);
  --status-neutral-text: var(--bds-ojo-neutral-ink, #7f7f79);
  --status-warning: var(--bds-ojo-warning, #ff9a3c);
  --status-warning-text: var(--bds-ojo-warning-ink, #a95300);
  --suggestion: var(--bds-ojo-neutral, #a3a39d);
  --suggestion-soft: var(--bds-ojo-neutral-faint, #9aa0ab24);
  --surface: var(--bds-ojo-surface, #ffffff);
  --text-faint: var(--bds-ojo-ink-4, #6b6b74);
  --text-main: var(--bds-ojo-ink-2, #3f3f46);
  --text-on-accent: var(--bds-ojo-on-accent, #1a1300);
  --text-on-solid: var(--bds-ojo-on-solid, #ffffff);
  --text-second: var(--bds-ojo-ink-3, #5c5c66);
  --text-strong: var(--bds-ojo-ink, #18181b);
  --tray: var(--bds-ojo-tray, #f4f4f2);
  --tray-line: var(--bds-ojo-tray-line, #e9e9e6);
  --y: var(--bds-ojo-accent, #f7bd15);
  --y-deep: var(--bds-ojo-accent-deep, #d99e00);
  --y-ink: var(--bds-ojo-accent-ink, #6b4d00);
  --y-soft: var(--bds-ojo-accent-soft, #fff3c6);
  --yellow: var(--bds-ojo-accent, #f7bd15);
  --yellow-ink: var(--bds-ojo-accent-ink, #6b4d00);
  --yellow-lip: var(--bds-ojo-accent-deep, #d99e00);
  --yellow-soft: var(--bds-ojo-accent-soft, #fff3c6);
  --nav-highlight: var(--bds-ojo-accent-soft, #fff3c6);
}

[data-theme="dark"] {
  --accent: var(--bds-ojo-accent, #f7bd15);
  --accent-hover: var(--bds-ojo-accent-hover, #ffc933);
  --accent-soft: var(--bds-ojo-accent-soft, #f7bd1524);
  --accepted: var(--bds-ojo-neutral, #a3a39d);
  --accepted-soft: var(--bds-ojo-neutral-soft, #a3a39d24);
  --add: var(--bds-ojo-good, #4fb84a);
  --alert: var(--bds-ojo-critical, #f0503c);
  --alert-line: var(--bds-ojo-critical-line, #ff4b4b66);
  --alert-soft: var(--bds-ojo-critical-soft, #f0503c29);
  --alert-text: var(--bds-ojo-critical-ink, #ff8a78);
  --bg-main: var(--bds-ojo-page, #0c0c0e);
  --bg-muted: var(--bds-ojo-muted, #2a2a2e);
  --bg-second: var(--bds-ojo-surface, #18181b);
  --bg-third: var(--bds-ojo-hover, #222225);
  --blue: var(--bds-ojo-data, #3aa0e8);
  --blue-soft: var(--bds-ojo-data-soft, #e1f0fb);
  --border: var(--bds-ojo-line, #27272a);
  --border-strong: var(--bds-ojo-line-strong, #3f3f46);
  --critical-solid: var(--bds-ojo-critical, #f0503c);
  --data: var(--bds-ojo-data, #3aa0e8);
  --data-soft: var(--bds-ojo-data-soft, #e1f0fb);
  --del: var(--bds-ojo-critical, #f0503c);
  --delta-bad: var(--bds-ojo-critical-ink, #ff8a78);
  --delta-good: var(--bds-ojo-good-ink, #8ddb84);
  --gauge-off: var(--bds-ojo-gauge-off, #26262a);
  --gauge-off-dot: var(--bds-ojo-gauge-off-dot, #3a3a40);
  --gauge-on: var(--bds-ojo-accent, #f7bd15);
  --gauge-on-dot: var(--bds-ojo-gauge-on-dot, #ffffff8c);
  --green: var(--bds-ojo-good, #4fb84a);
  --green-ink: var(--bds-ojo-good-ink, #8ddb84);
  --green-soft: var(--bds-ojo-good-soft, #4fb84a29);
  --hero-a: var(--bds-ojo-hero-a, #f7bd1529);
  --hero-b: var(--bds-ojo-hero-b, #4fb84a0f);
  --hero-c: var(--bds-ojo-hero-c, #3aa0e81a);
  --hover: var(--bds-ojo-hover, #222225);
  --ink: var(--bds-ojo-ink, #fafafa);
  --ink-2: var(--bds-ojo-ink-2, #d4d4d8);
  --ink-3: var(--bds-ojo-ink-3, #b4b4bc);
  --ink-4: var(--bds-ojo-ink-4, #9a9aa3);
  --lime: var(--bds-ojo-lime, #bdf26b);
  --lime-ink: var(--bds-ojo-lime-ink, #1d3600);
  --line: var(--bds-ojo-line, #27272a);
  --line-2: var(--bds-ojo-line-strong, #3f3f46);
  --link: var(--bds-ojo-link, #6db7ef);
  --link-icon: var(--bds-ojo-data, #3aa0e8);
  --ok: var(--bds-ojo-good, #4fb84a);
  --ok-soft: var(--bds-ojo-good-soft, #4fb84a29);
  --on-y: var(--bds-ojo-on-accent, #1a1300);
  --orange: var(--bds-ojo-warning, #ff9a3c);
  --orange-ink: var(--bds-ojo-warning-ink, #ffb877);
  --orange-soft: var(--bds-ojo-warning-soft, #ff9a3c29);
  --overlay: var(--bds-ojo-overlay, #00000099);
  --page: var(--bds-ojo-page, #0c0c0e);
  --pink: var(--bds-ojo-pink, #ec5fa3);
  --red: var(--bds-ojo-critical, #f0503c);
  --red-ink: var(--bds-ojo-critical-ink, #ff8a78);
  --red-soft: var(--bds-ojo-critical-soft, #f0503c29);
  --review: var(--bds-ojo-warning-ink, #ffb877);
  --review-line: var(--bds-ojo-warning-line, #ff960066);
  --review-soft: var(--bds-ojo-warning-soft, #ff9a3c29);
  --review-vivid: var(--bds-ojo-warning, #ff9a3c);
  --sidebar-bg: var(--bds-ojo-surface, #18181b);
  --status-critical: var(--bds-ojo-critical, #f0503c);
  --status-critical-text: var(--bds-ojo-critical-ink, #ff8a78);
  --status-empty: var(--bds-ojo-empty, #26262a);
  --status-good: var(--bds-ojo-good, #4fb84a);
  --status-good-text: var(--bds-ojo-good-ink, #8ddb84);
  --status-neutral: var(--bds-ojo-neutral, #a3a39d);
  --status-neutral-text: var(--bds-ojo-neutral-ink, #a2b4bd);
  --status-warning: var(--bds-ojo-warning, #ff9a3c);
  --status-warning-text: var(--bds-ojo-warning-ink, #ffb877);
  --suggestion: var(--bds-ojo-neutral, #a3a39d);
  --suggestion-soft: var(--bds-ojo-neutral-faint, #6b72802e);
  --surface: var(--bds-ojo-surface, #18181b);
  --text-faint: var(--bds-ojo-ink-4, #9a9aa3);
  --text-main: var(--bds-ojo-ink-2, #d4d4d8);
  --text-on-accent: var(--bds-ojo-on-accent, #1a1300);
  --text-on-solid: var(--bds-ojo-on-solid, #ffffff);
  --text-second: var(--bds-ojo-ink-3, #b4b4bc);
  --text-strong: var(--bds-ojo-ink, #fafafa);
  --tray: var(--bds-ojo-tray, #141416);
  --tray-line: var(--bds-ojo-tray-line, #222225);
  --y: var(--bds-ojo-accent, #f7bd15);
  --y-deep: var(--bds-ojo-accent-deep, #d99e00);
  --y-ink: var(--bds-ojo-accent-ink, #ffd25a);
  --y-soft: var(--bds-ojo-accent-soft, #f7bd1524);
  --yellow: var(--bds-ojo-accent, #f7bd15);
  --yellow-ink: var(--bds-ojo-accent-ink, #ffd25a);
  --yellow-lip: var(--bds-ojo-accent-deep, #d99e00);
  --yellow-soft: var(--bds-ojo-accent-soft, #f7bd1524);
  --nav-highlight: var(--bds-ojo-accent-soft, #f7bd151f); /* v11 dark usa 12 %, el token 14 % */
}

/* Tokens agregados en Fuego Brand el 2026-11-05 (sin publicar todavía): */
:root, [data-theme="light"] {
  --accent-glow: var(--bds-ojo-accent-glow, #f7bd154c);
  --band-1: var(--bds-ojo-band-1, #f4f4f0);
  --band-2: var(--bds-ojo-band-2, #ecece6);
  --band-3: var(--bds-ojo-band-3, #e2e2db);
  --blue-lip: var(--bds-ojo-data-lip, #1899d6);
  --critical-solid-hover: var(--bds-ojo-critical-hover, #ff6363);
  --green-lip: var(--bds-ojo-good-lip, #3c9938);
  --orange-lip: var(--bds-ojo-warning-lip, #e07f20);
  --red-lip: var(--bds-ojo-critical-lip, #c93b29);
  --status-good-hover: var(--bds-ojo-good-hover, #61da0a);
}
[data-theme="dark"] {
  --accent-glow: var(--bds-ojo-accent-glow, #f7bd154c);
  --band-1: var(--bds-ojo-band-1, #1e313a);
  --band-2: var(--bds-ojo-band-2, #243a44);
  --band-3: var(--bds-ojo-band-3, #2c444f);
  --blue-lip: var(--bds-ojo-data-lip, #1899d6);
  --critical-solid-hover: var(--bds-ojo-critical-hover, #ff6363);
  --green-lip: var(--bds-ojo-good-lip, #3c9938);
  --orange-lip: var(--bds-ojo-warning-lip, #e07f20);
  --red-lip: var(--bds-ojo-critical-lip, #c93b29);
  --status-good-hover: var(--bds-ojo-good-hover, #61da0a);
}

/* Sombras y radios de Ojo en Fuego Brand (agregados el 2026-11-05, sin publicar todavía). */
:root, [data-theme="light"], [data-theme="dark"] {
  --shadow-card: var(--bds-shadow-ojo-card, 0 1px 2px rgba(24, 24, 27, 0.04));
  --shadow-float: var(--bds-shadow-ojo-float, 0 8px 24px rgba(24, 24, 27, 0.08), 0 1px 3px rgba(24, 24, 27, 0.06));
  --shadow-pop: var(--bds-shadow-ojo-pop, 0 24px 64px rgba(24, 24, 27, 0.16));
  --r-ctl: var(--bds-radius-ojo-control, 10px);
  --r-card: var(--bds-radius-ojo-card, 16px);
  --r-tray: var(--bds-radius-card-xl, 20px);
}
