@font-face {
  font-family: 'Serif Titres';
  font-style: normal;
  font-weight: 700;
  /* Tache 11 : etait `block` ("jamais swap : swap a mesure un CLS de 0,272
     sur le site frere"). Mesure sur ce site (Lighthouse desktop, step 6 du
     brief) : `block` produit ICI un CLS de 0,269 -- quasi identique au 0,272
     que ce choix visait justement a eviter. Cause confirmee par experience
     (voir task-11-report.md) : le shift porte sur <main> en entier (quasi
     tout le CLS mesure), les figures n'y sont pour presque rien -- confirme
     en bloquant ile.js, le CLS ne bouge pas d'un chiffre -- donc la police
     elle-meme -- `block` masque le texte puis le montre avec la police
     embarquee, et ce montage recalcule toute la mise en page une fois. La
     police etant deja embarquee en base64 (aucune requete reseau, aucune
     latence a attendre), `optional` n'a aucune raison de retomber sur le
     repli : elle montre le texte immediatement avec le repli, bascule vers
     la police embarquee des qu'elle est decodee (quasi instantane, pas de
     reseau) et ne re-bascule JAMAIS plus tard -- donc jamais de second
     recalcul de mise en page. Verifie : CLS 0 et performance 100 (contre
     0,269 et 86 avec `block`) avec ce seul changement. */
  font-display: optional;
  src: url(data:font/woff2;base64,d09GMgABAAAAAFUYABAAAAAA0cwAAFS1AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUYadBuBoWQckQAGYD9TVEFUWgCEWhEICoHQLIGnVAuFGAABNgIkA4osBCAFhXIHIBvFuUUjYtAdCCV4/6RicFx3OxAUqfwtGpGEtF5G8f/5QI4xYugNpfryA3U47MRCIV442KgXfS25V7eXEEWXs6euDpD9K6lH3uo7qb0Tdzixq5IaeNL+Xtmogzhq8QDyVyvKnINAuphSSkYw53zJG6SHYTN36xnYNnrnvCR5gvzr+U5V33kzn8baCjJlRroRjOnjcdvfvY0xBipVKlEWYHT/SONXRA7Pz+3/bMDGgMEigzE2xsbgLgM2OkVESsxEn4j1fHYir9VnFK/VF1+MfGXmNyAqm9Z7O9o9kE5kAIoeOciYIwCODUShX5mBP0m+zPPv7s97RBlE2Ja0Fvz5B7Y7b5t9e7gc9d339NVlR7WmQ8VoKQUCAUIDgYaGCQhzW3iJhlpNXUyGZnkw/UctBsHzIIfD+Aeaq3rprkk1zOYIUZ8F1KDJERlNwp5ebf/Rt9lXDZt3d13MKQwWiIGHrEb0abLPpGXCsBBnzx1+ya/oS9iNmK0LSRrQSuA/FXSbk4fXQBJKECLZAvhfmrNBklJ6y9p0BPeAIAySezZmr19IYCcAqnZw81LmkQYWJLZ6e7TNkOsIfW7gsxfFZ3bwP/lTq/2jifYU+cCzWnCWveglbgMHzCV/zejra/7T6MtSwNaPbFkhy7J3DXHADvhLvmQkK+BkwckBkxQvZJ2DwBFD9irE7mrAaqFKeXdFe1wDVVTdlUBde1V3VXvl+f+/37f6791zkPews95owr3PgVAsNEp68pE7Zy424w9vJtr+IkTSLEITsUgne8UjpVISvQHP17Jm+90QZgr1IcsLUdFKn3AYNdu7W3Wf3rmUBi65JuUhJoc8JwgDat2lYCSF8jh51qKBz5Po+yYug7+fW1UVEbfb+x/9xO7WfcxABykiQYKIGyR4gwSRcubxd1979cUAHbaXQZQIkv6+MZcxtbS491yPIkdQEILy1G5/NAXYAOej0dff6I8C7cPGd7QC7aM66kcB7eOru9qAFgMQhAgLgcxS5DEPrx/TMWZ0G0DgTIDdEbyYo4BxRgMTmnQk4bHDZMQFEUJEOBQnDspXADXQAKpSBbXSGuqkM9RHH0iLKMuOonpPpSCwqzBV1SP6CPMj43927R73iI42YPuPSgD9E0a9SSAHSYrXsQY08lRgCO7wxcDfvhrvsPcNA8RxkENs8IDr4G//AWF7OqGkueb02Iz3niYsuHpptnDeAPAW8kgLbQq0gNewNXzzsBNgCW48ctdTWSrvik2CHcbW1QkUiAAbZNUEDVZPv1YBqxwUfLEgXW92ApCVtABtgRgiR2UQCa2eOS75zdTy3wWXmGyklvkSeicaIKdxL50akgD1gCNMJZUX0PoqIA5SAfW+Bwgu/9r6xYukjgtO168weToOpMitapxAc4A83LGTl3hwyje+CQtQosc7fZCe+I93Xi/vcNa7TbgiccuduUI3UHcU6G3BX6+WgXgtSyjYAWoiOgnCIBaCEEoiAkjbAjROM4l4WAFLm5G46/8JEyA1yRx8+3xfgxX4lP2R7fbHmIzFOcueo9S1jt1BIv4QK0PEYrnajtBbDqPXniMznEYgGoW7PUbkROiLYdYHVQAR2CNncYii7KwujLiQDofcqgVzEBAWSiYDA9HQENxZGBXfw8QoIBVRJGcRxmfkLf8K5LyjM5uSa3yUH3fbVQJR4mOStuF3U+xq6iG3yzgtYU1ChcYg5dEPkDN0HUk2yMPbD8JQ0D2TbV9R2cLN1suje0e/BcbhzhHc3uJglRk1ThzDaffZEMXNTA67LDMQxLgR9jw3KlcwZG7tA7yfkmofMYgZ4wLzhI4MUWSbvuuCK7l+dgsJHQtZr9fU5KXv/WPUv1HPG2/6I8ZLsveBLIaJY5RY/8plN9SLAPc57WV9Xz543fKaJIfVpmdw6J7fPZk5ElQuHWYICImHh1yAiwjq8EXba5W2UaBEjPV4v7IGA2ADNiid5aek6DcIxcAXV86mcyd9EuujTFoDzcTCKFwjc2BYPJiSbXera9VLALhT5DSxlrtOvnZdCGrPArNy4+ftkxsAKrP5cCz2uLXNZaSX6rIVXS8Cym6g1k8oJLCmdkY21husVvYUVLtWlRIppuWesyy1BPuZg3kP0R1vwgblMnyYNhVy3DqKCOJcSGod2lFlWUz6t5HAid0oSgVpRxa961cQ7bnmLLnhDIQZelStC9vCL0vDi2zczM69kB657EU2Bb6qPiBcPpW0496bo1vRnLwGKfBNY+AMoPyv6W/AEQkA39O3k1nDdagBsupIhWMtV9n1SDG7RY9dcG0Tci1IwbU5R83+MotYHhH3/SmvliM4b+MwtGoJhJr6FbRmISCholFumG0OGA4MCJaKCqGhQSlXDg0zDG2bbfgOOAbhhGFxQURgJ4zn+LMnnZqu8TFTUWhPDXMYI1dv2Gn6qCpn9iC2zFNkfegOfmwgQNy8YVsgpTWpX0ugGVnEMRLc/jJtnA2y2kYzpr7dkc9NbimOs0eQn1D+eIbV0ZFA8mLuw6xB2cris7XkxHyFPEGWCMbSdGw0kMLGgHHVlp727u0jITqZkXHZbVc2b2WierHbU20n2HYsjco4u69Mnmuuvm7AqFJMpuJv38oY6fwBx8todg8RZ7Y2RJIiGn3t3IguS2evFwWeM6xGb7IGsKd0hcJadZkCcfv2vBsOs9ljRCsPWW9b9QaPwNhO37HVRnFzAGaEz9sMJudjD38MYVQosOk1+QFUF9QDzc8tZS/1FUjgnrGIRMEdZsUEgzu5ITg/9lcUH4aoKdPuaQSmeb2QmZBDiFyxLOVttHoybYuqRUA+Lb/LMCWKVfrp8eCNya023M6QPibjSDu2pTo2jN5t3aSxn72Ec6urROF0Kx3fm+422P7tLawALLHdY7iQcRMWFbNx07/kJ4RmrFsiW+n2WpUOUMvXNyfc3XoEevCiXwQ0q0WrLj3mzE+WbbmOw6VphmW5WrRwtGoV0aWL6NFD5VXTHjDYKeO+6/5O3+MTcXJT2gf1PypZ8lyS7nYDCYvTNd38a3ZLec7/N/1g8ZggfO83nj3wEPAt+MnRb4987jkS9CoEeNB+d3yCRz33pS0mgJdjeMdlfOdFJ8Ff3hPzOwqvwXsA3iUGGo0AZCaFLJECmGgLFANQlJVAABV42TBiidlrnmHsd8oaCNZQaFvqo9YCSCgyF2obGjoJUJTQMH/VR5zcNnqdwkBUH1okOlXksg381oZxgyZLn5eOw0qGS0Bzl4/xIhruopM/O9e4eL27dIQ9UWzvnMyvb3zyZZKuWAqN4DFlDNzItowEQAvnpcyA4Mm93yl/Vanjyj0ho7yJfD7uDfuwdOov4J5JMUCLO2iu9v7a2b07A4x1xlh+WBvREmAJ35i+rfztsi2EHoAL8WzkuxbbSHgbs0aUZ1O7j2Pz8vPOUPCN3C7o3vdb1tKNfrUECE6tAcQ5ma9eGOIDD3KlICwsEbWvAjlsbmpMWKxXNABkV+Z8nAZH3J8ImmxOsgUDVsGgZxEi0wZXZg+2LhtvAtciTADfNANbGVvVDjZfpIRMDR/jTbow5MZO4OnrVIdFPsIwUBfZ/akW4612ySOTfWb37bGXapvpC5j5NVqHCZoB0UwyAGyLDXu3dd6+zdFrtWH9m2EmWPOSHR2Vie5sGOWsSfkovHQVfHZl/VfgsqJkMpmnquM7e3rTuiwSAsd0N5TTGZ5EGSUu1JyYeaLKx+UtGXPrqBQULbgoiDJrReKZqtRD6EmBbPtxnmstqofSvrdmZLQjb6fb2eWXDx9BP/Rjx8eTmqcgzRzfYp+Zl5UPlmME2sXPjTydwmBR3diAMZIZ6P079sqYHHrjgBMWjnMk1DsfLxudBpMJ71GFggGbNT2YySczE05aWAVFQbOwKUtYm4l1vKRu5C/4gVzT+jcTLHJElavxTbN2HTr1GzBh0pRpM2YtWLJi1YZNjrSoKFe5ckqNGo5vvlGaNbPatQt16BDTqZMhhajn2qq5WDWPmM9cyKxZvvCSwBLxrRDfKvFsyt5mBP+/21/a5JQWt3Us7zbQ8ZiQto19rsBR1q7m4aqZVYWsmAI2Idglemq/LlIUyfQ+35KB8gutA0LODgzQdgL/AxE94DasiAvDkSJ3VIYYX/67vuYGpQteaWxS0JdlAEsUWNZAeJnAyTDXoAPpyBAuC/mmZux2KxG50/cKMzTp5N8YCgXSqoHbXfxGReQozKUTCZ3xtf6dJ2L57lGsgpk7z8m6YbdttvcSJhV603c8mOm3K8MKZ6nVzFOS/hjVC+l+F3ku9wouhXa7D3NgrvTi5O3p5zmfOaxOPZ/HZjeu/GyqyMc34XOqToWh7eb+9KvPtjS7HXwbncMmqi1JE4N+uTIUfvclL+zqT3VZRtJd0UpyLE0mkiWzyTR7ptPOWMHDKmUuU1BNlra57w7pDHYe9ZFfXZ0ZzJKpre0O8bjEoPI0KJ5qgblJxdJuBVlO4qRnWmWUt1rD58S0FTILOEnhclzJ4qbEmkUru9rO1Y3ZUH/MrtbXSo16ANoZvXHV5zEfCdaRhhlv6Sf0aAQHYB7WYBsF4bmL0bnOqfLCwdQbxilLRr+Mv3hDQUgnXDPNTTHTbHPMt856G2xMEnqgF4qDCzEkhISQkEC4cHQmp6yaE6sG4jlj1Zyxas63as6ab7iUb7SREocBrToMaNVhPKsOQ6sOQ6u2PWS7N+xeNhcfTAAijRHIDeLLB5UI9eI4ZyI1F+OKx77e8wFGelVSq3uadQ4XKQTA3kzjSIEJROWE/xqCWBmB3C3tY5m+0r4BiazF3UyqTM2sDfGRAAMhVBx7KBD0DBZJvYWVoPFIc6nCzO5o7KG6s90Jd7vqX7MI5ClyFFnxVXo9y1XdqBYBYlmvczo511v1PuW05V4yz42vRV3HuB622/6OjL2gAR0H1joQk4k6Me7tm0Et6ZtH1cVNOE5+wLQGnzbD0Sg0LVrDFkA0FZsyzGzWAUIzI4wAOihLCiHph+j/I4+pldpJVnoAhn33durTWwKDx8Mus7kqShoS5lmUigfVrdvyyMbC7FNUm9uMdNTJQE1iVYdy7+yVTGyQ8CaAzJvWK5oQ7ujobXmdxOEHMlkUtM2IXlvVaXHHHIPLsfW3EvSf9FxoWYbJ6recFBOt0r/OxAopJ/gaEc02MLysx9a5iNlKVL307m4spUymcM0SLS7N9zr/qrceDsYbvzYkEO2chUtkDBaSjYwBZCAmyqvzDakUI5om0rIzKEpXgBXhZF/S9BTN3vPqJj/HCfnm+T2se7eXVoNRDhyG+iXqLrQ+OmnZcmwLH585DUMF4CvZAkoryuYjqCC3zbKhTkDNEYA+ctZBb/Dms+Kll3zpOXhqvKizR81AGPGRJ1aT8ovX/TxizbB3bJpAfZ3PZSuxkE70SA1OKWBBChZoP5APqG2XtOgV63jIoIO9J01s5S6F9xdA3DwPzOqtP8tXAgDV2QI4FXua38qyHdseSKmeFpxmjM36xp8wMAX5t5+BidZOCSsy6Mu36GfAe2ffnU2hROORUVDzYRXEKV6ZhlrrZ7Addtpltz32xoFQoNF4n8yQMVIwn5qFfJhjZUoQ0+KZp4wZDZnTmin9mDKYKTuYtZMFdjFrNwvsYdbejGQJkl6FbmPce67Z2z4/+UkeJSo+sNhUqmMHlujwsGf+TC+5YIQcs99D3j0G01E4AZ9mZuTIEp/R4gj30hlUL8K1I6EFWxPs0Uy4vpdc5y0a0pp7TEncyEIsd+qjf+PXxqi9R3OkBNnuy5BiH3VyrXkEcu1VSZnv+uDv9RJUziJA26avZLqSh9UJUo8WuiT4fC59+pubIIZHfBnZ2NrP5coy8+M3LlJ+9lPJjSYhrwczFJGO1+yyCLI9d5G7+cIUQ2evNz1kMXsIt3TXRi04pQZO96Y03lMouTAiDXAzZZmvabFJmjKlRuvHiASq3qioiCYCmCmi1ic8Itiy8PKdoaLtZpxoawxwKiat58NCwe7eakLk1f8cMeXL0asHL55lxS4YfBOHVSZLmyIp/IjA3+qC1kY7z9qnaKwWbeWxN42A8D04mN5dlLveKoIljiKUDPArROClBi4dCUeUrJQV3VjNGIn3yDVPrA+IsxZmdeabdqZHSN7EIRMmJ9mFjiRtFdJnbD3af7GlVijvPOfQxCIwofSslao25668volxhVYrH46OUu23TB9pLjECrgVWLdwPAEahyizGaSn4fqDvNDfGWysh1Cs+Ro0Xfhx5fV8PXS3qbFusYjcf7pG4z9JU118wtdjHhMsD05wJebjCWEoAkWLpDN+qsI3VcllvJmwLTc4kB8b+fkqMB1e7UrpxAm0BbjK3MancenqAZRhkvL7hIV21feXwRwqjhgLfCWQ4zKCSPK/76DesKSU0ABVyRwUhOg0k0/X5aOh1+phUlvMWy41EEuwY69Answ5ngpxO9hWqLRSCtdNJibRg3PV/m9kV4XAB4kSlBm0v+02yW+QAoxHIWKMpozGSfdLUmcL1IV7Qpqe+BPtEYD9RUBDeEZ9zigRLTXwZZPKUrSygF7259HpRRChRiH9SuEHTC2J/HT8J5IMg0JIQXwLO+QhWAFSTi7mwxJjVY+VH0R1pjHHD4dFOjaTLbAKuF2IZEm3zpy867Uc7tf57y0QJ0xS0MeBkU3vQk6/OCUPxcwbT6qNpQVDvrqunFQVEBK2IcDEecPnGBbW9oLPqzOLVjujHihpPv/nJFJvjIyxhlqueLm11Akn4sIM4Nvs5aZmG61h9/vcanG2ysUyqv4HTJU6gWBQ09xu/JjXpy/QbrrJ4y+dX0xQZNzAkQbEZmR6Cdxttx+l9Erc4jFgP6c57hZFHMyaj51p6fKtsRGAUCNktUSax6kAx9ociOL7i2ZnWkWYxYOUAGnXbp/7xFIVrB+0R82AxP31eWoWK7RsUH4bxYRnVmrBmz1TbqLPv28sDTTLTA6JNO+ZmPvvtzGjQxQcjVLvxWTPPHVFpH567vw10P1UhWOuzIojl5OAc3cxByRFcFjGn7rd1MJjOoFG1RMdD9Ux3KodIijIVawAD5nx1IdtJKEhkrO3GWATDTPlBYmiA7A2zpmlO/JtKsHKxqRfQMKTFJx7iGvsVvdrTA2QgvGadlRqo+rOGqgJsNHa9OKHug93m6MyzvftjZW5y4hTrlg55CdhJIRZHWw9iPFKIgJxwlERImxLR8+69ffsy8GJiIWEXQM4lhEaYMN4ixPGRoJRVhQZiNVIrRQut5Gijs3xd9VKuj77q62+AhgYZpLEhhmpiky2q/PJWPYRJV4gPURDeIOiwhISeBmuWUqEl0Esk5o3XFn1PichwD7KrIDZF5CDHxisoMXR0SkkY8MGMK6t5DXKpw0kTMRyVdwZyO2TI8UWes+y1vAKnRBgkFyaKifpLAqs7XaRYMcKEChDNIYJxEdzMKFMWcLt84MiV+/H3GkVuZgHvAS+6pSqhoYXWAi4p63ECnMjJJFk2sBccyD90F4DN3QDcKE2RMvEA7PmGWsPDW295Lohn0OqBu66eiwjvWER5nqDcwOQchkcvqy9jOPLyT5TC0oqYXghvofmKiEH4TKJgFo5FPNibiTj44fgLQHMtkXDbAsFCCIXZQhFiUeJsngTJeFJsqVQZGJnipcDmKVSCVWqLVaiPaLAevkaa4qtSTaFGLY+RxSPF5rTVCa1zM76uehDoqRehPktofcVDfxEZIBKDxMMQERnqJWMdeQ7BNmaC6u0WnDxejuExMBaOkhEe3r7rP/2p+zqvJU2tGt6jcl+E442U/4Vsybp8moFMy4RUxRtDEuCHS075zg7rIAdE4fMioaCkoqahZRQoVKZCRYqVKFWui94GGmaSyaZaaLElttlunwOGfe+JZ4kDovv+T7QTonaRHA4nsLrckXx4c9lHXI2waRq/aajx2O7EkUs+xjLNEbmfy08dCS13TSCX1dixO3TkZx8NvysbrmSsk65203Z5/3JI9N9JsHxsyeNaTC3eGUOx1rEWGJYVACEwG09gsdgXzxqkoSWXdnthWI/cbXHk3kTo6dHSpKylkXKk4GOu5zf8F5Fp3WKC5ewT0dBCbDf8Xenoxf91QGyBAjJm8xiqDCxUDJFOEmF2gDwSG3GuRqiuiH7nQ7E6XIGZ5XB4Rm7WXQ1jMdczH5l4jK/VYnAi9ScCngv4zG1uJG7b3POqB57z0EuemT5krMtnXLnhxh9u/+Fe2QM7z/5g5MIT+46g5Cjz9K6RcbRQy7p08nBLfS5Vrs93xbjdY448NGE5JN0+MaPNLrskZmH1aZn+dLWXlsVs95vywMJ5IHoReW7c/xqzXFb8i0aHhYSYv+Pm7qBsZ9PsaiQmF27LNO7YXXHkWQ+Oku2B2g+SFI7wlaQvcU5F1Sk+SDszQ0YwYcuIceAcS/1YZ5BxAYKFXfFW9ssziKZgQDD53Afb/4IIdnE1TR8c7qpYKzXB/hqpo0SeDEli5Anj5GCCYLzBzRoH4RXmkBz64wjOwydwf/wEj8W/9Smwek8gqF/yMnBTDS7h0fNEq686L3Kga274KG3KF2aOPn1JXWlLU2pSloKE44092TEkLYqIwgkthCQjiwT+eOmxu/7y0l3XXHTBT8445ltbrLPCoqSZY5oJRhminyd63dMBc3TeB7MlDDNCmTifmElQ6gawttADvNBtSb46k3RTFoJQhg92fZhibpIUlk+sbgYNBBRoQIhI6BCBfOvXUAbQAiNRCIntEzqpXQE9sAwJdkCNEbNWT8R1ItjFDc4BSrUaMBMNTdT94BiEBNhPOPEMbAtV9Y4dppXWwvXZPBIBdvU5ggJKfhVudver1ZPQVcHVGYFsDLTkPOGHQPszgNeugAuBeoV22nNh0OQUfDi5ILDzZsScEFKsunPye9eyXy8hJ3I4X+ZAdmWL4E61RXRn2OWbk+aPxNVuu98rUyoZMLeKBLQktOtrIh2YurWR5bV0Kza9IYDReoBE3EOFptPwoY5RdDCjjqY4BKGRfVNjQ//kFf0X6+tWxhuiOTQhAjvO2JDQWqtsiLNCHV0twnRqiJUoRCQq0RV97DkIMiR02Z4IMxHzUIIyNMNcZJhqJeY/Dwe2bfMw+QqEyxGRiNLo3xJE7LcSzwC8EXj1bd5Lo/8cpEGOsG0P4eXWQND6WLBnv3RIPhVzwkMv9KImV61BX3NfBwf3dXlR9bqj316tv3ueb283mB9Zw/fVfCxBomIDPM9figZpyaRkEjbnHvaw0e2gR9hxp9U2ZjRo8//j5D6g6jQ3VoMGZ0xtK6h426nodo/uADnv0w7SPhg+AQg1NJCCB9po80E65KtByMBI2leYKp6QkJhubVhlryTLmeXgsm6pWwreicbr0do9Xfdnm8rLtRzImrDcc87XFojSIcWmOs6RIkaIFm08AOHSfy+V2PUjVn2JxcBKo6Eoy2WI99gN9lgNqrRAaGKxd47BIdBwE0CybL680Ilm1Y+Yj2OvbYSDJEi45bIrrrrmuhtuuuW2v/ztH//6zx1wBELgN96AYYChATcRCuFDDkU4chASv+W2as7MBwrS98QCB+IoIYAC6uDgd4CskAHxqGqEAvPQMxsDJAvK+9q68WXEJ21Ga6xnDrKpPPX33PfAQ4889sRTz7z2xnMvvPQKHMVx9/eZg7PD7ukCwGJ+rm4MrGEhtRgslNNE09mG0OPM1ie3GomfKiQhEC0FiT9EsEw8iG896b7oooKJpycN2JyPyF4oLg1yDiBgzyfXK5aIIoksiqijiT6GGJOV7ECxxk5G5NzOWXwPxaiEzFud1tlnsN0RAoQOrNBYC7pdB+iX58G92dj5iFDOoKeQpKEiWVKeEj6VIGkDllOMOFqDpdAGnjpzhBFHGnlUSY0uGcmMKebkxBJbpvMPARmdlDWTMb9nV1ABCixF01MS45KZtRkx7SQgmcScDNmKQ6nELxaiKDw5MDuk1B5V9yhmfZlwnJJ/eixCLZrpSaprf3LzMbDGi2NN2PTeLIhT7vcqUyBLijgR3PzdITjI2pzjdFazSkPowFchRuUA/iFKmwxDTrT63+siMvfzT27kUn7PLxm2SsfVlh/eIjkS7yZCLHCFPIxCpZQq1KfTUFNG1ZqzaaOjAF31EowIiyo0wsgdFcQQGn7kHxWkEENo+OqXdK2aqYMYQsNXEwYGGGCAgX2SluuTClBBCjGEhs/aiCJl1JBAZASROGrIIIEoBfVKKodUzoEDBxYMGDBglK4zJwkO4YI/HLAdJDvHSdXizQmhMLR1M044uD9ddQ/jgb62RcBtt/8n5IFCwgRdGIpH8wihAayBAuCaaQ2BBQzHEmOT/n0MjD/HfjT4IUC+23XA0SgIsShgfxRwOvKkJ3dOgNWCZ+2mLlgnfMzTq1thXQgTJQaFIOkKECAQ5N49DASQx/AEKKBXBKabkUfgrfeukvBIuURLUk8TvfSz32nX3fMRdk4iPdwzvdQrA0bRlIAyD+nRcM4unN04+3NoHBaHxxFxtBwjx86Z4/K4S7hLeTge8eNHOJpbjGT1NdXbAgf85Ib70SSvh4jDgPrKLOyyH4fCYVykNE7mI7sXmMeBeQgwe4JvC5ng/7//ULh1ba0Atvt8SLh5owRJOTeyAD96eznc+3fnVe/4zqXu1nwhn0/ja48BTAnwRODZwIsNA74I+AWQXQGALMggC+6y2gYO/8uKBZY7GYAbGGaZHXY6lCSYY5PZ9plrXrDBBGexE751wKEQbA/dHvvtDRFaGBgS+A8bcNDJsB311oGQbHIsHP+Cd8bPYcThiC/Cc9r/DQaFHAphiVRp0mUokylLthy58ioZ8veUdDObaqa53lm6rXba66BjpUCnTHXTXQ94n7AKdJ5FvhN0356ENX6OtRDOj6yiKPfZr+8E+T9w5LEATnwPgNX3gOX+AAuwoCEaH4Pgo0KgT0QQZeJDiOB/mwPIAZgAOnMXHoJhGT6s5hRanteFZ9fZn1VshYFB9Ef7PptN66FHpoJsLG2gtYMo4K0SnDFifWj7pbWb+V8/pmeoxFbeH/Fn6QEMpyUZe4y3ERiCguiyGrPHNs4rSv/UNAuY61ucH4FC6K8XD+0zG2XfAScxsWWZgtERoFBtAG41+IbJcyPqAPY7nGDZkDtazCGtR0bpMaDgZdRLvzj4FGpEQ4KUolCVho38r5pBXOBGv0HksRL7OnkzZ3V1hVZvZPutGaBhmFGh2SKqUsy9vPcuauYJGtV6QJSdipZs/h7oDFRLzJIeXVXkhVOoJAkE4FKjBIVbyRTsmmCiRK21RJTXY8Q1ldeiF0SWBLfcAmqJhiiBQD/OBmSgSsNQa3XWLOCZPvveVG+XakBzoiS1tRje+NnwkL9ZykWOuTsuurDslSNFXARHbvVTU0ZQtaebUEB8Agob8rntUlERcroX84N9/mKfYsCAGpEL3VXgvKqksmvz3CyDMOYRMdXRcUB01AaInMWtOcbkIlmTrlup3NRQuARlIof8aoQn1jHMrkSuOhQwpF42DwvRsyV4wOsKvceYksfneQoE6SPkQBN4jcaRaZIoKXaD3n5CgI6bNCGP1mkxfkAKdBonRTQdPBkCBv0dvq9TNHhSzVmdQApyLHVyLJKjn2CKtmbqpZxgvL4i1ZwKDns1LYch5X5XoqYWmES2A0KdHQx6xXrQsNYRW7lpNduEy0fIuqxuJqBLnelEPafDg2H3Zercd5TKPoxln3iryfcwI3I3AfxC1IhAe8o+JkoE2sOYTPA3HlI7p+yk+FfFeObmHubYTYP1gZQ+z2+eFu/Fc0r29LCyYDuAOMfsxqW9+I7i2hWE70UdAqWOsajsNLL8N2XDcbItQmN5eGLAS0ou3ajUESjTSHysJJ2NEe9Pa0Ep4df83vnYr+ilQ4JX5kMjgvY1WFni6Q2H5tMXtA8rFPhcW7WCYCiT+4QeMBtkNfh4xf2a2HrxB4TI7L4Rbs1o08RosIfghzV8/Perw1UXFxwmjht/e66pkag3kMnr/ZCyrJ5gVfj+ZaF4fJA5m4ssNPu75eV/0vUSwoku+RM+mvzmx9+xQdp1wvyt8YwkyKjjcr8CGsKm1jheoza33XJyX3MLjSLTWultdZg3619Qxq4kur5FWU2N/Qp/CeWRUEmrNAd2Gicpl4hCpL/W1XrIh/z0Pn13n8qfwPWClEQ3e8nwTE3IgskzOX1+6IeJi2eCjACJbvb9RXRGPJKZn1s1poM92qPnK5YVtMxhSQV4z/6EWiMzDyRXh600iSCynDGLwcx45nbkoHLxSVy/0dTUMx4EBC7rp2ChmtQmpORr14CgVW7Bp9DngWLqPDPvW+tnPjlO3Pl6aEc29yJTDhPvMKfxjo+kUI1WoUC9oRG4s966dc0mgtMDMg5TBJUp9QufnJGrjFlnhND2nzvHzXF4nppJNRQru2Qh1p6muWeYzRWBcWkI82blTjF9Vmnp2Q4A/3FIHU4QGH2WRCrZepH0v5KU9xhcNkar2+4uRRVrf2i39I6AD4TdcQzP5/B4t1kwm5UEZTl8BoZHdJNSB7Q1qlkJ3McdR9YHtIvOHRzYwxMbz7xI+o3dT0g9eOa25BjTqLRHVFT7B87hT7NO9QANKVgJLMC/H3XmMD7JrK26JG9AxCE7aFHZ3AhQkz1a1dpnli5qjVaF8YFd+mKc/6sop9vhZQOskmvnczTGaRHUaNKbg91Z2KQwsIojqCx1yGVoTtoaJT3EDGb+WICE+MjzjIncBmAleG6WbsqMwcW0uqoRZWPJPHS9dyZ5Mipw3O4x6RoBaTIUatyZIzTUKR950YXnO7Gmiq3XHYyqRyBMoekAbSzfBGWTThA0/w9a8O8okVkMKdunEz3kETfEpV4Po4DfO36+Hy6iC5+cFKreNNf65AsNvYUI+wna4oa7sBxZEqG/j7lbNIQ1ERrIm/9ErkNWocWvWKf13YLLfl1iLLfcCRnHZm+I2zxpc+xTSAU6nPaIMhaaeiQt+HGv0J6HtJaCEoV3gNfN4oYRa2oy/Ro1JjV9aEpkFGHO3CIQeGVRrhcP6b//5cu/d8S0DHHO1NOfSVMi193KCQ3BehOzYMILU2XbG5Ca05EzFQU5kPFtZDAB7dpgIkpSLOaOXM+QzXbshb4Yo0hcDBJiJsgQPxRwbGnojoQjLhNsT5O54xOMVSsvqlgP0aPOrfoWJNLZy0rXBrG5N82uen5y12pf/58BuNeTnn2BXYDder9UL4Dl+a75c0dDMha8bNH1tovQ5X8ypNCrfVOG+3wfMPRvGryYNHfD+/xUSHo7gYkp6Nbbrd59rgJAG758yx+GqvT3fHuvpXB4HAwexE5/NPd4WVgu1zOqV5vXtPinl0+8I7Mak6KX2i+GSTEJkQZhUqVcl3rHTQv2Y3Pj8v8lbskU6aEKm3ekqKpW6p0QtgEAlDEE1y+iWHCBcuyNZWm8osx122Z5R3fxQ4dXpcxC/TNe/TTrykbk5pRLH2hjbnJxP3dYtfh/V/QsEtKWlaE0gOsV0LTJUF91Ajc9PNgnZ8ypjLmDbaJP1XL0Hhwq5RK0MFVawC5Fu+rotGN9DbxjnvjXAau4Gg7OiCxIHoevVhE68MhJDiwfPxElmIWcFASBaZnySeioLptTc+pSulZ8T0lgtlC4oOGlGBgtBnv9w8jsd7k3goKziTwnjPD1qnptbzJW3set7q622LyrZuTigAVFT01Dke5yyX1T+zYtG79I2STZgLdTSeMsu7AJsuMpACXmxsQwL/8m8y8nT1vg6P5JxS5osRaN5DpsxsNJVrqxTiP9jDEJCvyYJPEcX0cDflNm89foCpikps5j/0gTZ7Iox1oRG+XrwffIS6CsfJn8uHLoSBY6TESBWNcu2dlVZ/WMWFlnq/d79ifp4PTTJ2brGOc+soWWs2jhW4+Pe/4JruHFZ5lFBarRasAdxH6Xb6FYYljvvYZnfu3An9fwhdSHX9p/HzvtNVvq3TpZBhO/raURr5caZnP5jIrR+ubosa1VQB+a/eMrE1ubjTqGHDFd+VlyS44d3wjOCe2/Xy1GIt0HhpCwMSqsxuhjUs+sVaqhzFltZEIs2NzVmz54ZJ071TPCZRBqyk+o02sOSsvAcfzz6BiRX4wp+75QEjn8C+hJSba5VJG1m0aehAieuByd3TBphNwvfgaZZkFv1usFmjk9aYv1MYKzx/+N/+A/wHda6b+QG9GQR42YKJP8CQ1RHwxtpYGPNkrfVOAcxt5JGqx25Y945oGjroxXw8O1WD1LLYNDzwRyRIu63QW189w/fbIPehDLK5pWyMXcwy5KXRdrelfsxaTzpOKJGu0OLyudwQkrd3v8yeRp0mLZLdFa/6u7uu0a2JYOzH2pug/N0aT9uPrxSNpFz67YQtN3b7q9+HQKTanq3upmQvuDXPlOINBr42U+2/3qxf7WMKOcYlApKMGE3hrFvcfc93chDP82ot3EJQk9Te+a1dHXpof4uwcxcObf+lBArli6bbsrxLAcKJEVMrDyiglkmPOOLJYJCuC5E1LhVFSbatdBTxM1ogHJVWwEqmMzCkqaCHJVIlCtMVaChoCZ/Kg9c1OcVclnpG7Ie6K3chm4ioqrJn6EvhJLblWX5drIaLYHdxXSx05VHFh5cWfN0dOLSyYwFlXA9HsTUTQlnx7iYg3dLqbFM32LzurYoKGt2mtoWfvZcqBNLs2fMdtOdNRxV19llPuYhQFBz9TFMNnKtnNQOhWa2l1b2LJWx/TT5TtoXiyG1omT0FrGCkABE9HRwBD3Dy8K6XxK+KQCVDJ1GiPcZiAyMwy5aNavHgfDvYEGcwiHOXpdbW2pen4Ac2m6ctQxfFpp9c54GjZCL4pUbGW3bD2hHqUeH9l88xdqEK8x+slmThzV3VCj2wvanUayhJ0OEC16u+OzmjHDiVQVra9SrVZWH6iBtBJtqCXozmqOzZmeh+f83hGlpq4GemBEE52srze66+5t7bT7ppzryZWlt+c9gaQv6qbqUaMaI9Yoc4ytErTQjtU+QFhmyxSR02s4dARIunfSb/HMiKnP9+WaCXSNM49Nyvczr+HRPSN6WsOzZOjysEZtIAItgd/giAX4fGwudJGBT6cUwc2HYs3BC3kCHU0Rf3v4k0kJthTDoVY3vFlYHszVrJ2LydPm/dzoaxdwInOOu4i0aoHU8xOv/6eYEQ1R0dhK85AZ/Nuf5L6zfqaysUKeshT+YmrpohMFOsi+3sQsY2mtN7ykovKxZt9/H6w6OEGBdrozso3EFmE0R/5iRBKEVOOGi45l0MsU3mHhbSLDLqhMuPu8lS5DTUwOh9O7ILGRT27Pw2hhX7Lh1/XSiAZpIsqfxQNu75Kdxg6RbHcOOXqFc+c8OmnnLaSVUSMD3a0JsyjWJGepfZ3DEp6DZzRza5hjtF6hODMvsfuqX54dlERaKdEtmkhiJ4tam3+NoKk676Bdstkc1fX+jbghpyulA5EtUdfH9kJzAeHPkxKRWX8xUbpX12y1kds1OPuND4fL4WWS0sALzJAdc3z+H54HZJ/UlR2oSghkDRL5v3lpHSuTcV0lqKXXljHX2QigGPP1QRJszducvJPU8cm2yDfFYkSBmpy3o1lIfMveq0aRFypo7JIvJm05r1yo+6DbXQgM+6+2dqHN6yKQJ6KWLE2UJKB1kzxePH2HLlohXTMRd09vNCeyKVEr5TIr9C7pzgQYlzUpG+Sw0ShpYR6cEHPOkIZ4vwhHkX9NNVKb3C7tvI4ZhsK39wR0+sJ1QtQ1XB6zdM8G/+d4T9xRprgu1nEiv/Xr2j6dcprQRQ6G1GK6veWT9+/tSB81KpvgWp/m480S439wOFae6uwHr280stZcj8pgFpa58z2ctWfqYt9VA2Iq+8+jiymjij1y9rrnNYjTRbPRTlyOuWNeYWtjWgrzpmMc9hvaLJHoyzg8p794w+fSM644OezH+j3hJTeWgERLI4JYh7Ds/2tg1r8DXw7yYvANnxwSfpuTlTPuW1gLZN4UZA5gW6YiMG4LDNTVa7lNPaiDHQRKRbpG2/DmDIcsdQFPtinHmeUfa26RtWwS8NdJJE3QrOJOgcGulqugCqEnFhmFt/P1dq2Ia/NqJzKKVGGo340BAxj/TElNxDC1sNQ0s6FgltRra6LbY1cHJSvcSJPMRpdlVpgME6uq9BPLTUaFly4xuhCiFaG41ZFWhnzlJLerSm2DVqetqwFDGkD1L5B6UKt1WTpzCk2KnsKZtTPKe6DZ7Ru9+YubW4qXbQ90acLQCjcJcCzTERi3DVZXn5ah3aqnbAvAw+uefXWwXCijnrMyjBicqbb+ZyV6U6qoKeXWi9+OggbcGF8dZ2C5CGpA7OF05yMLEBbsY+sSpfWOlRA6A7E2v3q4wxGskELNyFfbZZjQbGlNvm5qQUHG9Nqi+Yo8eSDRQpgcuzokXuFGmGQuisxYlZU5obJCP6nCnCXqPOZ3uEygO2lXFhiXpUJ1M8uJUDbUhvQDtmU2Imc2wvIeBmrVoUZZqzTQ0Jgu0DWDhvSI0tZnW6u0zPQqc4eAw0FDs16Q3gjq4UMauU8yI60O1GqXhyEfNBuZg0dWMBcCaiQMzb/JMcwpctWm71QParSwQJ5LjbwQQNaA5joUqmAweM2wFHw1NYYGnGqW2R4AJaDVuh94lvq3Z8bnUlc/pUaFwdtQWXSgA7Qxh/02rDWra8D4IFwZvzpLGPJDM5HQW7elE+GY2lYYj+9H6DlSZl0LK+F7K9/Lyjb3D3raJsedndRta6uVFgNwbcxRVYNamNWiqBcMhuJ/4pSi5VAfMgQollEIYW1S/n32TwIuDNu9xJBSrv3qRysjuGfDbwm8CT1FPr9QMGnt2WZLO6J0KsLyEf5FrRLWtBcArSn1rzgwyO3+BJqMBExLI0I0DmEZ7DAm2ZUpYQgB1SGFBm8ZibqyAG55Jj6NQx1Oci0FXRhLr7Q8Xze9oFA/raywV26xjpOV5StVCgt008sLi1oskl6BF1NvNmMaqiK9EvE8vgdbn20WFt83zyYud/+oOKrUE+KUV4Bqrft1dp3mAsOidFitzkqormW2KqfojI5ZFXN0bbzCmfeJ77vzjlqttgY4YZstRGdUQhz3d9loH+HIMflcllnGx8WiiiZDUwfqXw1goL4pQ6BrAvVwY5LDn7YQ1wo1WlgzzTNUi5bxTa+y26GFsxdEgzKttUkchiPavSm3dk5kbcjPWIfOwRO0kXL85Tkek9NDnQ1fXchc7UzMWO/o48uK5tOo2l3Z74dLMjUhY461oFPpzamnPY1Zms9Y6kHrRVaqgvt8BZUaOWxmvS0yKAOGHGvpRA1YY1mEcA0gLMleq7n0nxfw/l9jjzXEHMtlDW2KO8geAuMw4fE6W1fF2LQaUAOGUkFNbVq5m1tgEatVFgm/0DXLPacqe/J481A1VAD1Ie1WJPQKaomlAz7s8cChPaQYwYqpU31/DazIg8I58+Ndrvicv6AKJAO8BMtLDk3CwSgzehb3LiDCWcubp/qGl8yY+RpO6u6cMToXskHjkVEWEjJDo5EleCR0BSpD0kGCpSWGUh1jGX5cMZ/PDy+6/ZtlGiIwB2FhWPMlnOD44fzN/av7j3/W3+vPFVOQuYzmW1B9DHP8yuInJEkAHN7c1AOpucDtjF1/4eaRH9ZVJwqqukFuY9AZk6EoNAmZL0BCN5Vde4quWXedPQW54KRwazDuWEJ6s/4aazpyw29NJfS3YLAzxeRzmMWKqNqNXSFXzlYMHx/eTvuNyK3hYEdwQbtC1OB+BPRbp1piJcxaFvnLxrZYP/wwk5VVjLT2BprtxSJ5ruUK5gY6gThHyDwIWBlHkGlppGVWtOaUKB02L2ZzAaQhVO2KkfROei+LtV/I53EuUD3Gwgy/mry1Ghvj13K+7REYirK0XfkR/bjybCBODnWboc5wxN473ho0FghKOoJcFme3HBXwqty7mPxV3ChkFoRfS2l7JdeHWN15bPBfcmZxlrYzGjWMq8jJFBd57spjbftSuWw41WPMoLifcng9U+Osig/rPpseh67RZNXF/ORM1pwR2WHzPg4MQJEcHpdl7YxErOO6LV5HjU5XAREUqg79CemPNC4DQaR3EvJc2aJcq0gm293SH9maywQcUxWqrR5leh3jBi7+z7bszhRAzKPY1WmX85gqnYP7BTqDz5jCPfUP+LxjpGTNFxHggT3mA5c7xrvZM+gBT//21zCfc1lGO+3F8h2Iz7DkTbWKNBsBT6arpTNImieMMxkiYfUH9uurZ/Gkf/i97kJBm0yuckV17Qz1WleNWOtO02i91TKn1k38++zNfV9SNWmeaqkznTJyUyi4MUIm37kpENwcGdzBpxeGutoA01SPyq1Cma6gvSDAXWpNnqyi4DvRNm4QeFgNpnKX0ohur7Of16Q8zSNMWROJhUThJ4fErlBRwSRewDwFcEx1FeU2eDo/Hm2J0Z022UHfwKFrASRkCQQsoaj+9ADWXQH2XH5eHZutORL8Cz9gcnCUMf7YmpyF3U8GrI+VnRBd6/4jTxhXq2DBJFca9nIrTofKpBqnJ++Jb6IZs2JJ/rkl6pnzZ06r3X5/YmJbwwb110batwaEYXzytKmiARVugX+spKPqVn4zKBiHUoEvpTIpwpgY6jhkIiS1VB2srGpTKRmMGGRDalPP8omLF3CZ3ArYEbHXW1AwBbeqMRWj8hrwKbzJAp4Ar07zB5c4eYFNwe3A7Bb5PIVFE3nA70ULVSqdl89trIBOwDmFm4b6m4dfu8sGs/Da1d+IXMFXxm9tFcn+XrOjJxJ1d/dmezy9We6u/IhjnNLKZ2bNJRbqbYhF81mseY9XJzexeB5gXjc1oMpGoUxPJcDr5BEpwhiCJUb3hYmQWOw0OWLKuA7gFi85J+md+EAe6xgsELBvUd3GwoyAmvolBItxqlRHVov9VClAPc8C3XVTK6q0DmUafy6z2KTtiuYbeqpzsgSN8xOFsdZzAQ5n7imGf8I+4QgKpsTZ5Oh989vP8YDNzotpcPpj2wrSwaypfBdw8gHL1ICqGosyvWMBT5CbSRHBCdYY3ecmQsK09jVcEPCiU/DYIuHxqSGW4GVUuJ9HbYwTI6pNTnA5WV9O4sAnRPATsdo9vwrYi+V46hhWy9pXWTKN1lsjc6jyCGHkmAi+R50+8S1LvIhODqg9H6wyhVxn8DdJwObNnu88EwedYUeIqqIdtmX3pKTb9zfEb8vM4j2iYnqXT1zfOh38lewMRkEpnOJtoKSdoNvh875SPmMT+xdxN3MiBgt7WUxCZxVM/VBzjJEO5gl/ygAPwPCzryf1wPHNZUmR08+ChwxqQ3lKNzrF8LOhMJkGzoG9zw409oLEsjL62PZugK4PpUQOPGvuGBuDCtTyMw4Z6IbWZO9/yYZkQ2mS688kw3FDHpoCMKZShNCLMH0Dvy6czrJP8XathptGo4pGoUyPrwVoUJejpejg/f5LZ8jH5v58QSD51qAwVCTXv002nDAUJrPArLtc3Pn06gEe7Yd7EzDzgmtKzk+NdcFyhsNnkyiWrPJwakXf89wjkz7Z2VFlMBiqknuIyYZfDKVoMiBrqaukqZH4OiJ/SRiG3HhQS1xlwpXEjyIKVuXG7wabU6qrU8cMasrnV8g0u6URQa5GWH7/C1dFxZXbLqI/0FtfQmWIPbW3oQTG2FzE4PQw9NjtcLktUxAY9wFjv+2rpT3v3H9mc7MTi6y3rKDmFHuExx1hs7/h8r7Zw/leKfuecxSUp3JbvRTWUePXkwqWMzbrcLDKjGsQ+S5KZcMiL77BbMZrie9l0ovyVuHqN9DLpXzWcmrtwTV3Nrle5XWK1Xz/Qs84KEHumSqtimbEaooyplfrP1XmkVpQcz19fr7aKVa5yfV358LqmvXqLAUO5MZfWlVmNIE6bftf+Coqvtx6MclrvWk1DTFaX0ClyD1Zmlzk4BgIBRakjcoaNaptdZS43JdTjWF39vLBhVyVUEPzTFl2JEvJ8bh13Yzob32GUwaV2ohBM22TxroXIXP7N43zbstchGshwgKGUmwBZ5bYFFG7cfXmsi7FRSt257g7NwiCDi4xURq9S9m2wU4eA0K9WdauvAbJR1sJ7ctxbbF+/GEmS9FclgnV8+3miO4KNFxj0FurtOmVVoLC3KE/YUite3lFYnQRcv8ryyaSynaN6kfUQeDCZDFylvdtouoyfW8RnTmOi/12Z6kXHpMXMTfS5+As4PEXcDgT+LwJW64cnRRHDGwEBQ6ud6jCy+V6E94+njFXGHlc49EzxjBYJE47e0L13MYvvYq5sU2Wqe8CILx1+s2Xp9/+RI0dinlYtHUmd4RS7PGJhhEu505dykspGQGiZH+32Tr0VDi6e7LdMg91UEvRjnVTpZZKXXolRFAoO6dyVySRUUekGRIp6beVNCj8tGVCdvpMF2P0PxNLRwyVFbn/qDJMlaiIY1wcGKW7ZSblH/p3TBNd39YeNrOLFm/Y/9WWxKRTBk3X4ivi1FRvudwh8WAWxswMpMz3GQ8XMelqBZ5wV/IQiv7Kp7t1s+iDfGbpTja97eFhylRNnA6MigOc5LRStitbUpYdymlrNmSLXJJVBSxFkRmKpI2bW0DuD41qMy4qCEnHeryV/KuMCcSo2UTIHc9kjCfkmbPweRNGn9/YuGUFKLieOkPtRW0KvtFpyX9UALsHsSrFLztesEsGG/jsC9ihnyv8pISdkfBEgWfJ6CnL3nfO1IBKa2vANVWi6qN76Vrm+BQ/z6Pax0Q0+3xYRTAqHk628zmDuP5Bas2DH+4uuVosfvjCqcVUhQo3oky3mMDl4/joKhTpvocbTiKAvlVcH3AyBYRa3WqVLMuR7N9wS30OjBJ+KPkpJUESe9/DDSTZAVVJjC5y/53Lsl+lYKQ7n+w3TrIzNWr1P+IZfaJ+2n887nnuhGcI0pKBuTXtbNRTNWrzK1y5zfjvjhdmiNNhs9qJouBVUsYHFGXbSs+KnJz9RVhh5F+noRU314GcpNybDsLVUp5zn83TG6E6VNz7YYYq3ck+kyTiMY7gVqNBR9689P/uxkbZeGqaZ9JmObigo8JO1uyOlMcOMo4oW99hHnMK9vd/YFtqRloWHjYN38FVHxnp6offX1aavTJi2efFKgNR8TDbzudu5E3bSO0AUrBygWlIcgMvlKNlcaPwTpMSUiBuwz1WX8P3/rRpyBF3LeRI4gMPD+UtbHkZkHsgfgdcnDrH9YoNtNfcE9C03EaIlmwa11F1cPqGVVMeFG1mP21DrHmh56hnkic5ks5pudqVMu930P6yAXAv2VKm0ITSVCKbXzWFOSeS8IQlQh2Vyi9GxcQXNA/92rI6DJ7iwATDBd8ISjLC3KEqpPG2sRKZ3M77rO1njMV3voS0/vCFiUGBVuMtFBsj5Q6z3uMO08bu6BV6RTwSm2XgE744NOmXYwuOrdbp3b+4GZ+RYxzdYkBPdnY47P0dnfaBDqfT1WFXhnd2FHE5s8io1oSmYEjUtKLIoJSh0HOnFAVC5n70xAG0mY+KgIgUU59ovWu2w34elIJIBAWEya5utoFubHB32x0QcExtXa4sCrU1EZTEGiqFDD50wFFUwDcvRJcv/gswRgZyozJMeYL1dpYd9tOQNALyZCCjUu3ITtFCuUyvxLRGT/uyMCxNqQvUAyLNVOvI9tSJcny18rSgVqMuqI36Uz+5NFx2jtE8DXxIrh0dSvRNkJPZsyoSajxxDpL65xGZ5MwepdDMkTd/IRW3v+ITdel/o0ui7RzK351j9ZYidmawXpzmVEkVtmK5NRbuj6kSKh3paabcrlQgTRgkR7jI0V9P3oC1SM+2okuF22bNB2+Sa9rykP4GKZXn9KHKtoocREn/O6nip6kSxgrnckL6jMlj1aVY+OWNFpw4NFqZWQhB1tIJGqBJDnVnQeNLgtmzexp3QE3I8UHMGKM9wh7r9pLyZ9Eo2SFNtsIqZ6SN03K+CcsyjGG1NJKhE0SshhImaHKGXuWWT5n8S+gfCSAmB5uE6XaFZGJQtvp01fYKLou99ixbgxcz7ztknxK8OolTqTeGWhQuR5UgDZLwCA5hxcUXz1hiekaUTs3Lo1Ln35m3I5qp8GoysvK6FaAWs9OPb820hdmj7HmE0jo6ra1cLZtwlUNfpz53AHJKMjILFZp8k4YftGWWMg3hbnP2+KKQaWZn/VYLWI2W5Iul+RJJvlScD1yDY1Nx6HX7L871cUVpChL93axmikVdEjKBXWhxvURcL5bk/yi+SwmlYj3LMPYj1EpDChzZd13mwaZCYAtaQoolb3JHRrJM7hdrXBx8jGlR7zgcq+v9jb5hAv7574gzSUP1DFbk9dwqodMgdoKui8KdUpynd24qsSKHVMGZM96Dk+4EvWuIH4YH+khaUchlvGW+cv7KZPs37tdMfjJIUv11xPrX4fo9V7x7rgL5/2rja+v4rPLsGbL9iC7gzjIHXHq932XO8rvBJWKQOROarLUm+kyN8/TrSstYrWp8xgRd7an9N2LQui6mpUX3WNfSEjs9BjS36B+nt4DmWKuXuBxhSxji+HbblyOA/lVW71Y0kfQBes6Qn43STSJTR+fth2Ta2a8Yokwfbwgx5ONlihhfnaWRHt3u7DCKTFHaWTnzGfSBRERvA/HrMZ0NbZilDaDp2c3mm2Dy+tEt3kYv8EPNh/TNu5vBCDHl6K948gYa/QCZeO27lJccLFxQmNc7YUqBbuKyKV9cn8bcf2F+sFJ64cDowTXihecr912Qhirn0+/899OufzFl2WfExjHj59U2iAAWA/7fZshlPtMUvyYz1u1MXHHwKSV1K4sYYiyeFVKukfM2pWc61xfXMwicHFyh8uEbgatEoVbbigVwLc4QZj7XFL0h0/fvTNh2EE5SD9AJAdq05SHlajnvoM2Yvs7QzSBgUrFNykf/6goMEpXaUigAmR03WnhBu6zealPWFVoncAMFlmm5p2Iam9J/na8FDU26lelNoDHdcMQ9D+pFgi6MY6K6okQ/NRQSVSqKJ6Y6HGrFdaqiW4uSCWpHema9xO+Tj7LbZKMCPiWVmVknCQCx2eUqvIH6Co3lKkOpVcsLbPFTZcLAWnhTOqap36zAc/I4jnQt257Gwe9RrE9p1MEbJh0DhV9Tp91KJFfxshm70QD/GP88OQXgOBS5dD6FWHIALzmhn3huDMBtpDZSpQMDVA2jzaeRuVwiudwpkro0aVKnU5jWwSWUOaNLhjOHD1dChuIydUaGaF0MZWeUlqVCoBz+9CkF/FRQqQWVCkyREqbEFhH+ENvhMgdc/Im+UT9DDCfzxLlAwYMrogWvMcRc0UL3cJX9rFROLEtQim+pn4rnweEn8vXyJGlI9BTco/Omci1pCmqhynfHzRXLd8StfMMnko+KCU6RQsKkjF9XgMUfd98X9X5I3axMKMsZVqdAzjCecq2EGNFFbeOn2coL+yzVY7SLAh7p2FBgrMSp8KNHwTrqSJkF8zRVFWkzcv3SBaHujsIlqYUd66ORZdVWUaslVCAD0aoZ+VUzlsc/bn6Mufi45fGTW9UzOqsDZz9VB+SqMq9XVRFQqXO5Qlmu5tIB5X/4NYkehz3Ruwb/+DcGr92R6FkDcjbKquOjNfGy0z4HUrVBNrAKyDdaSsI5S9k0kV2AG/p9YoI1e4SInR7UF2bYPF4olfvGrm8tUVGxD8rANysdHl2VbSyGeFaNsGVtqk1R75II5ykpMpJklkik4aE7D372ScZWIqbChzX9KQn6jAqxLdMKhwdgTq2W1xVkgu/XdcHP49f6J5Q0fknReCuzj8eWrQafr7R69ZZQO5Y8X17x1cHaZNF1qWytGL/l5C/okzFFrznWhLUb6PdZaU5Gs0z2Uy4b/LpSFxIrA5l2b+s8ewXCZUNH9KKwzvDwawx5p1J+l45L/gVB/79ZIBr9h1C12MMFRRvVt83pdkSxUb+yCny3Uucgmxi0Fd6Gxatn76ezUpncGxRc1uWpaNh3zPRCyKOCyBIqT9o6vc3hptB/pFL+I1O666fOPcfRl0DAu3KOJSWsF0ZMuuE5WMqIUkJj41YOLyddGBEI9xKFir1+XlpGQCoLZjrczbMsYF2+GpcrCSmT/JmRvoLCSJ/fkCSXhHF5YHZ+Ki4szaUn+Q15fYUFeX3+TDRDGsLlgmiOskip1BErkMrOl/ouZUU8kOQoy5EknVJZqMx5WR6v7NKD7lV0G53uoNPy6fQIyFKfY81ZH7n+xUIyjcdKadpebsYo3rmA/lNRFxSzV3yEk/zHX2o+uEogdGjK8jQOp80ILU5cjUJ+HvlhaM4lIFVJhN1ebH1rFzP9kHBeGY68jZQ8P/79fdEAOLdSmytJDWRmavx5Ek1arkiTXergrFLi93dTU+/+QKxeoe5o1Pd+ALuP8R9IJY/4/EcS6QOu6EaZXFZxUyS6WSGTl90As7faz7w3UrA78eSBG5gpnH2XaIwf9nE4+35g0C7tC7B1qaGwXK0JTeUhXXqrkEKjDis66xXcaWv9dTMZ9xmOInsfn2L/84GRculgm37FxNvKHg38CSpDAxQ6p5RrLmm5RMEfStQnF3lEruYvaMpvrrIY1nutO34r0Cl96cbMvEal3VTI8jWbLlNwV4KZ6Fy32NVbSzQ8VIoV0A4boShD4U83ZReOSS2t2Zu1V7t3h2kHKJNlH8pGL5Ld5xbkmAW5kFTCTlv8bDmrK49lDPWYLO2hsL1rIpSXXcjLrDEeoxN/wckTgrFxf94C2XjTKFMXvpFwJMLkZO3OkOgNwRoFZI7y2SWFdym4B5YxKcEg/fOTlNQ9Jlb74QlU0Z7yte8oDVNA9Fn30Vn7pmUmEHyND4JbbNUIM8fciNA9ds1GmCPm8u6ZK2cx9Amxq2MT9HfWBRHmo2YXYuUO41bjlqnbVxZQgA5NcDmWjGl3L5nkDupzWfFNWXQK7r01K8mTx/1qC0ltyeD0VlfyxtuNacT8OSFugsef9wBPSTQ1SfNYEzqNi42fzE/rByYwb/yy5Ab4z/mk+snxH/8u+xsk4qpWx4qWLLFaebXhJQNWy8AAoFrY21msHWxUc812ZldLvdJTgLWP/LaZah1TGf71/1MUfnoi89PjiiLw3+zd1buP7+jzPlEcmG4dpOQPUcLqA2wXvsKA1OmHc1NIP2QEkMAuzP1NyN0F9uBwxO89gXhg4+f+Lmb9CETGsr+Tqi69Ac3c8V/SGsFFmtPAsUNsu8MwQsNQGwGlvHsAaiNmhO7IZKs31aQaObC/UmkX4LLPfImX1HIJF6bGd9iWA2vuwXfU8rFfXCDTmCQq3ZKwuxOU3noPedjhnBk40kMqARvd0QlcuRvrdifk0ilkNI382+c1rah3vJY7O3dEsQTqQxJuhirs4YTBNNH+hRWbitrZe+1FAFzbsmzZizNjKlLgxf4JBIPBeJ/BoSSnvnnzG5awZy0r3pvhVJAh1J3bOHxzLcC3v6JsJpeKUpmAwuKJlxfAkpK5oeSpKCqcQPxxFVhQVEIqASsulqhKgOVfqBqRKFludDLocHDe8vhvOdy7fN7d01dWByadYt/hce+wOSNc3sglUEEZUe7Megc0059RqM/oMBuV8mxbujNHy0r68GxdMXBYdVapPKNSnVFi5W+kz0jEZ9QuImkXEBUnV+rjQ3cvbD1FlzjS7JSG308MdaVQl2GJfwBzLOqHprRWgKM5/++SFAz3VEKNF+E16VItus4BT0wZak1AK4+jho7zpavlFiXoUbO+4nC+YrFPCcleob+shkqiUVO+P9QBaXoXsM5eAmctyvYZtoMpJ1jD1x6nHYH5aEvgaQyReo2YtG2WW/4V62tmeb5mHS5e8FxDzY/fp1BpJKrFJPC59t0EdssPJojjT3TP+jKJ+JBKjHkKBdD980XVXGfvkJHtbFkmD4MuNTWTSf5RTJp1vJRUqmL27kW1n5eqSsESiaB/hXuz1oJjHRWj4xZcemomkpIoxIEDYMV+xLIBZ/rkIU63V/SgWm6xiwnk+2Ti8Ydg5LsDm4gUBpEYePrDAlQrGxmSYDIST8Xu16/IufrwPJH8jkQsZp8XV1heWP5mYyuqpGfaUxIeks8n1OItTAxPbdHOAcsPkJb2u/ObkU6NriiTLFMmJH0YQNW44jzpqfIPDWBAQu7ryktvh3y8rOJW/cqJckoZAvl/HOF01+OVk6SUSUjkPTzhy5lg6W5k31h39VjkieJeDSsn9S5HIN4FkxGfwBezgGE3VUKqX8GqUce2xpTHFCQu5L0cYB04qNNALm5izypWnjKuITYKd/OAgZgYWyNHzkjgHjmHwfgVSA6pNfP3ZehpH34ClBzhku0PqTQGlZD8MjgGzAvQIwxmhC6fjMmITBGuRm8TnGGR6TTchpU1hbRaQ1hL+wWAEAE4ANYwAawWAGNSJCVSJtWkQWyUBlsBxJQCWFSKpITUPr4o1iGhVACGQYpI4lOyMbEMcyGsG6RISqSM1CBNKYDtlCIpIbWnHegDo5QPI4EUSrGUShWlehbjUHpOmRPFTgqlmFSeVxRUjDZalZqtB2mFPd8BS8L7UaCizP/CKJ20Srv0IyfcU5rjkFZpJ6cPw59YAta5atmByTMMpuwaTP1XMG0TTP9zMGNPnZlcOOtfFHZ26hbkTrdac+oXROEkTRdqzG7WPdewCMy6JQUWpLD9n4+bpaayz+Ic6/Jkbpa59d72Bij7r/Bj6cUKsyKNYWWsFa+AHc/w/2/b1cm0/7rUlo51sfQvZfuGVifrEdW61bFyM9h+p+6zI6uqTP7778qkKnhPOtOcvqeA7QP96YPO0Fk6R+fpAl2kS3SZrtBVukbX6QZuplVEYBYVgc7QWTpH5+kCXaRLdJmu0FW6RtfpBm6uRMAfIO3fBuR1wbwa46TE4QQgv1VjSr6e3r1S/J2MybzdaefEoGE6Jua0jCFQUm3nxmoIVayscTM+IrMHkdWOyG5z5OdU5HSCAsg9RIg1YOfvFQT+9xMAYPzz/739KZS4wdTfjn7B6egf4Kr50a+PP/zODYgHsBvoJ8fYN2qZVNndZrNPZnu6mQH0rqNDALUMXcY+H/XoSl+Qp7RmgRG7F7cHes8P/dWd1CEctXQuM3p3hUMAtRSrdG/TlZjn45pGsuveN3Tb34SdqUyTmY/wMoMnRVKe3cnPuz1EmLRm9TYqyJXMAsN392pn0YX91y3oS5RmOwMHHwlFoNt8E86N42BIyCBp9UVNYoMZJFeFihrQDRkuUIpTUT5flNsp/BSI7aVH6REiQVfCBDno5qMy9LOE+dTbvJM6g28OSofeOjkpDJoQeGrPFT7zMrNwnq5kM1vm50BHcLPWlV4mWElOwG35rs9sdsX2lArnu7hiyn2SpGmoMew+2w9vMyRw7s0zGAGzMK7+QTirk0LOkC2yVseYL9OZjZJA7pM1/EAeTrDMFxlFUT3fZ1w+ZSaMzkreFHuySQDII8CgHW3Vii47bn7qX84R88LOzzpf8gMpx3evn699qTvXXGSz7vQ+prOrJfmV4q7gt7ROweJDRlFU+55xHWAmjO4S3oSerhHQ1nph0A5UG3TZcSb51x+IeWHnm+FLT5NyvFzvky8zlssIm5etz6eZ11foZu4PZvNWol1Ov0bH3uoq6GIcsM5boql2b7eqSXiDTkbDSaqwzMnuXhRodfgjGdoL5/9MVHtK+walUCb1trhmpK83mVucSIfkd1psg6o4zEgwc8fkq8z3n/OjOjZwRsQaP2pgf5z2on8N/Gbc/fGjG2Cv/+1V+Xn2x1fzCLCEufA3+0du7pX19/gY6gXA984+Ugn4/sfmrR/ED/8P9PEYDIMABPzW7QwsR3XMjeXQterc1mmK3AL6dYldx7efsvdRhB6GVm32/4gHn2/6w6r5ff9rmIbCWEvdu5ikIxa7GxeDlX/Xx+qeY/Qo0eIBoq7FdTZhK8tgZO5MBTJTJ2yGP5LJg+Yh8i6jThFNHHNrp10GStRrfI/aFSli6iztGOmTxl7/JcxEoo4jrRt/VOG3PnELCPILuak3BktjIUmjrslXnGvWHXWHeEjZ5JsgHmfc8So4cAzqJ+rXyBwPW5WBz/DBseDAQR3gQyEZ0rBTZ+SNLh5zl7qPnplXwEEVtKAVplF0c1NXiX38an5OxjP+M+9HFrZ4NJPJBwoJJhA5fuiJxNRMVz9LhpibJaRphZoUdIz1DJUxKnPzr485BgnboPuWjK6ZQtlEOXJMVouuh9dE+d85PwimublNnFvViN6S1HK0ulrN0dOVKoFlx8NXLTKbyxpdzColag3IJG1brekUWfTPHILEanlE7Ip/lFQNV+dT9g5W/sQaTpahor16svTTiyT8sKDGjDcBGMq1EYqLgD0M5evf7ec1vVfUJCyc30R3lBUxlk3TNOHK/ADBVblVswDKJoPxTYyxQxJA1y3VssPHrgjBh8OJiwJnd1BArwA4PyPSL/96+2okagJeFp8MxWAqjhYtfM0WinATxEE3zezAjI7ZLGdrdgKRfQvkfKy/HYbwBTdg+4iPrkWrrtVHYCeJvvhvxl/Oc8ALAAjIbcbh9CSA4NrcQAF7WoeCiwDAVzMl0on0qekk2NTrpESF10mz+dPJU2NGJ8OkW4enMCljWIesBp3V1Pw7W2KZOjsTUdLlMKddsxm4q/baaqqdbF3SbqOlapVqZ5prUYRgYTrgC0+HcdgnDTprqZfaU7tkiOHiqq5W66RlRirvxIY2nNqHNtf6CmXIU6q9rjqpVqtUbV6xmTBBUrTPvEbF4ShCe+0YGmVObm5hYrUg76L6XbspClbncTVYhNim8tZqsb2bqdVDLSGES4Tw5W7BtXxs8K7kkOHjlfJfN1maFIVi26jf3r6UX1mdq8iVzYJiEiL4/mQ12qvKDT111uXyq7Y6M8jWTjWzvkPomyK0Jj/n6Irv/jnv1JTSO/O1bSP4CWSw3VIXLRiU+M5VZt0ofQbTdLlSoKm2FX1xNKWtJiMfOFEA5i960wUAAA==) format('woff2');
}

:root {
  --encre: #111827;
  --encre-douce: #4b5563;
  --fond: #ffffff;
  --fond-doux: #f7f7f5;
  --trait: #e5e7eb;
  --accent: #9a3412;
  --rayon: 6px;
  --serif: 'Serif Titres', Georgia, 'Times New Roman', serif;
  --sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  --largeur: 68rem;

  /* Design system v2 -- troisieme surface (encre), reservee aux bandeaux de
     chiffres, jamais plus de deux par page (spec du 13/09, section 4.1).
     --fond et --fond-doux existent deja ci-dessus : meme role, pas de second
     nom pour la meme chose. --sur-encre(-doux) est le texte pose sur
     --fond-encre -- ne pas confondre avec --encre (couleur du texte) ni avec
     --encre-douce (texte attenue sur les surfaces claires), qui restent
     inchanges. Contrastes verifies : sur-encre/fond-encre 16,98:1,
     sur-encre-doux/fond-encre 11,95:1 (AA >= 4,5:1 largement tenu). */
  --fond-encre: #111827;
  --sur-encre: #f9fafb;
  --sur-encre-doux: #cbd5e1;

  /* Echelle de graphique : ordonnee, du plus clair au plus sombre. */
  --graphe-1: #cbd5e1;
  --graphe-2: #94a3b8;
  --graphe-3: #64748b;
  --graphe-4: #475569;
  --graphe-5: #334155;

  /* Incertitude : l'ambre ne porte JAMAIS seule l'information -- elle
     accompagne une hachure et un libelle explicite (voir viz.mjs). Contraste
     verifie : 5,02:1 sur --fond, 4,84:1 sur #fffbeb (AA >= 4,5:1 tenu). */
  --signal-incertain: #b45309;

  --ombre-carte: 0 1px 2px rgba(17, 24, 39, .06), 0 4px 12px rgba(17, 24, 39, .04);
}

/* Reinitialisation minimale */
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
/* Un mot insecable trop long (URL, reference de marche public sans espace)
   ne doit jamais faire deborder la page horizontalement sur mobile. Le
   tableau est deja protege par .table-enveloppe ; ceci protege le texte
   libre (paragraphes, titres, cartes de chiffres). */
body {
  margin: 0;
  font-family: var(--sans);
  color: var(--encre);
  background: var(--fond);
  line-height: 1.65;
  overflow-wrap: anywhere;
}
img, svg { max-width: 100%; height: auto; }
a { color: var(--accent); }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

h1, h2, h3 {
  font-family: var(--serif);
  font-weight: 700;
  line-height: 1.15;
  letter-spacing: -0.01em;
  color: var(--encre);
}

/* Conteneur editorial : une seule largeur de lecture, jamais de debordement */
.contenu {
  max-width: var(--largeur);
  margin: 0 auto;
  padding-inline: 1.25rem;
}

/* En-tete : collant en desktop, statique sous 900px (pas de JS pour un menu deroulant) */
.tete {
  position: sticky;
  top: 0;
  z-index: 10;
  background: var(--fond);
  border-bottom: 1px solid var(--trait);
}
.tete__interieur {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 0.4rem 1.5rem;
  padding-block: 0.5rem;
}
.marque {
  font-family: var(--serif);
  font-weight: 700;
  font-size: 1.2rem;
  color: var(--encre);
  text-decoration: none;
  white-space: nowrap;
}
.marque__tld { color: var(--encre-douce); font-weight: 400; }

/* Navigation : liens propres, zones tactiles >= 44px */
.nav { display: flex; flex-wrap: wrap; column-gap: 0.25rem; row-gap: 0.25rem; }
.nav a {
  display: inline-flex;
  align-items: center;
  padding: 0.75rem 0.6rem;
  min-height: 44px;
  color: var(--encre);
  text-decoration: none;
  font-size: 0.95rem;
}
.nav a[aria-current='page'] { box-shadow: inset 0 -2px 0 var(--accent); font-weight: 600; }
.nav--pied a { color: var(--encre-douce); }

/* Hero editorial */
.hero { padding-block: 3rem 2rem; border-bottom: 1px solid var(--trait); }
.hero h1 { font-size: clamp(1.75rem, 1.2rem + 2vw, 2.75rem); margin: 0 0 0.75rem; }
.chapo { font-size: 1.15rem; color: var(--encre-douce); max-width: 42rem; margin: 0; }

/* Blocs de section : densite assumee, alternance de fond pour rythmer la lecture */
.bloc { padding-block: 3.5rem; }
.bloc--clair { background: var(--fond); }
.bloc--doux { background: var(--fond-doux); }
.bloc h2 { font-size: 1.5rem; margin-top: 0; }

/* Chiffres : toujours en tabular-nums, montants comme effectifs */
.chiffre, td.chiffre, th.chiffre {
  font-variant-numeric: tabular-nums;
  font-feature-settings: 'tnum' 1;
}

/* Tableaux : premiere classe, jamais en note de bas de page.
   Le debordement se resout DANS l enveloppe, jamais sur la page. */
.table-enveloppe { overflow-x: auto; }
table {
  width: 100%;
  min-width: 32rem;
  border-collapse: collapse;
  font-variant-numeric: tabular-nums;
}
caption { text-align: left; padding-bottom: 0.5rem; color: var(--encre-douce); font-size: 0.9rem; }
th, td { text-align: left; padding: 0.6rem 0.75rem; border-bottom: 1px solid var(--trait); white-space: nowrap; }
th { font-weight: 600; }

/* Cartes de chiffres : la valeur porte le corps de la page, l effectif et la
   date de releve l accompagnent toujours, visiblement, jamais en footnote. */
.cartes {
  display: grid;
  /* minmax(0, 1fr), pas 1fr seul : sans le 0, un item de grille garde une
     taille minimale basee sur son contenu non coupable et peut deborder. */
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1.5rem;
  margin-block: 1.5rem;
}
.carte {
  min-width: 0;
  border: 1px solid var(--trait);
  border-radius: var(--rayon);
  padding: 1.25rem 1.5rem;
  background: var(--fond);
}
.carte__libelle {
  display: block;
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--encre-douce);
  margin-bottom: 0.4rem;
}
.carte__valeur {
  display: block;
  font-family: var(--serif);
  font-weight: 700;
  font-size: 2rem;
  line-height: 1.1;
  color: var(--encre);
  font-variant-numeric: tabular-nums;
}
.carte__pied {
  display: block;
  margin-top: 0.5rem;
  font-size: 0.85rem;
  color: var(--encre-douce);
  font-variant-numeric: tabular-nums;
}
.carte__note {
  display: block;
  margin-top: 0.35rem;
  font-size: 0.8rem;
  font-style: italic;
  color: var(--encre-douce);
}

/* Valeur non publiable : jamais un zero silencieux, un tiret assume */
.absent { color: var(--encre-douce); font-style: italic; }

/* Listes "piliers" : navigation vers des pages filles ou soeurs, chaque
   entree un lien (ou un <strong> pour une page a paraitre) suivi d une
   description en prose -- posee par tools/layout.mjs (listeFichiersDonnees,
   utilisee par /methodologie et /prix/observatoire) et par les pages
   accueil, /prix, /404 et /etudes. Nettoyage final, point 6 : cette classe
   n avait ici aucune regle, rendue en simple liste a puces du navigateur --
   du HTML pose hors du design system. Meme traitement que .carte (fond
   blanc, contour, rayon) : verifie deja sur un bloc --doux comme sur un
   bloc --clair (.cartes dans la section "Les trois indices" de l accueil). */
.piliers {
  list-style: none;
  display: grid;
  gap: 0.75rem;
  margin: 1.5rem 0;
  padding: 0;
}
.piliers li {
  border: 1px solid var(--trait);
  border-radius: var(--rayon);
  padding: 0.9rem 1.1rem;
  background: var(--fond);
}
.piliers a { font-weight: 600; }

/* Pied de page */
.pied {
  border-top: 1px solid var(--trait);
  margin-top: 3rem;
  padding-block: 2rem;
  background: var(--fond-doux);
  font-size: 0.9rem;
  color: var(--encre-douce);
}
.pied__mentions { margin-top: 1rem; }
.pied__mentions a { color: inherit; }

/* Un seul point de rupture : sous 900px, la mise en page se replie en une
   colonne et l en-tete perd son comportement collant (pas de JS ici pour un
   menu deroulant, donc pas de header flottant qui masquerait du contenu). */
@media (max-width: 900px) {
  .tete { position: static; }
  .cartes { grid-template-columns: minmax(0, 1fr); }
}

@media print {
  .tete, .pied, .nav { display: none; }
  a { color: inherit; text-decoration: underline; }
  .table-enveloppe { overflow: visible; }
  body { background: #fff; color: #000; }
}

/* ======================================================================
   Design system v2 -- figures SVG (tools/viz.mjs), surface d'encre,
   cartes d'indice et petits composants editoriaux (spec du 13/09).
   ====================================================================== */

/* -- Troisieme surface (encre) -------------------------------------------
   Tache 11 : deux points d'ancrage la posent -- une <section> de gabarit
   (`section({fond:'encre'})`, classe `bloc--encre` deja produite par
   tools/layout.mjs) qui porte bandeauChiffre() sur /prix, et le hero de
   l'accueil (`page({heroSombre:true})`, classe `hero--encre`). Meme surface,
   deux conteneurs differents -- d'ou le regroupement de selecteurs plutot
   que deux blocs qui repeteraient les memes regles (cf. les cinq
   duplications deja corrigees sur ce plan). Jamais plus de deux par page :
   l'accueil porte son hero, /prix porte sa section 'reponse', aucune page
   ne porte les deux. */
.bloc--encre, .hero--encre {
  background: var(--fond-encre);
  background-image: linear-gradient(180deg, #1f2937 0%, var(--fond-encre) 100%);
  color: var(--sur-encre);
}
/* padding-block : uniquement le bloc de section -- le hero garde le rythme
   vertical de `.hero` (3rem/2rem), deja coherent sur les sept pages. */
.bloc--encre { padding-block: 2.5rem; }
/* Bordure claire de `.hero` invisible/deplacee sur fond sombre : une ligne
   presque transparente separe quand meme le hero de la section suivante. */
.hero--encre { border-bottom-color: rgba(255, 255, 255, .12); }
/* h1/h2 : la regle de base (h1,h2,h3{color:var(--encre)}) est un
   selecteur d'element, plus specifique qu'un heritage de couleur depuis le
   conteneur -- sans cette ligne, les titres resteraient noirs sur fond
   sombre. Meme raisonnement pour .chapo et .absent ci-dessous : ce sont
   des classes qui posent deja leur propre couleur ailleurs dans ce fichier. */
.bloc--encre h2, .hero--encre h1 { color: var(--sur-encre); }
.hero--encre .chapo { color: var(--sur-encre-doux); }
/* .absent (marqueur d'absence) : reste en italique -- jamais la couleur
   seule -- mais sa couleur claire sur surfaces claires (--encre-douce)
   deviendrait illisible ici (contraste verifie, voir task-11-report.md). */
.bloc--encre .absent, .hero--encre .absent { color: var(--sur-encre-doux); }
/* Rouge clair choisi pour son contraste sur --fond-encre (9,35:1, AA tenu)
   -- pas le --accent editorial, illisible sur fond sombre. */
.bloc--encre a, .hero--encre a { color: #fca5a5; }

/* -- Bandeau de chiffres (bandeauChiffre(), tools/layout.mjs) ------------
   Fragment nu (sans wrapper .contenu ni classe de conteneur propre --
   voir le commentaire de bandeauChiffre() sur le desalignement que
   causait un second .contenu imbrique) : c'est l'appelant qui pose
   bloc--encre sur la <section> englobante (voir plus haut), qui porte
   deja son propre .contenu. Ces regles ne stylent que les elements
   internes, jamais un fond. */
.bandeau__libelle {
  color: var(--sur-encre-doux);
  font-size: .9rem;
  letter-spacing: .04em;
  text-transform: uppercase;
  margin: 0 0 .25rem;
}
.bandeau__valeur {
  color: var(--sur-encre);
  font-family: var(--serif);
  font-size: clamp(2.5rem, 1.8rem + 3vw, 4rem);
  line-height: 1.05;
  margin: 0;
  font-variant-numeric: tabular-nums;
}
.bandeau__pied { color: var(--sur-encre-doux); font-size: .9rem; margin: .5rem 0 0; }

/* -- Cartes d'indice ---------------------------------------------------- */
.carte--indice { box-shadow: var(--ombre-carte); position: relative; }
.carte--indice::before {
  content: '';
  position: absolute; inset: 0 0 auto 0; height: 1px;
  background: rgba(255, 255, 255, .9);
  border-radius: var(--rayon) var(--rayon) 0 0;
}
/* Scope a .carte--indice : .carte__valeur seul est deja consomme par
   toutes les cartes ordinaires du site (accueil, page prix, cout au mois,
   maintenance, indice de tension -- cf. tools/pages/*.mjs). Une regle non
   scopee ferait passer leur valeur de 2rem fixe a ce clamp fluide, jusqu'a
   +60% en desktop, sur des pages qui n'ont rien demande. La specificite du
   descendant suffit a gagner sur la regle de base sans dependre de l'ordre
   du fichier ; on ne redeclare donc que ce qui differe reellement pour les
   cartes d'indice (le reste -- font-family, font-weight, color,
   font-variant-numeric -- vient deja de la regle de base). */
.carte--indice .carte__valeur {
  font-size: clamp(2rem, 1.4rem + 2.4vw, 3.25rem);
  line-height: 1.05;
  margin: .25rem 0 .5rem;
  /* Largeur reservee : le compteur anime de l'ilot (tache 11) remplace le
     contenu de ce bloc pendant une seconde. Sans reservation, la page
     bougerait au chargement -- CLS non nul, recette en echec. */
  min-height: 1.1em;
}
.carte__quartiles {
  display: flex; flex-wrap: wrap; gap: .25rem 1rem;
  font-size: .85rem; color: var(--encre-douce);
  font-variant-numeric: tabular-nums;
  margin: .5rem 0 0;
}

/* -- Figures -------------------------------------------------------------
   Contrat tenu ici pour les classes emises par tools/viz.mjs : .viz porte
   le cadre SVG (svg()), les .viz__* stylent les elements internes.
   Aucune regle .viz__marque nue : viz.mjs n'emet que les modificateurs
   --mediane / --quartile (une classe de base a cote ferait compter chaque
   marqueur deux fois par un simple grep du nom -- voir le commentaire de
   viz.mjs). .viz--histogramme, .viz--barres et .viz--jauge restent des
   points d'accroche sans regle dediee : rien a styler sur le cadre au-dela
   de .viz. Correction finale, point 9 (mineur) : .viz--compact n'appartient
   plus a cette liste -- ce commentaire l'y affirmait alors que sa propre
   regle dediee est ecrite vingt lignes plus bas (`.viz--compact { max-width:
   280px; }`), un desaccord entre le commentaire et le code qu'il decrit. */
.figure { margin: 1.5rem 0; }
.figure figcaption { font-size: .9rem; color: var(--encre-douce); margin-top: .5rem; }
.figure__repli { margin-top: .5rem; font-size: .9rem; }
.figure__repli summary {
  cursor: pointer; min-height: 44px; display: flex; align-items: center;
  color: var(--accent);
}
.viz { display: block; width: 100%; height: auto; }
/* Tache 11 : etait 120px -- mesure a l'ecran, une carte d'indice
   (.carte--indice) porte entre 285px (grille 3 colonnes, >=901px) et
   302px (colonne unique, <=900px) de largeur utile une fois son padding
   retire. La figure se lisait comme une decoration dans le vide plutot
   que comme la donnee (constat du 13/09) -- 280px la laisse occuper
   quasiment toute cette largeur, aux deux points de rupture, sans jamais
   la deborder (min(100%, 280px) via .viz{width:100%}). Le viewBox SVG
   reste 120x28 (tools/viz.mjs, teste) : c'est le rendu CSS qui grossit,
   pas les coordonnees internes -- la hauteur suit proportionnellement
   (~65px a 280px de large), sans rien changer cote JS/SVG. */
.viz--compact { max-width: 280px; }
/* :not(--incertaine) et non pas .viz__barre tout court : une regle de fill
   sur la base recouvrirait toujours l'attribut de presentation
   fill="url(#h-...)" que barres() pose sur la barre sous plancher (une
   declaration CSS l'emporte sur un attribut de presentation SVG, quel que
   soit l'ordre) -- la hachure disparaitrait et une barre grise pleine
   largeur se lirait comme une valeur mesuree au maximum, pire que la
   couleur seule. Le modificateur --incertaine ne pose toujours aucun fill,
   seulement le contour : c'est ce silence qui laisse le motif hachure du
   SVG reprendre la main. */
.viz__barre:not(.viz__barre--incertaine) { fill: var(--graphe-3); }
.viz__barre--incertaine { stroke: var(--signal-incertain); stroke-width: 1; }
.viz__hachure { stroke: var(--signal-incertain); stroke-width: 1.5; }
.viz__bande { stroke: var(--signal-incertain); stroke-width: 1; }
.viz__marque--mediane { stroke: var(--accent); stroke-width: 2; }
.viz__marque--quartile { stroke: var(--graphe-5); stroke-width: 1; stroke-dasharray: 3 3; }
.viz__aiguille { stroke: var(--accent); stroke-width: 3; }
.viz__parite { stroke: var(--graphe-5); stroke-width: 1.5; }
.viz__regle { stroke: var(--trait); stroke-width: 2; }
.viz__libelle, .viz__valeur, .viz__axe text, .viz__vide {
  font-family: var(--sans); font-size: 13px; fill: var(--encre-douce);
}
.viz__valeur { fill: var(--encre); font-variant-numeric: tabular-nums; }
/* Correction finale, point 6 : ce `font-size: 13px` est en UNITES DE VIEWBOX,
   pas en pixels CSS -- une figure pleine (.viz--histogramme, .viz--barres,
   .viz--jauge, viewBox 640 de large) qui rend a ~350px dans la colonne
   editoriale d'un telephone (390px d'ecran, moins le padding-inline de
   .contenu) subit un facteur d'echelle de ~350/640 = 0,55 : le texte rend a
   ~7px CSS reels, illisible -- mesure a l'ecran en 390px (recette mobile),
   pas seulement au calcul. Sur desktop (>=1130px, colonne ~1048px), le
   meme texte rend a ~21px, deja lisible : le defaut n'est donc PAS dans la
   valeur de base, il est dans son comportement sous un ecran etroit.
   Alternative envisagee et ecartee : une taille non mise a l'echelle
   (`vector-effect` ne couvre que les traits, pas le texte -- aucune
   propriete standard n'existe pour un texte SVG a taille fixe en pixels
   CSS quel que soit le viewBox). Solution retenue : une surcharge sous
   480px (repli phone standard), qui monte la taille en unites de viewBox --
   24 au lieu de 13 -- pour compenser precisement ce facteur d'echelle :
   24 * 0,55 =~ 13px CSS a 390px, 24 * 0,6875 (borne haute de la
   media query, ~440px de colonne) =~ 16,5px CSS. Le desktop n'est pas
   touche : cette regle ne s'applique que sous 480px de VIEWPORT (pas de
   conteneur), un point de rupture distinct du seul autre du site (900px,
   deja utilise pour la grille de cartes) car les deux problemes ne
   partagent pas le meme domaine de largeur utile. */
@media (max-width: 480px) {
  .viz__libelle, .viz__valeur, .viz__axe text, .viz__vide { font-size: 24px; }
}
/* Le libelle "sous le plancher" de barres() (tools/viz.mjs) est pose PAR-DESSUS
   le rectangle hachure, jamais a cote -- sans halo, les diagonales de la
   hachure traversent les lettres et le texte se lit comme barre. paint-order
   inverse l'ordre de peinture (le contour d'abord, le remplissage ensuite) :
   chaque lettre recoit un halo qui la detache du motif, sans l'epaissir par
   l'exterieur comme le ferait un stroke pose apres coup. La hachure elle-meme
   n'est pas touchee -- elle reste pleine largeur, c'est elle qui empeche la
   barre de se lire comme une valeur mesuree courte (regle "jamais la couleur
   seule"). Halo de la couleur du fond du bloc qui porte ces deux figures
   (fond: 'doux') : sur --fond (blanc pur), l'ecart avec --fond-doux est
   imperceptible. */
.viz__valeur--incertaine {
  fill: var(--signal-incertain);
  stroke: var(--fond-doux);
  stroke-width: 3px;
  paint-order: stroke fill;
}

/* -- Mention de plancher -------------------------------------------------
   Correction finale, point 2 : le filet editorial a label (.filet) est
   retire ici -- construit, style et teste depuis la tache 6, il n'a jamais
   eu d'appelant reel dans les sept pages. Code mort, retire avec son
   composant (tools/layout.mjs) et son test. */
.mention-plancher {
  display: inline-flex; align-items: center; gap: .4rem;
  padding: .15rem .5rem; border-radius: var(--rayon);
  background: #fffbeb; color: var(--signal-incertain);
  border: 1px solid currentColor; font-size: .85rem;
}

/* -- Barre de progression de lecture -----------------------------------
   CSS natif : aucun JavaScript, 0 Ko. La ou animation-timeline n'est pas
   supportee, la barre reste a zero et rien n'est casse. */
.progression {
  position: fixed; inset: 0 0 auto 0; height: 3px; z-index: 20;
  transform-origin: 0 50%; transform: scaleX(0);
  background: var(--accent);
}
@supports (animation-timeline: scroll()) {
  .progression {
    animation: progression linear both;
    animation-timeline: scroll(root block);
  }
  @keyframes progression { to { transform: scaleX(1); } }
}
@media (prefers-reduced-motion: reduce) {
  .progression { display: none; }
}

/* ======================================================================
   Bandeau de contact (tache 14, plan du 12/09 : collecte de leads).
   Pose une seule fois en pied de page() (tools/layout.mjs), donc sur
   TOUTES les pages -- aucune media query nouvelle : la grille du
   formulaire (auto-fit/minmax) se replie deja seule sous 640px sans
   qu'aucun point de rupture supplementaire ne soit necessaire, le seul
   point de rupture du site (900px) reste celui de .tete/.cartes.
   ====================================================================== */
.bandeau-contact { margin-top: 2rem; padding-top: 1.5rem; border-top: 1px solid var(--trait); }
.bandeau-contact h2 { font-size: 1.05rem; margin: 0 0 .6rem; color: var(--encre); }
.bandeau-contact__rgpd { max-width: 42rem; font-size: .85rem; }

/* Reveal sans JavaScript : les deux <p id="lead-..."> existent DEJA dans le
   HTML de chaque page (tools/layout.mjs), masques par defaut. La
   redirection 303 de functions/api/lead.js pointe vers l'ancre
   correspondante sur la MEME page -- :target les revele sans script.
   Testable au clavier/lecteur d'ecran comme n'importe quel contenu :
   role="status"/"alert" (deja poses dans le gabarit) l'annoncent. */
.bandeau-contact__reponse {
  display: none;
  margin: 1rem 0 0;
  padding: .75rem 1rem;
  border-radius: var(--rayon);
  font-size: .9rem;
}
#lead-envoye:target { display: block; }
#lead-erreur:target { display: block; }
.bandeau-contact__reponse--ok { background: #ecfdf5; color: #065f46; border: 1px solid #a7f3d0; }
.bandeau-contact__reponse--erreur { background: #fef2f2; color: #991b1b; border: 1px solid #fecaca; }

.form-lead {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: .9rem 1rem;
  margin-top: 1.25rem;
  max-width: 48rem;
}
.form-lead__champ { display: flex; flex-direction: column; gap: .3rem; }
.form-lead__champ--large { grid-column: 1 / -1; }
.form-lead label { font-size: .85rem; color: var(--encre-douce); }
.form-lead input, .form-lead select, .form-lead textarea {
  font: inherit;
  padding: .6rem .7rem;
  border: 1px solid var(--trait);
  border-radius: var(--rayon);
  background: var(--fond);
  color: var(--encre);
}
.form-lead textarea { resize: vertical; min-height: 6rem; }

/* Honeypot (brief, etape 3) : jamais display:none (certains robots
   verifient ce cas precis et l'ignorent) -- hors ecran, comme le motif
   classique "visually-hidden". Un left negatif suffisamment grand ne fait
   pas grossir document.documentElement.scrollWidth (verifie par la
   recette mobile, qui mesure ce debordement sur CHAQUE page) : ni display
   ni la position ne peuvent donc a la fois cacher le champ et casser
   l'invariant "aucun debordement horizontal". */
.form-lead__leurre { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* Bouton : zone tactile >= 44px, meme regle que .nav a -- verifiee par
   tools/recette-mobile.mjs (selecteur etendu a .form-lead__envoyer). */
.form-lead__envoyer {
  grid-column: 1 / -1;
  justify-self: start;
  min-height: 44px;
  padding-inline: 1.75rem;
  font: inherit;
  font-weight: 600;
  color: var(--sur-encre);
  background: var(--accent);
  border: none;
  border-radius: var(--rayon);
  cursor: pointer;
}
.form-lead__envoyer:hover { filter: brightness(1.12); }
