/* GÉNÉRÉ par tools/build-css-bundles.php — NE PAS ÉDITER À LA MAIN.
   Éditer les partials + le barrel source, puis relancer le script. */
/* presseIA — moteur blog public (entrypoint)
   --------------------------------------------
   Stack stable depuis le Lot 4.11 :
   - Bootstrap 5.3.3 allégé (grid + utilities) chargé via CDN dans le layout
   - Tous les composants Bootstrap (.btn, .card, .navbar, .breadcrumb,
     .alert, .form-*) recréés en BEM-light dans les partials components/
   - JS Bootstrap retiré ; navbar mobile et accordion FAQ sont vanilla
     (assets/js/blog/navbar.js et accordion.js)

   Ordre d'import critique : tokens AVANT base, base AVANT layout.

   NE PAS renommer les variables `--blog-*` exposées : surveillées par
   tests/Functional/MediaThemeRenderingTest.php (string-match sur HTML
   rendu, via le bloc inline du layout).
*/

/* Vendor bundlés en tête (base AVANT tokens/composants) — un seul fichier
   render-blocking au lieu de 5. fonts.css / fontawesome ont des @font-face
   url() réécrits par build-css-bundles.php vers la profondeur du bundle. */

/* ==== ./vendor/bootstrap-grid.min.css ==== */
/*!
 * Bootstrap Grid v5.3.3 (https://getbootstrap.com/)
 * Copyright 2011-2024 The Bootstrap Authors
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 */.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}:root{--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.66666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.66666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.66666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.66666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.66666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.33333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.66666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
/*# sourceMappingURL=bootstrap-grid.min.css.map */

/* ==== ./vendor/bootstrap-utilities.min.css ==== */
/*!
 * Bootstrap Utilities v5.3.3 (https://getbootstrap.com/)
 * Copyright 2011-2024 The Bootstrap Authors
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(var(--bs-primary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(var(--bs-secondary-rgb),var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(var(--bs-success-rgb),var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(var(--bs-info-rgb),var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(var(--bs-warning-rgb),var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(var(--bs-danger-rgb),var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(var(--bs-light-rgb),var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(var(--bs-dark-rgb),var(--bs-bg-opacity,1))!important}.link-primary{color:RGBA(var(--bs-primary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-primary-rgb),var(--bs-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(10,88,202,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(10,88,202,var(--bs-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--bs-secondary-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-secondary-rgb),var(--bs-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,94,100,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,94,100,var(--bs-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--bs-success-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-success-rgb),var(--bs-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(20,108,67,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(20,108,67,var(--bs-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--bs-info-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-info-rgb),var(--bs-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(61,213,243,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(61,213,243,var(--bs-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--bs-warning-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-warning-rgb),var(--bs-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(255,205,57,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(255,205,57,var(--bs-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--bs-danger-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-danger-rgb),var(--bs-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(176,42,55,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,42,55,var(--bs-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--bs-light-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-light-rgb),var(--bs-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(249,250,251,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(249,250,251,var(--bs-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--bs-dark-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-dark-rgb),var(--bs-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(26,30,33,var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(26,30,33,var(--bs-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb),var(--bs-link-underline-opacity,0.75))!important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x,0) var(--bs-focus-ring-y,0) var(--bs-focus-ring-blur,0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,0.5));text-underline-offset:0.25em;-webkit-backface-visibility:hidden;backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--bs-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:var(--bs-border-width);min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-inline-grid{display:inline-grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:var(--bs-box-shadow)!important}.shadow-sm{box-shadow:var(--bs-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--bs-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--bs-focus-ring-color:rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color:rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color:rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color:rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color:rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color:rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color:rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color:rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-black{--bs-border-opacity:1;border-color:rgba(var(--bs-black-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--bs-success-text-emphasis)!important}.text-info-emphasis{color:var(--bs-info-text-emphasis)!important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis)!important}.text-light-emphasis{color:var(--bs-light-text-emphasis)!important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis)!important}.link-opacity-10{--bs-link-opacity:0.1}.link-opacity-10-hover:hover{--bs-link-opacity:0.1}.link-opacity-25{--bs-link-opacity:0.25}.link-opacity-25-hover:hover{--bs-link-opacity:0.25}.link-opacity-50{--bs-link-opacity:0.5}.link-opacity-50-hover:hover{--bs-link-opacity:0.5}.link-opacity-75{--bs-link-opacity:0.75}.link-opacity-75-hover:hover{--bs-link-opacity:0.75}.link-opacity-100{--bs-link-opacity:1}.link-opacity-100-hover:hover{--bs-link-opacity:1}.link-offset-1{text-underline-offset:0.125em!important}.link-offset-1-hover:hover{text-underline-offset:0.125em!important}.link-offset-2{text-underline-offset:0.25em!important}.link-offset-2-hover:hover{text-underline-offset:0.25em!important}.link-offset-3{text-underline-offset:0.375em!important}.link-offset-3-hover:hover{text-underline-offset:0.375em!important}.link-underline-primary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-primary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-secondary{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-secondary-rgb),var(--bs-link-underline-opacity))!important}.link-underline-success{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-success-rgb),var(--bs-link-underline-opacity))!important}.link-underline-info{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-info-rgb),var(--bs-link-underline-opacity))!important}.link-underline-warning{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-warning-rgb),var(--bs-link-underline-opacity))!important}.link-underline-danger{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-danger-rgb),var(--bs-link-underline-opacity))!important}.link-underline-light{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-light-rgb),var(--bs-link-underline-opacity))!important}.link-underline-dark{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important;text-decoration-color:rgba(var(--bs-dark-rgb),var(--bs-link-underline-opacity))!important}.link-underline{--bs-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--bs-link-color-rgb),var(--bs-link-underline-opacity,1))!important}.link-underline-opacity-0{--bs-link-underline-opacity:0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity:0}.link-underline-opacity-10{--bs-link-underline-opacity:0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity:0.1}.link-underline-opacity-25{--bs-link-underline-opacity:0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity:0.25}.link-underline-opacity-50{--bs-link-underline-opacity:0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity:0.5}.link-underline-opacity-75{--bs-link-underline-opacity:0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity:0.75}.link-underline-opacity-100{--bs-link-underline-opacity:1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl)!important;border-top-right-radius:var(--bs-border-radius-xxl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-right-radius:var(--bs-border-radius-xxl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl)!important;border-bottom-left-radius:var(--bs-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl)!important;border-top-left-radius:var(--bs-border-radius-xxl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-inline-grid{display:inline-grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
/*# sourceMappingURL=bootstrap-utilities.min.css.map */

/* ==== ./vendor/fonts.css ==== */
/* Polices défaut self-hostées — Inter (corps) + Space Grotesk (titres).
 *
 * Remplace le CSS Google Fonts render-blocking (fonts.googleapis + gstatic) :
 * effondre 2 origines tierces (cf. docs/chantier-perf-mobile-blog.md). Polices
 * VARIABLES (un fichier par famille couvre toutes les graisses via font-weight
 * en plage), sous-ensemble LATIN (U+0000-00FF couvre le français accentué),
 * font-display:swap.
 *
 * Espace de graisses réel des fichiers : Inter 100-900, Space Grotesk 300-700
 * (le 800 demandé jadis en prod n'existait pas → le navigateur retombait déjà
 * sur 700, donc aucun changement de rendu).
 *
 * Un média qui surcharge sa police via MediaVisualIdentity charge SA famille
 * depuis Google (fallback conditionnel dans le <head>) SAUF si elle est aussi
 * self-hostée ici (cf. GoogleFont::isSelfHosted) ; les défauts restent locaux.
 * Régénérer : tools/build-blog-webfonts.sh.
 */
@font-face {
    font-family: "Inter";
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url("../fonts/inter-var-Gz7AlRl.woff2") format("woff2");
}
@font-face {
    font-family: "Space Grotesk";
    font-style: normal;
    font-weight: 300 700;
    font-display: swap;
    src: url("../fonts/space-grotesk-var-Dr-cltI.woff2") format("woff2");
}
/* Police d'override self-hostée (titres éditoriaux) — cf. GoogleFont::isSelfHosted.
   Variable, axe wght 400–900, sous-ensemble latin. */
@font-face {
    font-family: "Playfair Display";
    font-style: normal;
    font-weight: 400 900;
    font-display: swap;
    src: url("../fonts/playfair-display-var-XKXZKVG.woff2") format("woff2");
}


/* ==== ./vendor/fontawesome-subset.css ==== */
/* Font Awesome 6.7.2 Free — SUBSET self-hosté (front blog + thèmes).
 *
 * ⚠ FICHIER GÉNÉRÉ par tools/build-blog-webfonts.sh — NE PAS ÉDITER À LA MAIN.
 * Remplace le CSS + webfonts complets du CDN cdnjs (effondre une origine tierce
 * bloquante, cf. docs/chantier-perf-mobile-blog.md). Périmètre = icônes utilisées
 * sur le front, y compris les dynamiques (ShareChannel). Le backoffice garde le CDN.
 */
@font-face {
    font-family: "Font Awesome 6 Free";
    font-style: normal;
    font-weight: 900;
    font-display: swap;
    src: url("../fonts/fa-subset-solid-OYuctDh.woff2") format("woff2");
}
@font-face {
    font-family: "Font Awesome 6 Free";
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url("../fonts/fa-subset-regular-XcawcwS.woff2") format("woff2");
}
@font-face {
    font-family: "Font Awesome 6 Brands";
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url("../fonts/fa-subset-brands-nnMEswn.woff2") format("woff2");
}
.fa-solid, .fas,
.fa-regular, .far,
.fa-brands, .fab {
    -moz-osx-font-smoothing: grayscale;
    -webkit-font-smoothing: antialiased;
    display: var(--fa-display, inline-block);
    font-style: normal;
    font-variant: normal;
    line-height: 1;
    text-rendering: auto;
}
.fa-solid, .fas { font-family: "Font Awesome 6 Free"; font-weight: 900; }
.fa-regular, .far { font-family: "Font Awesome 6 Free"; font-weight: 400; }
.fa-brands, .fab { font-family: "Font Awesome 6 Brands"; font-weight: 400; }
.fa-solid::before, .fas::before,
.fa-regular::before, .far::before,
.fa-brands::before, .fab::before { content: var(--fa); }
/* Solid (25) */
.fa-arrow-left { --fa: "\f060"; }
.fa-arrow-right { --fa: "\f061"; }
.fa-bookmark { --fa: "\f02e"; }
.fa-check { --fa: "\f00c"; }
.fa-chevron-down { --fa: "\f078"; }
.fa-chevron-left { --fa: "\f053"; }
.fa-chevron-right { --fa: "\f054"; }
.fa-circle-check { --fa: "\f058"; }
.fa-circle-info { --fa: "\f05a"; }
.fa-clock { --fa: "\f017"; }
.fa-envelope { --fa: "\f0e0"; }
.fa-envelope-open { --fa: "\f2b6"; }
.fa-eye { --fa: "\f06e"; }
.fa-handshake { --fa: "\f2b5"; }
.fa-image { --fa: "\f03e"; }
.fa-lightbulb { --fa: "\f0eb"; }
.fa-link { --fa: "\f0c1"; }
.fa-list-ul { --fa: "\f0ca"; }
.fa-magnifying-glass { --fa: "\f002"; }
.fa-paper-plane { --fa: "\f1d8"; }
.fa-pen-to-square { --fa: "\f044"; }
.fa-rss { --fa: "\f09e"; }
.fa-tag { --fa: "\f02b"; }
.fa-triangle-exclamation { --fa: "\f071"; }
.fa-xmark { --fa: "\f00d"; }
/* Brands (5) */
.fa-bluesky { --fa: "\e671"; }
.fa-facebook-f { --fa: "\f39e"; }
.fa-linkedin-in { --fa: "\f0e1"; }
.fa-whatsapp { --fa: "\f232"; }
.fa-x-twitter { --fa: "\e61b"; }

/* ==== ./blog/_tokens.css ==== */
/* presseIA — blog : design tokens
   --------------------------------
   Source unique des variables CSS du moteur blog public.

   3 niveaux :
   1) PRIMITIFS    — palette, typo, espacement, rayons, ombres, breakpoints
   2) SÉMANTIQUES  — text-primary, link, border, surface… (référencent les primitifs)
   3) COMPOSANTS   — card-*, kicker-*, tag-*… (référencent les sémantiques)

   Naming : `--blog-*` (préfixe BEM-light scopé blog, jamais réutilisé sur
   corporate ou admin). Variantes `*-rgb` pour les couleurs structurelles
   utilisées avec alpha (`rgba(var(--blog-x-rgb), 0.15)`).

   Les défauts sont NEUTRES. Les valeurs par média sont injectées
   à l'exécution par App\Service\Theme\ThemeTokenGenerator (Lot 2),
   appelé depuis le layout via la fonction Twig `design_tokens()`.

   Dark mode : tokens définis sous `[data-theme="dark"]` mais inactifs
   (pas de `prefers-color-scheme`, pas d'attribut posé sur <html>).
   Activation future en une ligne JS ou HTML.
*/

:root {
    /* ── 1. PRIMITIFS ────────────────────────────────────────────── */

    /* Palette neutre — base chaude type "blog spécialisé" */
    --blog-color-neutral-0:    #ffffff;
    --blog-color-neutral-50:   #fafaf7;
    --blog-color-neutral-100:  #f4f3ee;
    --blog-color-neutral-200:  #e8e6df;
    --blog-color-neutral-300:  #d3d1c8;
    --blog-color-neutral-500:  #6b7280;
    --blog-color-neutral-700:  #374151;
    --blog-color-neutral-900:  #1f2937;
    --blog-color-neutral-950:  #0f1117;

    /* Accent neutre par défaut : vert sobre. Écrasé par la primaryColor
       du média via le bloc inline du layout (cf. layout.html.twig). */
    --blog-color-accent:        #3d6b48;
    --blog-color-accent-hover:  #2f5238;
    --blog-color-accent-soft:   #eaf1ec;
    --blog-color-kicker:        #8b7355;
    --blog-color-kicker-soft:   #f4ede4;

    /* Tag (couleur catégorie discrète, indépendante de l'accent média) */
    --blog-color-tag-bg:        #f0f4f8;
    --blog-color-tag-text:      #475569;

    /* Sémantique fixe (succès / danger / info / warning) — non thémable,
       codes universels pour pros_cons, callout, et autres signaux
       éditoriaux. Les variantes `*-soft` servent de fond doux pour les
       encadrés. */
    --blog-color-success:       #16a34a;
    --blog-color-danger:        #b91c1c;
    --blog-color-info:          #1d4ed8;
    --blog-color-info-soft:     #e8f0fe;
    --blog-color-warning:       #b45309;
    --blog-color-warning-soft:  #fef3c7;
    --blog-color-success-soft:  #dcfce7;

    /* Triplets RGB pour alpha. Calculés par PHP au Lot 2 quand le
       média a une primaryColor custom. Défauts cohérents avec les
       hex ci-dessus. */
    --blog-color-accent-rgb:        61, 107, 72;
    --blog-color-accent-hover-rgb:  47, 82, 56;
    --blog-color-accent-soft-rgb:   234, 241, 236;
    --blog-color-kicker-rgb:        139, 115, 85;
    --blog-color-ink-rgb:           31, 41, 55;
    --blog-color-line-rgb:          232, 230, 223;
    --blog-surface-page-rgb:        250, 250, 247;  /* = neutral-50, fade gradients */

    /* Typographie — fallbacks neutres
       La font-family réelle est injectée par MediaVisualIdentity.
       Heading par défaut = serif système (cohérent avec la
       direction "blog chaleureux" — Playfair/Fraunces/Cormorant
       pour les 3 médias réels). */
    --blog-font-heading: ui-serif, Georgia, "Times New Roman", serif;
    --blog-font-body:    "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    --blog-font-mono:    ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;

    /* Échelle typographique modulaire (ratio 1.250) */
    --blog-text-xs:    0.75rem;    /* 12px */
    --blog-text-sm:    0.875rem;   /* 14px */
    --blog-text-base:  1rem;       /* 16px */
    --blog-text-lg:    1.125rem;   /* 18px */
    --blog-text-xl:    1.25rem;    /* 20px */
    --blog-text-2xl:   1.5rem;     /* 24px */
    --blog-text-3xl:   1.875rem;   /* 30px */
    --blog-text-4xl:   2.25rem;    /* 36px */
    --blog-text-5xl:   3rem;       /* 48px */
    --blog-text-6xl:   3.75rem;    /* 60px */

    /* Line-heights */
    --blog-leading-tight:   1.15;
    --blog-leading-snug:    1.35;
    --blog-leading-normal:  1.6;
    --blog-leading-relaxed: 1.75;

    /* Letter-spacings */
    --blog-tracking-tight:  -0.02em;
    --blog-tracking-normal: 0;
    --blog-tracking-wide:   0.06em;

    /* Échelle d'espacement (multiples de 4px, étendue) */
    --blog-space-0:   0;
    --blog-space-1:   0.25rem;   /* 4px */
    --blog-space-2:   0.5rem;    /* 8px */
    --blog-space-3:   0.75rem;   /* 12px */
    --blog-space-4:   1rem;      /* 16px */
    --blog-space-5:   1.5rem;    /* 24px */
    --blog-space-6:   2rem;      /* 32px */
    --blog-space-7:   3rem;      /* 48px */
    --blog-space-8:   4rem;      /* 64px */
    --blog-space-9:   6rem;      /* 96px */

    /* Aliases sémantiques d'espacement */
    --blog-space-gutter:     var(--blog-space-4);
    --blog-space-section-y:  var(--blog-space-9);
    --blog-space-stack-sm:   var(--blog-space-3);
    --blog-space-stack-md:   var(--blog-space-5);
    --blog-space-stack-lg:   var(--blog-space-7);

    /* Rayons */
    --blog-radius-xs:    0.25rem;
    --blog-radius-sm:    0.375rem;
    --blog-radius-md:    0.5rem;
    --blog-radius-lg:    0.75rem;
    --blog-radius-xl:    1rem;
    --blog-radius-pill:  9999px;

    /* Ombres */
    --blog-shadow-xs:  0 1px 2px rgba(0, 0, 0, 0.04);
    --blog-shadow-sm:  0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
    --blog-shadow-md:  0 4px 6px rgba(0, 0, 0, 0.05), 0 2px 4px rgba(0, 0, 0, 0.04);
    --blog-shadow-lg:  0 10px 15px rgba(0, 0, 0, 0.06), 0 4px 6px rgba(0, 0, 0, 0.04);

    /* Breakpoints (à utiliser dans @media; pas une propriété custom, juste documentaire) */
    --blog-bp-sm:   576px;
    --blog-bp-md:   768px;
    --blog-bp-lg:   992px;
    --blog-bp-xl:   1200px;
    --blog-bp-xxl:  1400px;

    /* Largeur utile maximum du contenu — tous les containers du site
       plafonnent ici (valeur `xl` Bootstrap par défaut). Les éléments
       full-bleed assumés (fond hero, bandeau coloré, header) gardent
       leur fond pleine largeur mais leur contenu interne reste
       contraint à cette valeur. */
    --blog-container-max:  1140px;


    /* ── 2. SÉMANTIQUES ──────────────────────────────────────────── */

    /* Surfaces */
    --blog-surface-page:      var(--blog-color-neutral-50);
    --blog-surface-elevated:  var(--blog-color-neutral-0);
    --blog-surface-muted:     var(--blog-color-neutral-100);

    /* Texte */
    --blog-text-primary:    var(--blog-color-neutral-900);
    --blog-text-secondary:  var(--blog-color-neutral-700);
    --blog-text-muted:      var(--blog-color-neutral-500);
    --blog-text-onAccent:   var(--blog-color-neutral-0);

    /* Bordures et séparateurs */
    --blog-border:           var(--blog-color-neutral-200);
    --blog-border-strong:    var(--blog-color-neutral-300);

    /* Liens et actions */
    --blog-link:        var(--blog-color-accent);
    --blog-link-hover:  var(--blog-color-accent-hover);

    /* Focus visible (accessibilité) */
    --blog-focus-ring:        0 0 0 3px rgba(var(--blog-color-accent-rgb), 0.35);
    --blog-focus-ring-color:  var(--blog-color-accent);


    /* ── 3. COMPOSANTS ───────────────────────────────────────────── */

    /* Card */
    --blog-card-bg:       var(--blog-surface-elevated);
    --blog-card-border:   var(--blog-border);
    --blog-card-radius:   var(--blog-radius-md);
    --blog-card-padding:  var(--blog-space-5);
    --blog-card-shadow:   var(--blog-shadow-sm);

    /* Kicker (tag catégorie éditorial) */
    --blog-kicker-bg:       var(--blog-color-kicker-soft);
    --blog-kicker-text:     var(--blog-color-kicker);
    --blog-kicker-padding:  var(--blog-space-1) var(--blog-space-2);
    --blog-kicker-radius:   var(--blog-radius-sm);

    /* Tag (hashtag neutre) */
    --blog-tag-bg:        var(--blog-color-tag-bg);
    --blog-tag-text:      var(--blog-color-tag-text);
    --blog-tag-padding:   var(--blog-space-1) var(--blog-space-2);
    --blog-tag-radius:    var(--blog-radius-sm);

    /* Shell article 2 colonnes — contrainte typo + offset sticky.
       `prose-max-width`  : longueur de ligne optimale (~70 caractères).
       `header-height`    : hauteur visible du `.blog-navbar` sticky. Sert
                            au scroll-padding global (ancres cliquées depuis
                            le TOC) et au top du TOC sticky pour qu'il ne se
                            loge pas derrière le header. Calé sur le header
                            COMPACT (1 ligne : padding-block 0.75rem × 2 +
                            logo 2.25rem + border) — c'est celui des pages
                            internes, seules porteuses du TOC/ancres. Le
                            masthead (homepage) est plus haut mais n'a ni TOC
                            ni ancres → sa hauteur n'entre pas en jeu ici.
       `sticky-offset`    : décollement haut du TOC sticky = hauteur du
                            header + un poil d'air. */
    --blog-prose-max-width:  44rem;     /* 704px ≈ 680px + padding-inline */
    --blog-header-height:    4.5rem;
    --blog-sticky-offset:    calc(var(--blog-header-height) + var(--blog-space-3));
}


/* ── 4. DARK MODE (défini, inactif par défaut) ───────────────────── */

[data-theme="dark"] {
    --blog-surface-page:      var(--blog-color-neutral-950);
    --blog-surface-elevated:  #1e293b;
    --blog-surface-muted:     #2a3548;

    --blog-text-primary:      #f1f5f9;
    --blog-text-secondary:    #cbd5e1;
    --blog-text-muted:        #94a3b8;

    --blog-border:            #334155;
    --blog-border-strong:     #475569;

    --blog-card-bg:           var(--blog-surface-elevated);
    --blog-card-border:       var(--blog-border);
    --blog-card-shadow:       0 1px 3px rgba(0, 0, 0, 0.5);
}


/* ==== ./blog/_base.css ==== */
/* presseIA — blog : base
   -----------------------
   Reset moderne minimal, typo de base, focus visible, skip link.

   Scope : tout est sous `.blog-body` pour ne PAS contaminer le
   moteur corporate ou admin qui partagent le même Bootstrap.
   Seules les rares règles `*` (box-sizing) et `html`/`body` sont
   globales — sans effet visuel observable hors blog.
*/

/* ── 1. Reset moderne minimal ────────────────────────────────────── */

*,
*::before,
*::after {
    box-sizing: border-box;
}

html {
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
    scroll-behavior: smooth;
    /* Compense la hauteur du `.blog-navbar` sticky lors d'un saut vers
       une ancre (#anchor) : sinon le heading visé se loge derrière le
       header. S'applique à toutes les ancres du site, y compris celles
       cliquées depuis le TOC sidebar — d'où le placement sur `html`
       plutôt qu'au cas par cas sur chaque heading. */
    scroll-padding-top: var(--blog-header-height);
    /* Pas de fix `overflow-x: hidden` global — masque les vrais bugs
       de débordement plutôt que de les laisser remonter. */
}

body {
    margin: 0;
    min-height: 100vh;
}

/* Médias par défaut */
img,
picture,
video,
canvas,
svg {
    display: block;
    max-width: 100%;
}

/* Form elements héritent la typo (cf. .blog-body) */
input,
button,
textarea,
select {
    font: inherit;
    color: inherit;
}


/* ── 2. Typographie blog ─────────────────────────────────────────── */

.blog-body {
    font-family: var(--blog-font-body);
    font-size: var(--blog-text-base);
    line-height: var(--blog-leading-normal);
    color: var(--blog-text-primary);
    background: var(--blog-surface-page);
    /* Antialiasing macOS/iOS pour rendu serif plus lisible */
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

.blog-body h1,
.blog-body h2,
.blog-body h3,
.blog-body h4,
.blog-body h5,
.blog-body h6,
.blog-body .display-1,
.blog-body .display-2,
.blog-body .display-3,
.blog-body .display-4,
.blog-body .display-5,
.blog-body .display-6,
.blog-brand {
    font-family: var(--blog-font-heading);
    font-weight: 700;
    letter-spacing: var(--blog-tracking-tight);
    color: var(--blog-text-primary);
    line-height: var(--blog-leading-tight);
}

/* Liens — comportement par défaut sobre, l'accent vient au hover */
.blog-body a {
    color: var(--blog-link);
    text-decoration-thickness: 1px;
    text-underline-offset: 2px;
}

.blog-body a:hover {
    color: var(--blog-link-hover);
}


/* ── 3. Focus visible (accessibilité) ────────────────────────────── */

/* Reset Bootstrap par-dessus : on garde un focus visible uniforme,
   pas le box-shadow Bootstrap par défaut (qui dépendrait de --bs-primary).
   `:focus-visible` cible clavier, jamais souris. */
.blog-body :focus {
    outline: none;
}

.blog-body :focus-visible {
    outline: 2px solid var(--blog-focus-ring-color);
    outline-offset: 2px;
    border-radius: var(--blog-radius-xs);
}


/* ── 4. Skip link (accessibilité) ────────────────────────────────── */

.blog-skip-link {
    position: absolute;
    left: -9999px;
    top: 0;
    z-index: 1000;
    padding: var(--blog-space-2) var(--blog-space-4);
    background: var(--blog-text-primary);
    color: var(--blog-surface-elevated);
    text-decoration: none;
    border-radius: 0 0 var(--blog-radius-sm) 0;
}

.blog-skip-link:focus,
.blog-skip-link:focus-visible {
    left: 0;
}


/* ── 5. Override container Bootstrap ─────────────────────────────── */

/* Le site plafonne à 1140px de largeur utile (valeur `xl` Bootstrap).
   Bootstrap pose `max-width: 1320px` sur `.container-xl` au breakpoint
   xxl (≥1400px) — on annule cette montée. Les éléments full-bleed
   (fond hero, bandeau, header) gardent leur fond pleine largeur, mais
   leur contenu interne reste contraint via ce container. */
.container,
.container-sm,
.container-md,
.container-lg,
.container-xl,
.container-xxl {
    max-width: var(--blog-container-max);
}


/* ==== ./blog/_layout.css ==== */
/* presseIA — blog : layout
   -------------------------
   Containers, sections et helpers de mise en page propres au blog.

   Pas de duplication de la grille Bootstrap — on garde
   `.row`/`.col-*` du `bootstrap-grid.min.css` chargé en parallèle.
   Ce partial ajoute seulement les conteneurs et la rythmique
   verticale "blog spécialisé".
*/

/* ── Containers ─────────────────────────────────────────────────── */

.blog-container {
    width: 100%;
    margin-inline: auto;
    padding-inline: var(--blog-space-gutter);
    max-width: var(--blog-container-max);
}

.blog-container-narrow {
    width: 100%;
    margin-inline: auto;
    padding-inline: var(--blog-space-gutter);
    /* Largeur de lecture confortable pour le corps d'article */
    max-width: 44rem;
}

.blog-container-prose {
    width: 100%;
    margin-inline: auto;
    padding-inline: var(--blog-space-gutter);
    /* Variante un peu plus large pour les pages éditoriales avec sidebar */
    max-width: 56rem;
}


/* ── Sections (rythmique verticale) ─────────────────────────────── */

.blog-section {
    /* Compression desktop : space-9 (96px) creusait des trous entre les
       sections homepage face au rythme typo plus serré (titres réduits
       d'un cran, hero compact). On atterrit sur space-7 (48px) pour rester
       sur la posture "manuel utile / service" sobre. Mobile reste sur
       --blog-space-gutter (cf. override ci-dessous). */
    padding-block: var(--blog-space-7);
}

.blog-section-compact {
    padding-block: var(--blog-space-5);
}

/* Mobile : 96px top/bottom (space-9) écrasait l'écran face aux 16px de
   gutter horizontal. On aligne sur le gutter pour une respiration
   cohérente avec les marges latérales. Desktop garde les 96px. */
@media (max-width: 767.98px) {
    .blog-section {
        padding-block: var(--blog-space-gutter);
    }
}

/* Séparateur sobre entre sections (alternative au border ou à
   l'alternance de surfaces) */
.blog-section + .blog-section {
    border-top: 1px solid var(--blog-border);
}


/* ── Helpers de mise en page ────────────────────────────────────── */

/* Stack vertical avec espacement homogène entre enfants. Variante
   modeste pour les zones où Bootstrap ne fournit pas l'utilitaire
   exact (gap homogène, sans gérer une grille). */
.blog-stack > * + * {
    margin-top: var(--blog-space-stack-md);
}

.blog-stack-sm > * + * {
    margin-top: var(--blog-space-stack-sm);
}

.blog-stack-lg > * + * {
    margin-top: var(--blog-space-stack-lg);
}


/* ── Section header (titre + lien "tout voir") ──────────────────── */

.blog-section-header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--blog-space-4);
    margin-bottom: var(--blog-space-5);
}

.blog-section-title {
    font-size: var(--blog-text-2xl);
    margin: 0;
}

/* ==== ./blog/components/_header.css ==== */
/* presseIA — blog : header
   ─────────────────────────
   Navbar sticky du moteur blog. Markup dans `templates/blog/_header.html.twig`.

   100% vanilla : plus de classes Bootstrap .navbar / .navbar-toggler /
   .collapse. Le toggle mobile est porté par `assets/js/blog/navbar.js`
   (data-blog-navbar-toggle + data-blog-navbar-menu).
*/

.blog-navbar {
    position: sticky;
    top: 0;
    z-index: 1020;
    background: var(--blog-surface-elevated);
    border-bottom: 1px solid var(--blog-border);
    padding-block: var(--blog-space-3);
}

.blog-navbar__inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--blog-space-3);
}

/* Brand (marque ou logo image) */
.blog-brand {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-lg);
    font-weight: 700;
    color: var(--blog-text-primary);
    text-decoration: none;
    letter-spacing: var(--blog-tracking-tight);
    margin-right: auto;
}

.blog-brand:hover {
    color: var(--blog-color-accent);
}

.blog-brand-logo {
    height: 2.25rem;
    width: auto;
    display: block;
}

/* Toggle burger mobile : visible < lg, caché ≥ lg */
.blog-navbar__toggle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.5rem;
    height: 2.5rem;
    padding: 0;
    background: transparent;
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    color: var(--blog-text-secondary);
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s, color 0.15s;
}

.blog-navbar__toggle:hover {
    background: var(--blog-surface-muted);
    color: var(--blog-text-primary);
}

.blog-navbar__toggle:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: 2px;
}

.blog-navbar__toggle-icon {
    display: block;
    width: 1.25rem;
    height: 0.1rem;
    background: currentColor;
    position: relative;
}

.blog-navbar__toggle-icon::before,
.blog-navbar__toggle-icon::after {
    content: "";
    position: absolute;
    left: 0;
    width: 100%;
    height: 0.1rem;
    background: currentColor;
}

.blog-navbar__toggle-icon::before { top: -0.45rem; }
.blog-navbar__toggle-icon::after  { top:  0.45rem; }

/* Menu : caché par défaut sur mobile, visible ≥ lg.
   `aria-expanded="true"` sur le toggle ouvre le menu en mobile. */
.blog-navbar__menu {
    display: none;
    flex-basis: 100%;
    flex-grow: 1;
    padding-top: var(--blog-space-3);
    border-top: 1px solid var(--blog-border);
}

.blog-navbar__menu[data-blog-navbar-open] {
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-2);
}

@media (min-width: 992px) {
    /* Commun desktop : le burger disparaît, le menu s'affiche. */
    .blog-navbar__toggle {
        display: none;
    }
    .blog-navbar__menu {
        display: flex !important;
        flex-direction: row;
        align-items: center;
        flex-basis: auto;
    }

    /* ── HOMEPAGE : masthead éditorial (à la The Spruce) ──
       Logo horizontal centré au-dessus, menu centré en dessous, séparés par
       un filet pleine largeur. Le logo a sa propre ligne → largeur
       intrinsèque garantie, jamais comprimé même avec un menu chargé. */
    .blog-navbar--masthead .blog-navbar__inner {
        flex-direction: column;
        align-items: center;
        gap: 0;
    }
    .blog-navbar--masthead .blog-brand {
        margin-right: 0;   /* colonne centrée : plus de push, on centre */
    }
    .blog-navbar--masthead .blog-brand-logo {
        height: 3.25rem;   /* logo horizontal généreux (52px) sur la home */
    }
    .blog-navbar--masthead .blog-navbar__menu {
        justify-content: center;
        width: 100%;
        margin-top: var(--blog-space-3);
        padding-top: var(--blog-space-3);
        border-top: 1px solid var(--blog-border);
        gap: var(--blog-space-2);
    }

    /* ── PAGES INTERNES : header compact ──
       Logo carré inline à gauche, menu poussé à droite, tout sur une ligne
       → on récupère de la hauteur. flex-shrink:0 : le logo ne se comprime
       jamais, même si le menu est chargé. */
    .blog-navbar--compact .blog-navbar__inner {
        flex-wrap: nowrap;
    }
    .blog-navbar--compact .blog-brand {
        flex-shrink: 0;
    }
    .blog-navbar--compact .blog-navbar__menu {
        padding-top: 0;
        margin-top: 0;
        border-top: none;
        gap: var(--blog-space-1);
    }
}

.blog-navbar__nav {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-2);
}

@media (min-width: 992px) {
    .blog-navbar__nav {
        flex-direction: row;
        align-items: center;
        gap: var(--blog-space-1);
    }
    /* Masthead : nav centrée avec la recherche (pas de push).
       Compact : nav poussée à droite, logo carré à gauche. */
    .blog-navbar--compact .blog-navbar__nav {
        margin-left: auto;
    }
}

.blog-navbar__nav-item {
    margin: 0;
}

/* Nav links — kicker discret en petites caps, à la The Spruce */
.blog-nav-link {
    display: inline-block;
    padding: var(--blog-space-2) var(--blog-space-3);
    color: var(--blog-text-secondary);
    font-size: var(--blog-text-sm);
    font-weight: 600;
    letter-spacing: var(--blog-tracking-wide);
    text-transform: uppercase;
    text-decoration: none;
    transition: color 0.15s;
    white-space: nowrap;
}

.blog-nav-link:hover,
.blog-nav-link:focus-visible {
    color: var(--blog-color-accent);
}

.blog-nav-link.active {
    color: var(--blog-color-accent);
}

/* Action search à droite — bouton sobre (mobile : texte + icone dans
   le menu déplié ; desktop ≥ 992px : icone seule sans cadre, override
   plus bas). */
.blog-nav-search {
    display: inline-flex;
    align-items: center;
    gap: var(--blog-space-2);
    padding: var(--blog-space-2) var(--blog-space-3);
    font-size: var(--blog-text-sm);
    font-weight: 500;
    color: var(--blog-text-secondary);
    background: transparent;
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    text-decoration: none;
    transition: background 0.15s, border-color 0.15s, color 0.15s;
}

.blog-nav-search:hover {
    background: var(--blog-surface-muted);
    border-color: var(--blog-border-strong);
    color: var(--blog-text-primary);
}

@media (min-width: 992px) {
    /* Desktop : icone seule, sans cadre. Le label reste dans le DOM
       pour les lecteurs d'écran via le span + l'aria-label du lien. */
    .blog-nav-search {
        gap: 0;
        font-size: var(--blog-text-base);
        border: 0;
        transition: background 0.15s, color 0.15s;
    }

    .blog-nav-search:hover {
        background: transparent;
        border-color: transparent;
        color: var(--blog-color-accent);
    }

    .blog-nav-search__label {
        position: absolute;
        width: 1px;
        height: 1px;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }
}

.blog-nav-search:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: 2px;
}


/* ==== ./blog/components/_breadcrumb.css ==== */
/* presseIA — blog : breadcrumb
   ───────────────────────────────
   Remplace les classes Bootstrap .breadcrumb / .breadcrumb-item.
   Markup attendu : <ol class="blog-breadcrumb"><li class="blog-breadcrumb__item">…</li></ol>
   ou bien <li class="blog-breadcrumb__item blog-breadcrumb__item--active">.
*/

.blog-breadcrumb {
    display: flex;
    flex-wrap: wrap;
    list-style: none;
    margin: 0;
    padding: 0;
    font-size: var(--blog-text-sm);
}

.blog-breadcrumb__item {
    display: inline-flex;
    align-items: center;
    color: var(--blog-text-muted);
}

/* Séparateur "/" inséré avant chaque item sauf le premier */
.blog-breadcrumb__item + .blog-breadcrumb__item::before {
    content: "/";
    margin-inline: var(--blog-space-2);
    color: var(--blog-text-muted);
    opacity: 0.6;
}

.blog-breadcrumb__item a {
    color: var(--blog-text-muted);
    text-decoration: none;
    transition: color 0.15s;
}

.blog-breadcrumb__item a:hover {
    color: var(--blog-color-accent);
    text-decoration: underline;
}

.blog-breadcrumb__item--active {
    color: var(--blog-text-primary);
    font-weight: 500;
}

/* Masqué sur mobile : le fil d'Ariane pèse en hauteur pour peu de valeur sur
   petit écran. Cible les 4 wrappers <nav> (article, auteur, tag, catégorie)
   via leur suffixe de classe commun `__breadcrumb` — on masque tout le nav
   (marge incluse), pas seulement le <ol>. Breakpoint aligné sur le header
   (lg = 992px). Reste dans le DOM → SEO/JSON-LD BreadcrumbList inchangés. */
@media (max-width: 991.98px) {
    [class*="__breadcrumb"] {
        display: none;
    }
}


/* ==== ./blog/components/_btn.css ==== */
/* presseIA — blog : boutons
   ────────────────────────────
   Remplace les classes Bootstrap .btn, .btn-primary, .btn-outline-secondary,
   .btn-sm, .btn-lg pour les éléments interactifs hors composants spécifiques
   (CTA article, footer submit, search submit, etc. qui ont leurs propres styles).

   Variants disponibles :
     .blog-btn                base (md, primary par défaut)
     .blog-btn--outline       contour neutre
     .blog-btn--sm            taille réduite (header search, share aside)
     .blog-btn--lg            taille large (form recherche dédié)
*/

.blog-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--blog-space-2);
    padding: var(--blog-space-3) var(--blog-space-5);
    background: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
    border: 1px solid var(--blog-color-accent);
    border-radius: var(--blog-radius-md);
    font-family: inherit;
    font-size: var(--blog-text-base);
    font-weight: 600;
    line-height: 1.2;
    text-decoration: none;
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s, color 0.15s;
}

.blog-btn:hover {
    background: var(--blog-color-accent-hover);
    border-color: var(--blog-color-accent-hover);
    color: var(--blog-text-onAccent);
}

.blog-btn:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: 2px;
}

.blog-btn:disabled,
.blog-btn--disabled {
    background: var(--blog-surface-muted);
    border-color: var(--blog-border);
    color: var(--blog-text-muted);
    cursor: not-allowed;
}

/* Outline : fond transparent, bordure et texte neutres */
.blog-btn--outline {
    background: transparent;
    color: var(--blog-text-primary);
    border-color: var(--blog-border);
}

.blog-btn--outline:hover {
    background: var(--blog-color-accent-soft);
    border-color: var(--blog-color-accent);
    color: var(--blog-color-accent);
}

/* Tailles */
.blog-btn--sm {
    padding: var(--blog-space-2) var(--blog-space-3);
    font-size: var(--blog-text-sm);
}

.blog-btn--lg {
    padding: var(--blog-space-4) var(--blog-space-6);
    font-size: var(--blog-text-lg);
}


/* ==== ./blog/components/_card.css ==== */
/* presseIA — blog : card générique
   ───────────────────────────────────
   Remplace .card / .card-body Bootstrap pour les blocs sidebar de l'article
   (newsletter aside, "à lire aussi", partage). Les article cards de listing
   ont leur propre composant (_article-card.css).

   Markup attendu :
     <div class="blog-card">
       <div class="blog-card__body">…</div>
     </div>
*/

.blog-card {
    background: var(--blog-surface-elevated);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    overflow: hidden;
}

.blog-card__body {
    padding: var(--blog-space-4);
}

.blog-card__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-base);
    font-weight: 700;
    color: var(--blog-text-primary);
    margin: 0 0 var(--blog-space-3) 0;
    line-height: var(--blog-leading-tight);
}

.blog-card__pitch {
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    margin: 0 0 var(--blog-space-3) 0;
    line-height: var(--blog-leading-normal);
}

/* Stack vertical d'éléments (formulaire newsletter aside, liste partage) */
.blog-card__stack {
    display: grid;
    gap: var(--blog-space-2);
}

.blog-card__stack--lg {
    gap: var(--blog-space-3);
}



/* ==== ./blog/components/_form-control.css ==== */
/* presseIA — blog : form-control
   ─────────────────────────────────
   Remplace les classes Bootstrap .form-control / .form-control-sm.
   Les inputs spécifiques (newsletter, recherche) ont leur propre composant
   stylé (cf. _newsletter-signup.css, _search.css) — ce partial sert pour
   les formulaires hors-flow.
*/

/* Sélecteur dual : `.blog-form-control` pour le markup BEM-light explicite,
   `.blog-body .form-control` pour cibler les inputs rendus par les
   FormType Symfony qui utilisent `bootstrap_5_layout` (la classe
   .form-control est posée par le form_theme, pas par notre markup). */
.blog-form-control,
.blog-body .form-control,
.blog-body .form-select {
    display: block;
    width: 100%;
    padding: var(--blog-space-3) var(--blog-space-4);
    background: var(--blog-surface-elevated);
    color: var(--blog-text-primary);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    font-family: inherit;
    font-size: var(--blog-text-base);
    line-height: var(--blog-leading-normal);
    transition: border-color 0.15s, box-shadow 0.15s;
}

.blog-form-control:focus,
.blog-body .form-control:focus,
.blog-body .form-select:focus {
    outline: none;
    border-color: var(--blog-color-accent);
    box-shadow: 0 0 0 3px rgba(var(--blog-color-accent-rgb), 0.15);
}

.blog-form-control::placeholder,
.blog-body .form-control::placeholder {
    color: var(--blog-text-muted);
}

.blog-form-control--sm {
    padding: var(--blog-space-2) var(--blog-space-3);
    font-size: var(--blog-text-sm);
}

/* Label rendu par les FormType Symfony (.form-label) — typo cohérente */
.blog-body .form-label {
    display: block;
    margin-bottom: var(--blog-space-1);
    color: var(--blog-text-primary);
    font-size: var(--blog-text-sm);
    font-weight: 600;
}


/* ==== ./blog/components/_alert.css ==== */
/* presseIA — blog : alert
   ──────────────────────────
   Remplace les classes Bootstrap .alert, .alert-warning, .alert-success,
   .alert-info. Utilisé pour : bandeau prévisualisation article (admin
   preview), états newsletter de la page status, signalétiques inline.

   Variants : --info (neutre, défaut), --warning (ambre), --success (accent).
*/

.blog-alert {
    padding: var(--blog-space-3) var(--blog-space-4);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    background: var(--blog-surface-elevated);
    color: var(--blog-text-primary);
    font-size: var(--blog-text-base);
    line-height: var(--blog-leading-normal);
}

.blog-alert--warning {
    background: #fef9e7;
    border-color: #f3d97d;
    color: #8a6d10;
}

.blog-alert--success {
    background: var(--blog-color-accent-soft);
    border-color: rgba(var(--blog-color-accent-rgb), 0.4);
    color: var(--blog-color-accent-hover);
}

/* Variante de bandeau pleine largeur, sans bord, pour bannières admin
   (cf. preview banner dans article.html.twig). */
.blog-alert--banner {
    border-radius: 0;
    border-inline: none;
    border-block: 1px solid transparent;
    text-align: center;
    font-weight: 600;
}


/* ==== ./blog/components/_badge.css ==== */
/* presseIA — blog : badges éditoriaux
   ──────────────────────────────────────
   Remplace les classes Bootstrap .badge / .text-bg-primary / .badge-* qui
   ne sont plus chargées depuis la bascule grid+utilities (Lot 4.11).

   Variants disponibles :
     .blog-badge                base neutre (fond muted, texte primary)
     .blog-badge--featured      "À la une" — fond accent média
     .blog-badge--kicker        accent secondaire (palette kicker)
*/

.blog-badge {
    display: inline-flex;
    align-items: center;
    gap: var(--blog-space-1);
    padding: 0.15rem var(--blog-space-2);
    background: var(--blog-surface-muted);
    color: var(--blog-text-primary);
    font-size: var(--blog-text-xs);
    font-weight: 700;
    line-height: 1.4;
    border-radius: var(--blog-radius-sm);
    text-transform: none;
    letter-spacing: 0;
    vertical-align: middle;
}

.blog-badge--featured {
    background: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
}

.blog-badge--kicker {
    background: var(--blog-color-kicker);
    color: var(--blog-text-onAccent);
}


/* ==== ./blog/components/_meta.css ==== */
/* presseIA — blog : meta-article (auteur · temps · date)
   --------------------------------------------------------
   Classe transverse réutilisable dans les sections homepage,
   le hero d'article, les listes verticales — partout où on
   affiche les métadonnées d'un article hors macro `article_card`
   (qui porte son propre `.blog-article-card__meta` pour rester
   localement cohérente).

   Markup attendu :
     <div class="blog-meta">
       <span class="blog-meta__item">Par <strong>{{ name }}</strong></span>
       <span class="blog-meta__sep" aria-hidden="true">·</span>
       <span class="blog-meta__item">{{ reading_time }} min</span>
       …
     </div>

   Le séparateur `·` reste en HTML (aria-hidden) plutôt qu'en
   pseudo-element pour ne pas être lu "point milieu" par les
   screen readers. Cohérent avec `.blog-article-card__meta`.

   Variante `--lg` pour le hero principal d'homepage (taille
   base au lieu de sm, espacement plus généreux).
*/

.blog-meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--blog-space-2) var(--blog-space-3);
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    margin: 0;
    line-height: var(--blog-leading-snug);
}

.blog-meta__item {
    display: inline-flex;
    align-items: center;
    gap: var(--blog-space-1);
}

.blog-meta__item strong {
    font-weight: 600;
    color: var(--blog-text-secondary);
}

.blog-meta__sep {
    color: var(--blog-border-strong);
    user-select: none;
}

.blog-meta--lg {
    font-size: var(--blog-text-base);
    gap: var(--blog-space-3) var(--blog-space-4);
}

/* ==== ./blog/components/_article-card.css ==== */
/* presseIA — blog : article-card
   ────────────────────────────────
   Carte article réutilisable. Rendue par la macro
   `templates/blog/_article_card.html.twig`.

   3 modes :
     .blog-article-card                       standard (3-col, listing principal)
     .blog-article-card.blog-article-card--compact   dense (4-col, rail)
     .blog-article-card.blog-article-card--no-image  sans image (sidebar)

   100% vanilla : plus de classes Bootstrap .card / .card-body. Les
   tokens --blog-card-* portent la cohérence avec les autres surfaces.
*/

.blog-article-card {
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-card-radius);
    overflow: hidden;
    transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
    background: var(--blog-card-bg);
}

.blog-article-card:hover {
    border-color: var(--blog-border-strong);
    box-shadow: var(--blog-shadow-md);
    transform: translateY(-1px);
}

/* Media — radius synchronisé avec celui de la card (overflow hidden ci-dessus) */
.blog-article-card__media {
    border-radius: 0;
    margin: 0;
}

/* Body — padding via token de composant */
.blog-article-card__body {
    padding: var(--blog-card-padding);
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-2);
}

/* Kicker — petites caps en haut de card, écart contrôlé */
.blog-article-card__kicker {
    align-self: flex-start;
    margin: 0;
}

/* Titre — Playfair/Fraunces selon le média, sobre */
.blog-article-card__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-lg);
    font-weight: 700;
    letter-spacing: var(--blog-tracking-tight);
    line-height: var(--blog-leading-snug);
    margin: 0;
    color: var(--blog-text-primary);
}

.blog-article-card__title a {
    color: inherit;
    text-decoration: none;
}

.blog-article-card__title a:hover {
    color: var(--blog-color-accent);
}

/* Meta — petite typo, séparateurs intercalés */
.blog-article-card__meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--blog-space-2);
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    margin-top: auto;  /* pousse meta en bas si card haut variable */
}

.blog-article-card__meta-sep {
    opacity: 0.6;
}

.blog-article-card__meta-author {
    font-weight: 500;
    color: var(--blog-text-secondary);
}

/* ── Modificateur compact (cols=4, rail) ─────────────────────────── */

.blog-article-card--compact .blog-article-card__body {
    padding: var(--blog-space-3);
    gap: var(--blog-space-2);
}

.blog-article-card--compact .blog-article-card__title {
    font-size: var(--blog-text-base);
}

.blog-article-card--compact .blog-article-card__meta {
    font-size: var(--blog-text-xs);
}


/* ── Modificateur sans image (sidebar, mini-cards) ───────────────── */

.blog-article-card--no-image {
    /* Hauteur minimale pour donner un rythme régulier dans une pile de
       mini-cards. La hauteur effective grandit naturellement si le
       contenu déborde de line-clamp (correctif #9 review catalogue). */
    min-height: 8rem;
    display: flex;
    flex-direction: column;
}

.blog-article-card--no-image .blog-article-card__body {
    padding: var(--blog-space-4);
    flex: 1 1 auto;
}

.blog-article-card--no-image .blog-article-card__title {
    font-size: var(--blog-text-base);

    /* line-clamp 3 lignes pour éviter qu'un titre long fasse exploser
       la hauteur d'une mini-card vs ses voisines. La meta reste poussée
       en bas via .blog-article-card__meta { margin-top: auto } qui est
       compatible avec flex column. */
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    line-clamp: 3;
    overflow: hidden;
}


/* ==== ./blog/components/_article-hero.css ==== */
/* presseIA — blog : article-hero
   ────────────────────────────────
   En-tête de la page article (breadcrumb + kicker + titre + signature +
   actions de partage + image hero compacte).
   Markup dans `templates/blog/_article_hero.html.twig`.
*/

.blog-article-hero {
    background: var(--blog-surface-elevated);
    border-bottom: 1px solid var(--blog-border);
    /* Aligné sur `.blog-archive-header` (`space-5` = 24 px) pour que le
       breadcrumb reste à la même hauteur entre page liste et page article. */
    padding-block: var(--blog-space-5);
}

/* Mobile : 32px top/bottom écrase face aux ~12-16px horizontaux du
   container. Aligne sur le gutter pour une respiration cohérente. */
@media (max-width: 767.98px) {
    .blog-article-hero {
        padding-block: var(--blog-space-gutter);
    }
}

/* Breadcrumb — discret, ne vole pas la vedette au titre */
.blog-article-hero__breadcrumb {
    margin-bottom: var(--blog-space-4);
    font-size: var(--blog-text-sm);
}

.blog-article-hero__breadcrumb .breadcrumb {
    margin-bottom: 0;
}

.blog-article-hero__breadcrumb a {
    color: var(--blog-text-muted);
    text-decoration: none;
}

.blog-article-hero__breadcrumb a:hover {
    color: var(--blog-color-accent);
}

/* Kicker + tags — ligne discrète au-dessus du titre */
.blog-article-hero__tags {
    display: flex;
    flex-wrap: wrap;
    gap: var(--blog-space-2);
    margin-bottom: var(--blog-space-4);
}

/* Titre — taille forte (h1 magazine), serif éditorial */
.blog-article-hero__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-2xl);
    font-weight: 700;
    line-height: var(--blog-leading-tight);
    letter-spacing: var(--blog-tracking-tight);
    color: var(--blog-text-primary);
    margin: 0 0 var(--blog-space-5) 0;
}

@media (min-width: 768px) {
    .blog-article-hero__title {
        font-size: var(--blog-text-5xl);
    }
}

/* Byline — avatar + nom + meta + share, sur une ligne grande largeur */
.blog-article-hero__byline {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--blog-space-4);
}

.blog-article-hero__byline-info {
    /* flex-basis: 0 (via shorthand `flex: 1`) plutôt que `auto` : sinon la
       taille hypothétique du bloc = largeur naturelle du nom+meta, et sur
       mobile avatar + byline-info(naturel) + share dépasse le container →
       wrap, l'avatar se retrouve seul sur la ligne 1. Avec basis 0, le
       wrap ne se produit plus dans la paire avatar+author. */
    flex: 1 1 0;
    min-width: 0;
}

.blog-article-hero__author {
    font-weight: 600;
    color: var(--blog-text-primary);
    font-size: var(--blog-text-base);
}

.blog-article-hero__author a {
    color: inherit;
    text-decoration: none;
    transition: color 0.15s;
}

.blog-article-hero__author a:hover {
    color: var(--blog-color-accent);
}

.blog-article-hero__meta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--blog-space-2);
    color: var(--blog-text-muted);
    font-size: var(--blog-text-sm);
    margin-top: var(--blog-space-1);
}

.blog-article-hero__share {
    display: flex;
    gap: var(--blog-space-2);
}

/* Sur mobile, share passe à la ligne sous la paire avatar + byline-info
   pour laisser respirer le nom auteur. Sur desktop (≥768px), reste inline
   en bout de byline — la place ne manque pas. */
@media (max-width: 767.98px) {
    .blog-article-hero__share {
        flex-basis: 100%;
    }
}

/* Conteneur image hero — padding seulement au-dessus (entre l'en-tête
   texte et l'image). L'espace sous l'image est porté par le padding-top
   de `.blog-shell` qui suit, pour éviter le doublon. */
.blog-article-hero__media-wrap {
    padding-block: var(--blog-space-5) 0;
}

/* Image hero compacte — override de .blog-media (aspect-ratio 16/9) pour
   piloter par hauteur, pas par ratio. Posture "manuel utile / service" :
   bande étroite, didactique, l'image n'écrase pas le texte qui suit.
   clamp() : 180px (≤600px viewport) → 30vw fluide → 340px (≥1140px).
   Sélecteur compound .blog-media.blog-article-hero__media nécessaire :
   .blog-media est défini APRÈS l'import _article-hero.css dans blog.css,
   donc à spécificité égale le 16/9 gagnait. */
.blog-media.blog-article-hero__media {
    aspect-ratio: auto;
    height: clamp(180px, 30vw, 340px);
    width: 100%;
}


/* ==== ./blog/components/_article-body.css ==== */
/* presseIA — blog : article-body
   ────────────────────────────────
   Rythme éditorial du corps d'article. Stylise les éléments génériques
   (h2/h3/p/ul/ol) à l'intérieur du conteneur `.blog-article-body`, sans
   toucher aux blocs spéciaux (FAQ, pros_cons, etc.) qui ont leur propre
   partial `_block-<type>.css`.

   Markup dans `templates/blog/_article_body.html.twig`.
*/

.blog-article-body {
    color: var(--blog-text-primary);
    font-size: var(--blog-text-base);
    line-height: var(--blog-leading-relaxed);
    /* Rythme vertical via `gap` plutôt que margin-top entre frères :
       le gap n'est pas court-circuité par les `margin: 0` posés sur p/ul/ol
       en interne, ce qui garantit l'espace même autour des blocs table/faq/cta
       indépendamment de la spécificité CSS. */
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-4);
}

/* Titres internes — rythme magazine (gros saut avant h2, moindre avant h3). */
.blog-article-body h2 {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-2xl);
    font-weight: 700;
    line-height: var(--blog-leading-tight);
    letter-spacing: var(--blog-tracking-tight);
    color: var(--blog-text-primary);
    margin-top: var(--blog-space-7);
    margin-bottom: var(--blog-space-3);
}

.blog-article-body h3 {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-xl);
    font-weight: 700;
    line-height: var(--blog-leading-snug);
    color: var(--blog-text-primary);
    margin-top: var(--blog-space-5);
    margin-bottom: var(--blog-space-2);
}

/* Mobile : space-7 (48px) avant chaque h2 fait des "trous" face au reste
   du rythme vertical compressé. On resserre à space-5 (20px) pour rester
   cohérent avec le gabarit mobile. h3 reste à space-5 → idem en mobile,
   pas de raison de creuser plus que h2. */
@media (max-width: 767.98px) {
    .blog-article-body h2 {
        margin-top: var(--blog-space-5);
    }
}

/* Paragraphes — typographie de lecture longue */
.blog-article-body p {
    margin: 0;
    color: var(--blog-text-primary);
}

.blog-article-body p a {
    color: var(--blog-link);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 2px;
    transition: color 0.15s;
}

.blog-article-body p a:hover {
    color: var(--blog-link-hover);
}

/* Listes — puces et numéros tokenisés */
.blog-article-body ul,
.blog-article-body ol {
    padding-left: var(--blog-space-5);
    margin: 0;
}

.blog-article-body ul li,
.blog-article-body ol li {
    margin-bottom: var(--blog-space-2);
}

.blog-article-body ul li:last-child,
.blog-article-body ol li:last-child {
    margin-bottom: 0;
}

.blog-article-body ul li::marker {
    color: var(--blog-color-accent);
}

.blog-article-body ol li::marker {
    color: var(--blog-text-muted);
    font-weight: 600;
}

/* Footer article — tags + sources + bio auteur, séparés par un filet. */
.blog-article-body__tags {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--blog-space-2);
    margin-top: var(--blog-space-6);
    padding-top: var(--blog-space-4);
    border-top: 1px solid var(--blog-border);
}

@media (max-width: 767.98px) {
    .blog-article-body__tags {
        margin-top: var(--blog-space-4);
    }
}

.blog-article-body__tags-label {
    color: var(--blog-text-muted);
    font-size: var(--blog-text-sm);
}

.blog-article-body__sources {
    margin-top: var(--blog-space-6);
    padding-top: var(--blog-space-4);
    border-top: 1px solid var(--blog-border);
}

.blog-article-body__sources-title {
    font-size: var(--blog-text-xs);
    font-weight: 600;
    letter-spacing: var(--blog-tracking-wide);
    text-transform: uppercase;
    color: var(--blog-text-muted);
    margin: 0 0 var(--blog-space-3) 0;
}

.blog-article-body__sources-list {
    list-style: none;
    margin: 0;
    padding: 0;
    font-size: var(--blog-text-sm);
}

.blog-article-body__sources-list li {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: var(--blog-space-2);
    margin-bottom: var(--blog-space-2);
}

.blog-article-body__sources-list li:last-child {
    margin-bottom: 0;
}

.blog-article-body__source-authority {
    display: inline-block;
    font-size: var(--blog-text-xs);
    font-weight: 600;
    padding: 0.1rem 0.5rem;
    border-radius: var(--blog-radius-sm);
    border: 1px solid transparent;
}

.blog-article-body__source-authority--high {
    background: rgba(var(--blog-color-accent-rgb), 0.1);
    color: var(--blog-color-accent);
    border-color: rgba(var(--blog-color-accent-rgb), 0.25);
}

.blog-article-body__source-authority--medium {
    background: var(--blog-surface-muted);
    color: var(--blog-text-muted);
    border-color: var(--blog-border);
}

.blog-article-body__source-authority--low {
    background: transparent;
    color: var(--blog-text-muted);
    border-color: var(--blog-border);
}

/* Bloc texte de la source (titre + host) — prend l'espace restant
   après le badge d'autorité. */
.blog-article-body__source-body {
    flex: 1 1 auto;
    min-width: 0;
}

.blog-article-body__source-link {
    color: var(--blog-text-primary);
    text-decoration: none;
}

.blog-article-body__source-link:hover {
    color: var(--blog-color-accent);
    text-decoration: underline;
}

.blog-article-body__source-host {
    color: var(--blog-text-muted);
}

/* Bio auteur en fin d'article — card discrète */
.blog-article-body__author-card {
    display: flex;
    gap: var(--blog-space-4);
    margin-top: var(--blog-space-6);
    padding: var(--blog-space-4);
    background: var(--blog-surface-elevated);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
}

@media (max-width: 767.98px) {
    .blog-article-body__author-card {
        margin-top: var(--blog-space-4);
    }
}

.blog-article-body__author-info {
    flex-grow: 1;
    min-width: 0;
}

.blog-article-body__author-name {
    font-weight: 600;
    color: var(--blog-text-primary);
    margin-bottom: var(--blog-space-1);
}

.blog-article-body__author-name a {
    color: inherit;
    text-decoration: none;
    transition: color 0.15s;
}

.blog-article-body__author-name a:hover {
    color: var(--blog-color-accent);
}

.blog-article-body__author-role {
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    margin-bottom: var(--blog-space-2);
}

.blog-article-body__author-bio {
    margin: 0;
    font-size: var(--blog-text-sm);
    color: var(--blog-text-primary);
    line-height: var(--blog-leading-normal);
}


/* Mention juridique (footer article) — rendue conditionnellement par
   `_article_disclaimer.html.twig` quand `article.legalDisclaimer != null`.
   Style sobre : background neutre légèrement teinté, icone discrète,
   sépare visuellement de la prose sans concurrencer le contenu. */
.blog-article-body__disclaimer {
    margin-top: var(--blog-space-6);
    padding: var(--blog-space-4) var(--blog-space-5);
    background: var(--blog-surface-muted);
    border-left: 3px solid var(--blog-border-strong);
    border-radius: var(--blog-radius-sm);
}

.blog-article-body__disclaimer-label {
    font-size: var(--blog-text-xs);
    font-weight: 600;
    letter-spacing: var(--blog-tracking-wide);
    text-transform: uppercase;
    color: var(--blog-text-muted);
    margin: 0 0 var(--blog-space-2) 0;
}

.blog-article-body__disclaimer-text {
    margin: 0;
    font-size: var(--blog-text-sm);
    color: var(--blog-text-secondary);
    line-height: var(--blog-leading-normal);
}

/* Bannière de divulgation IA (dormante — rendue si
   media.identity.aiDisclosureLevel == 'article_banner'). En tête d'article,
   discrète, cohérente avec le disclaimer ci-dessus. */
.ai-disclosure-banner {
    margin-bottom: var(--blog-space-6);
    padding: var(--blog-space-3) var(--blog-space-5);
    background: var(--blog-surface-muted);
    border-left: 3px solid var(--blog-border-strong);
    border-radius: var(--blog-radius-sm);
    font-size: var(--blog-text-sm);
    color: var(--blog-text-secondary);
    line-height: var(--blog-leading-normal);
}

.ai-disclosure-banner a {
    color: inherit;
    text-decoration: underline;
}


/* ==== ./blog/components/_shell.css ==== */
/* presseIA — blog : shell 2 colonnes
   ------------------------------------
   Layout réutilisable porté par `templates/blog/_shell.html.twig` :
   article + sidebar sur desktop (col-lg-8 / col-lg-4), flux vertical
   sous lg.

   Trois principes :
   1. La grille reste pilotée par Bootstrap (`.row` + `.col-lg-*`),
      ce partial n'ajoute que les wrappers blog-* et les contraintes
      typographiques.
   2. La colonne contenu est `col-lg-8` côté grille, mais à l'intérieur
      `.blog-shell__prose` plafonne le texte à ~680px pour respecter
      une longueur de ligne lisible. Le bloc respire à droite avant
      la sidebar.
   3. La sidebar entière n'est PAS sticky — seuls les blocs qui posent
      `data-blog-sticky` le deviennent (le TOC typiquement). Les
      autres blocs (newsletter, related, slot pub) scrollent normalement.

   Margin-block géré au niveau du shell pour aérer avant le footer.
*/

.blog-shell {
    /* Espace haut pour décoller du header de page (archive, hero, auteur…)
       et bas généreux avant le footer. La rythmique reste sur l'axe
       block-end, pour matcher la respiration des autres sections blog. */
    padding-block: var(--blog-space-6) var(--blog-space-7);
}

/* Mobile : resserrage du padding bottom pour rester dans le rythme
   compressé du gabarit mobile (le footer porte sa propre respiration). */
@media (max-width: 767.98px) {
    .blog-shell {
        padding-block: var(--blog-space-gutter);
    }
}

/* Conteneur de la colonne principale — pas de styling propre, juste
   le wrapper de la prose contrainte. */
.blog-shell__main {
    min-width: 0; /* anti-overflow grid : permet aux blocks code/table de scroller */
}

/* Contrainte de longueur de ligne sur le contenu éditorial. S'applique
   à TOUT ce qui est dedans (article body, prose markdown statique…).
   Le margin-inline auto le centre dans la colonne col-lg-8 plus large. */
.blog-shell__prose {
    max-width: var(--blog-prose-max-width);
    margin-inline: 0;
}

/* Sidebar : stack vertical des blocs avec gap homogène. */
.blog-shell__aside {
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-5);
}

/* Blocs sticky dans la sidebar : seul le TOC pose le data attribute.
   La position sticky s'active à partir de lg (en-dessous la sidebar
   passe sous l'article en flux vertical). */
@media (min-width: 992px) {
    .blog-shell__aside [data-blog-sticky] {
        position: sticky;
        top: var(--blog-sticky-offset);
        max-height: calc(100vh - var(--blog-sticky-offset) * 2);
        overflow-y: auto;
    }
}

/* Responsive : sous lg la sidebar prend toute la largeur et tombe sous
   l'article. La gouttière verticale entre sections reste suffisante via
   le `g-5` Bootstrap déjà posé sur la row. Le décalage d'ancre est porté
   par `scroll-padding-top` sur `html` (cf. `_base.css`) — un seul point
   de vérité plutôt qu'un scroll-margin par heading. */


/* ==== ./blog/components/_sidebar.css ==== */
/* presseIA — blog : sidebar shell + blocs sidebar
   --------------------------------------------------
   Styling des blocs qui peuplent la `.blog-shell__aside` (TOC, newsletter,
   related, top articles, ad slot…). Le shell 2-cols et le sticky sont
   portés par `_shell.css` — ce partial style le contenu.

   Tous les blocs sidebar partagent la classe `.blog-sidebar-block` pour
   poser surface/padding/radius cohérents. Variantes par `--<type>`
   pour les surcharges locales. */

/* ── Bloc générique ─────────────────────────────────────────────── */

.blog-sidebar-block {
    background: var(--blog-surface-elevated);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    padding: var(--blog-space-5);
}

.blog-sidebar-block__title {
    font-size: var(--blog-text-base);
    font-weight: 700;
    letter-spacing: var(--blog-tracking-wide);
    text-transform: uppercase;
    color: var(--blog-text-secondary);
    margin: 0 0 var(--blog-space-4) 0;
    padding-bottom: var(--blog-space-3);
    border-bottom: 1px solid var(--blog-border);
}

/* Variantes — newsletter et ad slot retirent le styling card pour
   que le markup interne (newsletter signup, HTML ad) s'imprime sans
   doublon visuel. */
.blog-sidebar-block--newsletter,
.blog-sidebar-block--ad {
    background: transparent;
    border: 0;
    padding: 0;
}


/* ── TOC ────────────────────────────────────────────────────────── */

.blog-toc {
    background: var(--blog-surface-elevated);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    /* Pas de padding ici : le summary porte sa propre zone cliquable. */
}

.blog-toc__details {
    /* Reset native disclosure */
}

.blog-toc__summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--blog-space-3);
    padding: var(--blog-space-4) var(--blog-space-5);
    cursor: pointer;
    list-style: none;
    user-select: none;
    /* Reset arrow indicator natif sur certains browsers */
}
.blog-toc__summary::-webkit-details-marker {
    display: none;
}
.blog-toc__summary::marker {
    display: none;
}

.blog-toc__title {
    display: inline-flex;
    align-items: center;
    gap: var(--blog-space-2);
    font-size: var(--blog-text-base);
    font-weight: 700;
    letter-spacing: var(--blog-tracking-wide);
    text-transform: uppercase;
    color: var(--blog-text-secondary);
}

.blog-toc__chevron {
    color: var(--blog-text-muted);
    font-size: var(--blog-text-sm);
    transition: transform 0.2s ease;
}

.blog-toc__details[open] .blog-toc__chevron {
    transform: rotate(180deg);
}

.blog-toc__list {
    list-style: none;
    margin: 0;
    padding: 0 var(--blog-space-5) var(--blog-space-4) var(--blog-space-5);
    border-top: 1px solid var(--blog-border);
    padding-top: var(--blog-space-3);
}

.blog-toc__item {
    margin: 0;
    padding: 0;
}

.blog-toc__link {
    display: block;
    padding: var(--blog-space-2) var(--blog-space-3);
    color: var(--blog-text-secondary);
    text-decoration: none;
    font-size: var(--blog-text-sm);
    line-height: var(--blog-leading-snug);
    /* 3px réservés dès le base style (border-box) pour que l'arrivée
       en `.is-active` ne rétrécisse pas la zone de texte d'1px — sinon
       les titres à la limite cassent sur 2 lignes au moment où le lien
       devient actif. */
    border-left: 3px solid transparent;
    /* Margin négatif gauche ET droit symétriques : le lien (et son fond
       en `.is-active`) débordent du flux normal de la liste pour donner
       un effet pleine-largeur. Le padding interne identique compense le
       margin pour que la position du texte ne bouge pas. */
    margin-left:  calc(-1 * var(--blog-space-3));
    margin-right: calc(-1 * var(--blog-space-3));
    transition: color 0.15s ease, border-color 0.15s ease;
}

.blog-toc__link:hover {
    color: var(--blog-color-accent);
}

/* État scrollspy actif — posé par `assets/js/blog/toc.js`. Border-left
   3px réservé dès le base style → la bascule en gras élargit la métrique
   du texte mais ne déplace pas la zone, le risque de reflow à 2 lignes
   reste possible sur titres en limite de largeur (compromis assumé :
   on préfère l'emphasis typographique au fond coloré). */
.blog-toc__link.is-active {
    color: var(--blog-color-accent);
    border-left-color: var(--blog-color-accent);
    font-weight: 600;
}

/* Indentation pour H3 (sous-section) */
.blog-toc__item--lvl3 .blog-toc__link {
    padding-left: calc(var(--blog-space-3) + var(--blog-space-4));
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
}


/* ── Related (sidebar article) ──────────────────────────────────── */

.blog-sidebar-related__list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-4);
}

.blog-sidebar-related__link {
    display: grid;
    grid-template-columns: 4.5rem 1fr;
    gap: var(--blog-space-3);
    color: inherit;
    text-decoration: none;
    align-items: start;
}

.blog-sidebar-related__media {
    width: 100%;
    aspect-ratio: 1 / 1;
}

.blog-sidebar-related__body {
    min-width: 0;
}

.blog-sidebar-related__heading {
    font-size: var(--blog-text-sm);
    line-height: var(--blog-leading-snug);
    font-weight: 600;
    margin: 0 0 var(--blog-space-1) 0;
    color: var(--blog-text-primary);
    transition: color 0.15s ease;
}

.blog-sidebar-related__link:hover .blog-sidebar-related__heading {
    color: var(--blog-color-accent);
}

.blog-sidebar-related__meta {
    display: inline-flex;
    align-items: center;
    gap: var(--blog-space-1);
    font-size: var(--blog-text-xs);
    color: var(--blog-text-muted);
}


/* ── Top articles (sidebar archive) ─────────────────────────────── */

.blog-sidebar-top__list {
    list-style: none;
    margin: 0;
    padding: 0;
    counter-reset: blog-sidebar-top;
}

.blog-sidebar-top__item {
    counter-increment: blog-sidebar-top;
    display: grid;
    grid-template-columns: 1.5rem 1fr;
    gap: var(--blog-space-3);
    padding: var(--blog-space-3) 0;
    border-bottom: 1px solid var(--blog-border);
    align-items: baseline;
}

.blog-sidebar-top__item:last-child {
    border-bottom: 0;
    padding-bottom: 0;
}

.blog-sidebar-top__item::before {
    content: counter(blog-sidebar-top);
    color: var(--blog-color-accent);
    font-weight: 700;
    font-size: var(--blog-text-lg);
    line-height: 1;
}

.blog-sidebar-top__link {
    color: var(--blog-text-primary);
    text-decoration: none;
    font-weight: 500;
    font-size: var(--blog-text-sm);
    line-height: var(--blog-leading-snug);
    transition: color 0.15s ease;
}

.blog-sidebar-top__link:hover {
    color: var(--blog-color-accent);
}


/* ── Bio auteur (sidebar) ───────────────────────────────────────── */

.blog-sidebar-author {
    text-align: center;
}

.blog-sidebar-author__avatar {
    width: 5rem;
    height: 5rem;
    margin: 0 auto var(--blog-space-3) auto;
    border-radius: 50%;
    overflow: hidden;
    background: var(--blog-color-accent-soft);
    color: var(--blog-color-accent);
    display: flex;
    align-items: center;
    justify-content: center;
}

.blog-sidebar-author__avatar img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.blog-sidebar-author__initials {
    font-size: var(--blog-text-2xl);
    font-weight: 700;
}

.blog-sidebar-author__name {
    font-size: var(--blog-text-lg);
    margin: 0 0 var(--blog-space-3) 0;
    color: var(--blog-text-primary);
}

.blog-sidebar-author__bio {
    font-size: var(--blog-text-sm);
    text-align: left;
}


/* ── Responsive ─────────────────────────────────────────────────── */

@media (max-width: 991.98px) {
    /* Sous lg, TOC en flux normal — `_shell.css` désactive déjà le sticky.
       Le `<details>` reste fermé par défaut sur mobile pour éviter qu'un
       long TOC pousse l'article vers le bas. */
    .blog-toc__details:not([data-blog-toc-stay-open]) {
        /* Override JS-set state si présent — c'est le JS qui referme au
           load pour mobile (pas de CSS pur possible sur `open`). */
    }
}

/* ==== ./blog/components/_block-quote.css ==== */
/* presseIA — blog : bloc quote
   ───────────────────────────────
   Citation éditoriale (block_type = 'quote'). Filet d'accent à gauche,
   léger fond teinté, citation italique en taille au-dessus du corps,
   attribution sobre en bas.

   Markup dans `templates/blog/blocks/_block.html.twig`.
*/

.blog-block-quote {
    border-left: 3px solid var(--blog-color-accent);
    padding: var(--blog-space-4) var(--blog-space-5);
    background: var(--blog-color-accent-soft);
    border-radius: 0 var(--blog-radius-md) var(--blog-radius-md) 0;
    margin: 0;
}

.blog-block-quote__text {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-lg);
    font-style: italic;
    line-height: var(--blog-leading-snug);
    color: var(--blog-text-primary);
    margin: 0;
}

.blog-block-quote__attribution {
    display: block;
    font-style: normal;
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    margin-top: var(--blog-space-3);
}

.blog-block-quote__author {
    font-weight: 600;
    color: var(--blog-text-primary);
}


/* ==== ./blog/components/_block-table.css ==== */
/* presseIA — blog : bloc table
   ───────────────────────────────
   Tableau éditorial (block_type = 'table'). Wrapper scrollable horizontal
   sur mobile, en-tête appuyé, lignes alternées sobres.

   Markup dans `templates/blog/blocks/_block.html.twig`.
*/

.blog-block-table {
    overflow-x: auto;
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
}

.blog-block-table__table {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--blog-text-sm);
    color: var(--blog-text-primary);
}

/* Légende sémantique <caption> — affichée en tête du tableau, ton sobre.
   Le navigateur la rend au-dessus par défaut (`caption-side: top`) et la
   lie au tableau pour les lecteurs d'écran. */
.blog-block-table__caption {
    caption-side: top;
    text-align: left;
    padding: var(--blog-space-3) var(--blog-space-4);
    font-size: var(--blog-text-sm);
    font-weight: 600;
    color: var(--blog-text-secondary);
    border-bottom: 1px solid var(--blog-border);
}

.blog-block-table__head {
    background: var(--blog-surface-muted);
}

.blog-block-table__head th {
    text-align: left;
    font-weight: 600;
    padding: var(--blog-space-3) var(--blog-space-4);
    border-bottom: 1px solid var(--blog-border);
    white-space: nowrap;
}

/* Plancher de largeur des colonnes. Sans lui, `width: 100%` + `table-layout`
   auto écrasent les colonnes pour tenir dans le conteneur → cellules de prose
   repliées à « 3 mots par ligne », et le wrapper `overflow-x` ci-dessus ne
   scrolle jamais (le tableau ne déborde pas). Avec un plancher, les colonnes
   restent lisibles et un tableau trop large déborde → scroll horizontal propre
   (comportement standard des comparatifs mobiles). */
.blog-block-table__body td {
    padding: var(--blog-space-3) var(--blog-space-4);
    border-bottom: 1px solid var(--blog-border);
    min-width: 7rem;
    overflow-wrap: break-word;
    hyphens: auto;
}

.blog-block-table__head th {
    min-width: 7rem;
}

/* 1re colonne (axe de lecture) : en gras + plancher un peu plus large pour que
   les libellés courts tiennent sur une ligne. Pas de nowrap → les libellés
   longs wrappent encore, sans forcer la largeur (pas de scroll en plus). */
.blog-block-table__body td:first-child {
    font-weight: 600;
    min-width: 9.5rem;
}

.blog-block-table__body tr:last-child td {
    border-bottom: none;
}

.blog-block-table__body tr:nth-child(even) td {
    background: var(--blog-surface-muted);
}


/* ==== ./blog/components/_block-steps.css ==== */
/* presseIA — blog : bloc steps
   ───────────────────────────────
   Liste d'étapes numérotées (block_type = 'steps'). Compteur CSS rond
   accentué à gauche, titre + description par étape.

   Markup dans `templates/blog/blocks/_block.html.twig`.
*/

/* Sélecteur typé `ol.blog-block-steps` pour passer devant
   `.blog-article-body ol { padding-left: var(--blog-space-5) }` qui
   sinon ajoute 20px de padding-left au hasard de l'héritage. Le bloc
   steps gère son propre offset via padding-left sur __item (place pour
   le rond numéroté absolu). */
ol.blog-block-steps,
ul.blog-block-steps {
    list-style: none;
    counter-reset: blog-steps;
    padding: 0;
    margin: 0;
}

.blog-block-steps__item {
    counter-increment: blog-steps;
    position: relative;
    padding-left: calc(var(--blog-space-7) + var(--blog-space-2));
    margin-bottom: var(--blog-space-4);
    min-height: var(--blog-space-7);
}

.blog-block-steps__item:last-child {
    margin-bottom: 0;
}

.blog-block-steps__item::before {
    content: counter(blog-steps);
    position: absolute;
    left: 0;
    top: 0;
    width: var(--blog-space-7);
    height: var(--blog-space-7);
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
    font-family: var(--blog-font-heading);
    font-weight: 700;
    font-size: var(--blog-text-base);
    border-radius: 50%;
    flex-shrink: 0;
}

.blog-block-steps__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-base);
    font-weight: 600;
    color: var(--blog-text-primary);
    margin: 0 0 var(--blog-space-1) 0;
}

.blog-block-steps__body {
    margin: 0;
    color: var(--blog-text-primary);
}


/* ==== ./blog/components/_block-pros-cons.css ==== */
/* presseIA — blog : bloc pros_cons
   ────────────────────────────────────
   Tableau comparatif points forts / points faibles (block_type = 'pros_cons').
   Deux colonnes côte-à-côte ≥ 768px, empilées en mobile. Bordure accentuée
   verte (pros) et rouge sobre (cons).

   Markup dans `templates/blog/blocks/_block.html.twig`.
*/

.blog-block-pros-cons {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--blog-space-4);
}

@media (min-width: 768px) {
    .blog-block-pros-cons {
        grid-template-columns: 1fr 1fr;
    }
}

.blog-block-pros-cons__column {
    padding: var(--blog-space-4);
    border-radius: var(--blog-radius-md);
    border: 1px solid var(--blog-border);
    background: var(--blog-surface-elevated);
}

.blog-block-pros-cons__column--pros {
    border-left: 3px solid var(--blog-color-success, #16a34a);
}

.blog-block-pros-cons__column--cons {
    border-left: 3px solid var(--blog-color-danger, #b91c1c);
}

.blog-block-pros-cons__title {
    display: flex;
    align-items: center;
    gap: var(--blog-space-2);
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-base);
    font-weight: 700;
    margin: 0 0 var(--blog-space-3) 0;
}

.blog-block-pros-cons__column--pros .blog-block-pros-cons__title {
    color: var(--blog-color-success, #16a34a);
}

.blog-block-pros-cons__column--cons .blog-block-pros-cons__title {
    color: var(--blog-color-danger, #b91c1c);
}

.blog-block-pros-cons__list {
    list-style: none;
    padding: 0;
    margin: 0;
    color: var(--blog-text-primary);
}

.blog-block-pros-cons__list li {
    position: relative;
    padding-left: var(--blog-space-5);
    margin-bottom: var(--blog-space-2);
    font-size: var(--blog-text-sm);
    line-height: var(--blog-leading-normal);
}

.blog-block-pros-cons__list li:last-child {
    margin-bottom: 0;
}

.blog-block-pros-cons__list li::before {
    position: absolute;
    left: 0;
    top: 0;
    font-weight: 700;
}

.blog-block-pros-cons__column--pros .blog-block-pros-cons__list li::before {
    content: "+";
    color: var(--blog-color-success, #16a34a);
}

.blog-block-pros-cons__column--cons .blog-block-pros-cons__list li::before {
    content: "−";
    color: var(--blog-color-danger, #b91c1c);
}


/* ==== ./blog/components/_block-faq.css ==== */
/* presseIA — blog : bloc faq
   ─────────────────────────────
   Accordéon FAQ vanilla (block_type = 'faq'). Remplace l'accordion
   Bootstrap data-bs-toggle=collapse. Animé via max-height transition,
   ARIA expanded synchronisé par `assets/js/blog/accordion.js`.

   Markup dans `templates/blog/blocks/_block.html.twig`.
*/

.blog-block-faq {
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    overflow: hidden;
    background: var(--blog-surface-elevated);
}

.blog-block-faq__item + .blog-block-faq__item {
    border-top: 1px solid var(--blog-border);
}

.blog-block-faq__header {
    margin: 0;
}

.blog-block-faq__toggle {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    padding: var(--blog-space-4) var(--blog-space-5);
    background: transparent;
    border: none;
    text-align: left;
    font-family: inherit;
    font-size: var(--blog-text-base);
    font-weight: 600;
    color: var(--blog-text-primary);
    cursor: pointer;
    transition: background 0.15s;
}

.blog-block-faq__toggle:hover {
    background: var(--blog-surface-muted);
}

.blog-block-faq__toggle:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: -2px;
}

.blog-block-faq__toggle[aria-expanded="true"] {
    color: var(--blog-color-accent);
    background: var(--blog-color-accent-soft);
}

.blog-block-faq__icon {
    flex-shrink: 0;
    margin-left: var(--blog-space-3);
    transition: transform 0.2s ease-out;
    color: var(--blog-text-muted);
}

.blog-block-faq__toggle[aria-expanded="true"] .blog-block-faq__icon {
    transform: rotate(180deg);
    color: var(--blog-color-accent);
}

.blog-block-faq__panel {
    overflow: hidden;
    max-height: 0;
    transition: max-height 0.25s ease-out;
}

.blog-block-faq__panel[data-blog-accordion-open] {
    max-height: var(--blog-block-faq-panel-max, 40rem);
}

.blog-block-faq__body {
    padding: 0 var(--blog-space-5) var(--blog-space-4);
    color: var(--blog-text-primary);
    line-height: var(--blog-leading-relaxed);
}


/* ==== ./blog/components/_block-image.css ==== */
/* presseIA — blog : bloc image (illustration inline)
   ────────────────────────────────────────────────────
   Illustration intra-article proposée par le Writer et générée
   post-EIC par asset.generate.inline_images. Format hérité du
   hero (MediaImageGuidelines.aspectRatio, typiquement 16:9), mais
   composition différente : sujet centré (≠ off-center hero pour
   overlay title).

   Markup    : `templates/blog/blocks/_block.html.twig`
   Validator : `BlockValidation::imageFailure()`
*/

.blog-block-image {
    margin: var(--blog-space-5) 0;
    width: 100%;
}

.blog-block-image__media {
    width: 100%;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    border-radius: var(--blog-radius-md);
    background: var(--blog-surface-muted);
}

.blog-block-image__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    border-radius: 0;
}

/* Placeholder affiché quand asset_id manque (bloc Writer pré-génération,
   échec partiel post-EIC, ou toggle autoGenerateInlineImages off). Visuel
   discret : pas d'erreur intrusive — juste un repère neutre que ce slot
   éditorial existe. Aussi vu sur /design/contents pour documenter le bloc. */
.blog-block-image__placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--blog-text-muted);
    font-size: 2.5rem;
    opacity: 0.4;
}

.blog-block-image__caption {
    margin: var(--blog-space-2) 0 0 0;
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    font-style: italic;
    text-align: center;
    line-height: var(--blog-leading-snug);
}


/* ==== ./blog/components/_block-cta.css ==== */
/* presseIA — blog : bloc cta
   ─────────────────────────────
   Appel à l'action (block_type = 'cta'). Bouton large centré, contraste
   fort sur l'accent média. Pas de variantes secondaires pour rester
   éditorial sobre (cf. brief : 1 CTA principal max).

   Markup dans `templates/blog/blocks/_block.html.twig`.
*/

.blog-block-cta {
    display: flex;
    justify-content: center;
    padding-block: var(--blog-space-3);
}

/* Sélecteur préfixé `a.blog-block-cta__button` pour passer devant
   `.blog-body a { color: var(--blog-link) }` (spécificité 0,1,1) qui
   sinon donnait au texte la couleur accent du média = couleur du fond
   du bouton, texte invisible. */
a.blog-block-cta__button {
    display: inline-flex;
    align-items: center;
    gap: var(--blog-space-2);
    padding: var(--blog-space-3) var(--blog-space-6);
    background: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
    font-weight: 600;
    font-size: var(--blog-text-base);
    border-radius: var(--blog-radius-md);
    text-decoration: none;
    transition: background 0.15s, transform 0.1s;
}

a.blog-block-cta__button:hover {
    background: var(--blog-color-accent-hover);
    color: var(--blog-text-onAccent);
    transform: translateY(-1px);
}

a.blog-block-cta__button:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: 2px;
}

a.blog-block-cta__button--ghost {
    background: transparent;
    color: var(--blog-color-accent);
    border: 1px solid var(--blog-color-accent);
}

a.blog-block-cta__button--ghost:hover {
    background: var(--blog-color-accent-soft);
    color: var(--blog-color-accent);
}


/* ==== ./blog/components/_block-callout.css ==== */
/* presseIA — blog : bloc callout (encadré éditorial)
   ─────────────────────────────────────────────────────
   Encadré sémantique avec 4 variants (info, tip, warning, important).
   Visuellement détaché du fil de prose principal — sert quand une info
   utile casse le rythme narratif sans mériter sa propre section.

   Markup : `templates/blog/blocks/_block.html.twig`
   Validator : `BlockValidation::calloutFailure()` (variant requis, title
   5-80 chars, body 40-400 chars)

   Structure :
     .blog-block-callout (--variant)
       .blog-block-callout__icon
       .blog-block-callout__body
         .blog-block-callout__title
         .blog-block-callout__text
*/

.blog-block-callout {
    display: flex;
    gap: var(--blog-space-4);
    align-items: flex-start;
    padding: var(--blog-space-4) var(--blog-space-5);
    margin-block: var(--blog-space-5);
    border-radius: var(--blog-radius-md);
    border-left: 4px solid var(--blog-callout-accent, var(--blog-color-accent));
    background: var(--blog-callout-bg, var(--blog-color-accent-soft));
    color: var(--blog-text-primary);
}

.blog-block-callout__icon {
    flex: 0 0 auto;
    width: 2rem;
    height: 2rem;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--blog-callout-accent, var(--blog-color-accent));
    font-size: 1.25rem;
    /* Aligne l'icone sur la baseline du title (compense l'altitude visuelle
       des icones Font Awesome) */
    line-height: 1;
    padding-top: 0.125rem;
}

.blog-block-callout__body {
    flex: 1 1 auto;
    min-width: 0;
}

.blog-block-callout__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-base);
    font-weight: 700;
    line-height: var(--blog-leading-snug);
    margin: 0 0 var(--blog-space-2) 0;
    color: var(--blog-callout-accent, var(--blog-text-primary));
}

.blog-block-callout__text {
    font-size: var(--blog-text-base);
    line-height: var(--blog-leading-normal);
    margin: 0;
    color: var(--blog-text-primary);
}

/* ── Variants sémantiques ──────────────────────────────────────────────
   Chaque variant override 2 custom-props : --blog-callout-accent (icone +
   title + border-left) et --blog-callout-bg (fond doux). Ça garde
   l'architecture lisible : un seul endroit où changer la couleur d'un
   variant, pas du sélecteur composé partout.
*/

.blog-block-callout--info {
    --blog-callout-accent: var(--blog-color-info);
    --blog-callout-bg: var(--blog-color-info-soft);
}

.blog-block-callout--tip {
    --blog-callout-accent: var(--blog-color-success);
    --blog-callout-bg: var(--blog-color-success-soft);
}

.blog-block-callout--warning {
    --blog-callout-accent: var(--blog-color-warning);
    --blog-callout-bg: var(--blog-color-warning-soft);
}

.blog-block-callout--important {
    --blog-callout-accent: var(--blog-color-accent);
    --blog-callout-bg: var(--blog-color-accent-soft);
}

/* Mobile : on garde le flex (icone + body) mais on réduit le padding
   horizontal pour respirer sur les petits écrans. */
@media (max-width: 575.98px) {
    .blog-block-callout {
        padding: var(--blog-space-3) var(--blog-space-4);
        gap: var(--blog-space-3);
    }
    .blog-block-callout__icon {
        width: 1.5rem;
        height: 1.5rem;
        font-size: 1rem;
    }
}


/* ==== ./blog/components/_block-big-number.css ==== */
/* presseIA — blog : bloc big_number (chiffre clé en exergue)
   ──────────────────────────────────────────────────────────
   Chiffre frappant + descriptif court + source optionnelle.
   Bloc visuellement détaché, centré sur le chiffre (taille XL),
   alignement vertical par défaut. Sert quand un chiffre est
   SI saillant qu'il mérite d'être lu en premier au scan.

   Markup    : `templates/blog/blocks/_block.html.twig`
   Validator : `BlockValidation::bigNumberFailure()`
               (value 1-30 chars, label 5-120 chars, source 5-100 ou null)

   Structure :
     .blog-block-big-number
       .blog-block-big-number__value     (chiffre en XL)
       .blog-block-big-number__label     (descriptif court)
       .blog-block-big-number__source    (attribution, optionnelle)
*/

.blog-block-big-number {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: var(--blog-space-2);
    padding: var(--blog-space-5) var(--blog-space-4);
    margin-block: var(--blog-space-5);
    border-radius: var(--blog-radius-md);
    background: var(--blog-color-accent-soft);
    border-top: 3px solid var(--blog-color-accent);
}

.blog-block-big-number__value {
    font-family: var(--blog-font-heading);
    font-size: clamp(2.5rem, 6vw, 4rem);
    line-height: 1;
    font-weight: 800;
    color: var(--blog-color-accent);
    letter-spacing: var(--blog-tracking-tight, -0.02em);
}

.blog-block-big-number__label {
    font-size: var(--blog-text-lg);
    line-height: var(--blog-leading-snug);
    font-weight: 500;
    margin: 0;
    color: var(--blog-text-primary);
    max-width: 32rem;
}

.blog-block-big-number__source {
    font-size: var(--blog-text-xs);
    letter-spacing: var(--blog-tracking-wide);
    text-transform: uppercase;
    color: var(--blog-text-muted);
    margin: var(--blog-space-1) 0 0 0;
}

/* Mobile : on resserre le padding vertical mais on garde le chiffre
   XL — c'est l'élément clé du bloc, le compresser détruit son rôle. */
@media (max-width: 575.98px) {
    .blog-block-big-number {
        padding: var(--blog-space-4) var(--blog-space-3);
    }
}

/* ==== ./blog/components/_footer.css ==== */
/* presseIA — blog : footer
   ─────────────────────────────
   Pied de page éditorial : marque + signaux sociaux, navigation catégories,
   menu secondaire du média, signup newsletter inline (sera factorisé en
   macro au Lot 4.6), filet copyright + liens légaux.

   Markup dans `templates/blog/_footer.html.twig`.
*/

.blog-footer {
    background: var(--blog-surface-muted);
    border-top: 1px solid var(--blog-border);
    padding-block: var(--blog-space-7) var(--blog-space-5);
    color: var(--blog-text-secondary);
}

/* Mobile : compression du padding pour rester cohérent avec les sections
   au-dessus. La séparation visuelle avec le contenu se fait via le
   background + border-top, plus besoin de margin-top. */
@media (max-width: 767.98px) {
    .blog-footer {
        padding-block: var(--blog-space-gutter);
    }
}

.blog-footer__grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--blog-space-5);
    margin-bottom: var(--blog-space-5);
}

@media (min-width: 768px) {
    .blog-footer__grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (min-width: 992px) {
    .blog-footer__grid {
        grid-template-columns: minmax(0, 2fr) minmax(0, 1.5fr) minmax(0, 1fr) minmax(0, 1.5fr);
    }
}

/* Colonne brand : nom + tagline + social */
.blog-footer__column {
    min-width: 0;
}

.blog-footer__brand-name {
    font-family: var(--blog-font-heading);
    font-weight: 700;
    font-size: var(--blog-text-lg);
    color: var(--blog-text-primary);
    margin-bottom: var(--blog-space-2);
}

.blog-footer__brand-tagline {
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    margin: 0 0 var(--blog-space-3) 0;
    line-height: var(--blog-leading-normal);
}

.blog-footer__social {
    display: flex;
    gap: var(--blog-space-3);
    font-size: var(--blog-text-lg);
}

.blog-footer__social-link {
    color: var(--blog-text-muted);
    transition: color 0.15s;
    text-decoration: none;
}

.blog-footer__social-link:hover {
    color: var(--blog-color-accent);
}

/* Colonnes liens */
.blog-footer__column-title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-sm);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: var(--blog-tracking-wide);
    color: var(--blog-text-primary);
    margin: 0 0 var(--blog-space-3) 0;
}

.blog-footer__links {
    display: grid;
    gap: var(--blog-space-2);
}

.blog-footer__link {
    color: var(--blog-text-secondary);
    text-decoration: none;
    font-size: var(--blog-text-sm);
    transition: color 0.15s;
}

.blog-footer__link:hover {
    color: var(--blog-color-accent);
}

/* La newsletter du footer est rendue par la macro newsletter_signup
   (variant=footer) — styles dans `_newsletter-signup.css`. */

/* Filet bottom : copyright + liens légaux */
.blog-footer__bottom {
    padding-top: var(--blog-space-3);
    border-top: 1px solid var(--blog-border);
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: var(--blog-space-2);
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
}

.blog-footer__copyright {
    margin: 0;
}

.blog-footer__legal-links {
    display: flex;
    flex-wrap: wrap;
    gap: var(--blog-space-4);
}

.blog-footer__legal-link {
    color: var(--blog-text-muted);
    text-decoration: none;
    transition: color 0.15s;
}

.blog-footer__legal-link:hover {
    color: var(--blog-text-primary);
}


/* ==== ./blog/components/_newsletter-signup.css ==== */
/* presseIA — blog : newsletter-signup
   ─────────────────────────────────────
   Formulaire d'inscription newsletter réutilisable, partagé entre le
   footer (variant --footer, compact) et la section homepage inline
   (variant --inline, pleine largeur side-by-side).

   Macro Twig dans `templates/blog/_newsletter_signup.html.twig`.
*/

.blog-newsletter-signup {
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-3);
}

/* Variant inline : 2 colonnes ≥ lg, pitch et form côte-à-côte */
@media (min-width: 992px) {
    .blog-newsletter-signup--inline {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: var(--blog-space-5);
        align-items: center;
    }
}

.blog-newsletter-signup__pitch-wrap {
    min-width: 0;
}

.blog-newsletter-signup__form-wrap {
    min-width: 0;
}

/* Titre — taille variable selon le variant */
.blog-newsletter-signup__title {
    font-family: var(--blog-font-heading);
    font-weight: 700;
    color: var(--blog-text-primary);
    margin: 0 0 var(--blog-space-2) 0;
    line-height: var(--blog-leading-snug);
}

.blog-newsletter-signup--footer .blog-newsletter-signup__title {
    font-size: var(--blog-text-sm);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: var(--blog-tracking-wide);
    margin-bottom: var(--blog-space-3);
}

.blog-newsletter-signup--inline .blog-newsletter-signup__title {
    font-size: var(--blog-text-xl);
}

@media (min-width: 768px) {
    .blog-newsletter-signup--inline .blog-newsletter-signup__title {
        font-size: var(--blog-text-2xl);
    }
}

/* Pitch sous le titre */
.blog-newsletter-signup__pitch {
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    margin: 0;
    line-height: var(--blog-leading-normal);
}

.blog-newsletter-signup--inline .blog-newsletter-signup__pitch {
    font-size: var(--blog-text-base);
}

/* Alert bandeau pending / already-confirmed */
.blog-newsletter-signup__alert {
    padding: var(--blog-space-2) var(--blog-space-3);
    border-radius: var(--blog-radius-sm);
    font-size: var(--blog-text-sm);
    margin-bottom: var(--blog-space-2);
}

.blog-newsletter-signup__alert--pending {
    background: rgba(var(--blog-color-accent-rgb), 0.1);
    color: var(--blog-color-accent-hover);
    border: 1px solid rgba(var(--blog-color-accent-rgb), 0.25);
}

.blog-newsletter-signup__alert--info {
    background: var(--blog-surface-elevated);
    color: var(--blog-text-secondary);
    border: 1px solid var(--blog-border);
}

/* Form input-group : input + submit collés, bord arrondi extérieur */
.blog-newsletter-signup__form {
    display: flex;
    align-items: stretch;
    gap: 0;
}

.blog-newsletter-signup__input {
    flex: 1 1 auto;
    min-width: 0;
    border: 1px solid var(--blog-border);
    border-right: none;
    border-radius: var(--blog-radius-md) 0 0 var(--blog-radius-md);
    background: var(--blog-surface-elevated);
    color: var(--blog-text-primary);
    font-family: inherit;
}

.blog-newsletter-signup--footer .blog-newsletter-signup__input {
    padding: var(--blog-space-2) var(--blog-space-3);
    font-size: var(--blog-text-sm);
}

.blog-newsletter-signup--inline .blog-newsletter-signup__input {
    padding: var(--blog-space-3) var(--blog-space-4);
    font-size: var(--blog-text-base);
}

.blog-newsletter-signup__input:focus {
    outline: none;
    border-color: var(--blog-color-accent);
    box-shadow: 0 0 0 3px rgba(var(--blog-color-accent-rgb), 0.15);
    position: relative;
    z-index: 1;
}

.blog-newsletter-signup__submit {
    flex: 0 0 auto;
    background: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
    border: 1px solid var(--blog-color-accent);
    border-radius: 0 var(--blog-radius-md) var(--blog-radius-md) 0;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s;
    font-family: inherit;
}

.blog-newsletter-signup--footer .blog-newsletter-signup__submit {
    padding: var(--blog-space-2) var(--blog-space-4);
    font-size: var(--blog-text-sm);
}

.blog-newsletter-signup--inline .blog-newsletter-signup__submit {
    padding: var(--blog-space-3) var(--blog-space-5);
    font-size: var(--blog-text-base);
}

.blog-newsletter-signup__submit:hover {
    background: var(--blog-color-accent-hover);
    border-color: var(--blog-color-accent-hover);
}

.blog-newsletter-signup__submit:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: 2px;
}

.blog-newsletter-signup__honeypot {
    position: absolute;
    left: -9999px;
}

/* Wrapper de la section homepage `_newsletter_inline` — bande pleine
   largeur sur fond teinté accent-soft, intercalée entre deux sections
   éditoriales. Padding vertical aligné sur --blog-space-section-y pour
   une présence forte sans rupture avec le rythme des autres sections.
   Bordures 2px haut/bas qui marquent visuellement la coupure éditoriale
   (correctif #4 review catalogue). */
.blog-newsletter-inline {
    background: var(--blog-color-accent-soft);
    border-top: 1px solid var(--blog-border);
    border-bottom: 1px solid var(--blog-border);
    padding-block: var(--blog-space-section-y);
}


/* ==== ./blog/components/_pagination.css ==== */
/* presseIA — blog : pagination
   ────────────────────────────────
   Barre de pagination réutilisable pour catégorie, tag, recherche.
   Markup dans `templates/blog/_pagination.html.twig` (macro pagination).
*/

.blog-pagination {
    margin-top: var(--blog-space-6);
    margin-bottom: var(--blog-space-4);
}

.blog-pagination__list {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: var(--blog-space-1);
    list-style: none;
    margin: 0;
    padding: 0;
}

.blog-pagination__item {
    display: flex;
}

.blog-pagination__link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--blog-space-2);
    min-width: 2.5rem;
    height: 2.5rem;
    padding: 0 var(--blog-space-3);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    background: var(--blog-surface-elevated);
    color: var(--blog-text-primary);
    font-size: var(--blog-text-sm);
    font-weight: 500;
    text-decoration: none;
    transition: background 0.15s, border-color 0.15s, color 0.15s;
}

.blog-pagination__link:hover {
    background: var(--blog-color-accent-soft);
    border-color: var(--blog-color-accent);
    color: var(--blog-color-accent);
}

.blog-pagination__link:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: 2px;
}

.blog-pagination__link--current {
    background: var(--blog-color-accent);
    border-color: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
    font-weight: 700;
    cursor: default;
}

.blog-pagination__link--current:hover {
    background: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
}

.blog-pagination__link--disabled {
    background: transparent;
    border-color: var(--blog-border);
    color: var(--blog-text-muted);
    cursor: not-allowed;
    opacity: 0.5;
}

.blog-pagination__link--disabled:hover {
    background: transparent;
    border-color: var(--blog-border);
    color: var(--blog-text-muted);
}

.blog-pagination__ellipsis {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2.5rem;
    height: 2.5rem;
    color: var(--blog-text-muted);
    font-weight: 600;
}

/* Label texte des boutons prev/next — caché sur mobile pour gagner de la place */
.blog-pagination__label {
    display: none;
}

@media (min-width: 576px) {
    .blog-pagination__label {
        display: inline;
    }
}


/* ==== ./blog/components/_archive.css ==== */
/* presseIA — blog : archive (catégorie / tag / recherche)
   ────────────────────────────────────────────────────────
   Styling commun aux pages listing : en-tête de section avec breadcrumb,
   titre et count d'articles, puis grille d'articles cards. La pagination
   est portée par `_pagination.css`.

   Markup dans `templates/blog/category.html.twig` et `tag.html.twig`.
*/

.blog-archive-header {
    background: var(--blog-surface-elevated);
    border-bottom: 1px solid var(--blog-border);
    /* Aligné sur `.blog-article-hero` pour que le breadcrumb soit à la
       même hauteur entre la page liste (catégorie/tag) et la page
       article — sinon décalage visible quand on navigue entre les deux. */
    padding-block: var(--blog-space-5);
}

/* Mobile : aligne le padding vertical sur le gutter horizontal pour
   éviter l'asymétrie sur viewport étroite (cf. même pattern dans
   _article-hero.css et _layout.css). */
@media (max-width: 767.98px) {
    .blog-archive-header {
        padding-block: var(--blog-space-gutter);
    }
}

.blog-archive-header__breadcrumb {
    margin-bottom: var(--blog-space-3);
    font-size: var(--blog-text-sm);
}

.blog-archive-header__breadcrumb .breadcrumb {
    margin: 0;
}

.blog-archive-header__breadcrumb a {
    color: var(--blog-text-muted);
    text-decoration: none;
}

.blog-archive-header__breadcrumb a:hover {
    color: var(--blog-color-accent);
}

.blog-archive-header__intro {
    min-width: 0;
}

.blog-archive-header__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-2xl);
    font-weight: 700;
    line-height: var(--blog-leading-tight);
    color: var(--blog-text-primary);
    margin: 0 0 var(--blog-space-1) 0;
}

@media (min-width: 768px) {
    .blog-archive-header__title {
        font-size: var(--blog-text-4xl);
    }
}

.blog-archive-header__description {
    margin: 0;
    color: var(--blog-text-muted);
    font-size: var(--blog-text-base);
    line-height: var(--blog-leading-normal);
}

/* Tag header : variante compacte avec avatar icône */
.blog-archive-header--tag .blog-archive-header__intro {
    display: flex;
    align-items: center;
    gap: var(--blog-space-3);
}

/* Corps : grille d'articles + pagination */
.blog-archive {
    padding-block: var(--blog-space-6);
}

@media (max-width: 767.98px) {
    .blog-archive {
        padding-block: var(--blog-space-gutter);
    }
}

/* Liste verticale de cards horizontales (image gauche, body droite, un
   article par ligne). Pattern "manuel utile / service" : on lit ligne à
   ligne plutôt qu'on scanne une grille. S'applique à toutes les pages
   archive (catégorie / tag / recherche / auteur). */
.blog-archive-grid {
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-4);
}

/* Desktop : card horizontale (image gauche + body droite). Sur mobile,
   on garde la card verticale d'origine (image au-dessus, body dessous) —
   un layout horizontal en colonne 120px serait trop écrasé. */
@media (min-width: 768px) {
    .blog-archive-grid > .blog-article-card {
        display: grid;
        grid-template-columns: 240px 1fr;
        gap: 0;
    }

    /* Media : ratio 3/2 fixe, ne s'étire PAS verticalement même si le body
       est plus haut (titre long sur plusieurs lignes). Sans align-self: start
       la media hérite du `align-items: stretch` du grid et l'image se
       retrouve étirée → tailles inégales d'une card à l'autre.
       Override de .blog-media (aspect-ratio: 16/9). */
    .blog-archive-grid > .blog-article-card .blog-article-card__media {
        aspect-ratio: 3 / 2;
        align-self: start;
    }

    /* Titre limité à 2 lignes pour garder la rangée alignée et éviter
       qu'un titre fleuve écrase la verticale d'une card par rapport à ses
       voisines. Mobile : pas de clamp, la card est verticale et le titre
       est libre. */
    .blog-archive-grid > .blog-article-card .blog-article-card__title {
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        overflow: hidden;
    }
}

.blog-archive__empty {
    padding: var(--blog-space-6);
    background: var(--blog-surface-muted);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    text-align: center;
    color: var(--blog-text-muted);
}


/* ==== ./blog/components/_search.css ==== */
/* presseIA — blog : recherche
   ───────────────────────────────
   Page de recherche : form, en-tête résultats, état vide.
   La grille des résultats réutilise `.blog-archive-grid` et la pagination
   réutilise `.blog-pagination` (cf. _archive.css et _pagination.css).

   Markup dans `templates/blog/search.html.twig`.
*/

.blog-search {
    padding-block: var(--blog-space-6);
}

@media (max-width: 767.98px) {
    .blog-search {
        padding-block: var(--blog-space-gutter);
    }
}

.blog-search__header {
    margin-bottom: var(--blog-space-5);
}

.blog-search__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-2xl);
    font-weight: 700;
    color: var(--blog-text-primary);
    margin: 0 0 var(--blog-space-4) 0;
    line-height: var(--blog-leading-tight);
}

@media (min-width: 768px) {
    .blog-search__title {
        font-size: var(--blog-text-3xl);
    }
}

/* Form recherche : input + bouton */
.blog-search-form {
    display: flex;
    flex-wrap: wrap;
    gap: var(--blog-space-2);
    align-items: stretch;
}

.blog-search-form__field {
    position: relative;
    flex: 1 1 16rem;
    min-width: 0;
    display: flex;
    align-items: stretch;
    background: var(--blog-surface-elevated);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    transition: border-color 0.15s, box-shadow 0.15s;
}

.blog-search-form__field:focus-within {
    border-color: var(--blog-color-accent);
    box-shadow: 0 0 0 3px rgba(var(--blog-color-accent-rgb), 0.15);
}

.blog-search-form__icon {
    display: flex;
    align-items: center;
    justify-content: center;
    padding-inline: var(--blog-space-3);
    color: var(--blog-text-muted);
    flex-shrink: 0;
}

.blog-search-form__input {
    flex: 1 1 auto;
    min-width: 0;
    padding: var(--blog-space-3) 0;
    border: none;
    background: transparent;
    color: var(--blog-text-primary);
    font-size: var(--blog-text-base);
    font-family: inherit;
}

.blog-search-form__input:focus {
    outline: none;
}

.blog-search-form__clear {
    display: flex;
    align-items: center;
    justify-content: center;
    padding-inline: var(--blog-space-3);
    color: var(--blog-text-muted);
    text-decoration: none;
    transition: color 0.15s;
    flex-shrink: 0;
}

.blog-search-form__clear:hover {
    color: var(--blog-text-primary);
}

.blog-search-form__submit {
    flex: 0 0 auto;
    padding: 0 var(--blog-space-5);
    background: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
    border: 1px solid var(--blog-color-accent);
    border-radius: var(--blog-radius-md);
    font-size: var(--blog-text-base);
    font-weight: 600;
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s;
    font-family: inherit;
}

.blog-search-form__submit:hover {
    background: var(--blog-color-accent-hover);
    border-color: var(--blog-color-accent-hover);
}

.blog-search-form__submit:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: 2px;
}

/* En-tête de résultats : "X résultats pour « query »" */
.blog-search__results-summary {
    color: var(--blog-text-muted);
    font-size: var(--blog-text-base);
    margin: var(--blog-space-5) 0 var(--blog-space-4) 0;
}

.blog-search__results-summary strong {
    color: var(--blog-text-primary);
    font-weight: 600;
}

/* État vide : aucun résultat */
.blog-search__empty {
    margin-top: var(--blog-space-5);
    padding: var(--blog-space-7) var(--blog-space-5);
    background: var(--blog-surface-muted);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    text-align: center;
}

.blog-search__empty-icon {
    font-size: var(--blog-text-4xl);
    color: var(--blog-text-muted);
    display: block;
    margin-bottom: var(--blog-space-3);
}

.blog-search__empty-title {
    color: var(--blog-text-primary);
    font-weight: 600;
    margin: 0 0 var(--blog-space-1) 0;
}

.blog-search__empty-hint {
    color: var(--blog-text-muted);
    font-size: var(--blog-text-sm);
    margin: 0;
}


/* ==== ./blog/components/_error.css ==== */
/* presseIA — blog : pages d'erreur (404, 5xx)
   ──────────────────────────────────────────────
   Pages standalone affichées via TwigBundle/Exception. Layout sobre :
   code d'erreur en gros chiffres, titre, hint, deux boutons d'action.

   Markup dans `templates/bundles/TwigBundle/Exception/error*.html.twig`.
*/

.blog-error {
    padding-block: var(--blog-space-9) var(--blog-space-8);
    text-align: center;
}

@media (max-width: 767.98px) {
    .blog-error {
        padding-block: var(--blog-space-gutter);
    }
}

.blog-error__code {
    font-family: var(--blog-font-heading);
    font-size: clamp(4rem, 18vw, 9rem);
    font-weight: 800;
    line-height: 1;
    letter-spacing: var(--blog-tracking-tight);
    color: var(--blog-color-accent);
    margin: 0 0 var(--blog-space-3) 0;
}

.blog-error__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-2xl);
    font-weight: 700;
    color: var(--blog-text-primary);
    line-height: var(--blog-leading-tight);
    margin: 0 0 var(--blog-space-3) 0;
}

@media (min-width: 768px) {
    .blog-error__title {
        font-size: var(--blog-text-4xl);
    }
}

.blog-error__hint {
    max-width: 36rem;
    margin: 0 auto var(--blog-space-6);
    color: var(--blog-text-muted);
    font-size: var(--blog-text-base);
    line-height: var(--blog-leading-normal);
}

.blog-error__actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--blog-space-3);
}

/* Sélecteur préfixé `a.blog-error__action` pour passer devant
   `.blog-body a { color: var(--blog-link) }` (spécificité 0,1,1) qui
   sinon donnait au texte la couleur accent du média = couleur du fond
   du bouton primary, texte invisible. */
a.blog-error__action {
    display: inline-flex;
    align-items: center;
    gap: var(--blog-space-2);
    padding: var(--blog-space-3) var(--blog-space-5);
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    background: var(--blog-surface-elevated);
    color: var(--blog-text-primary);
    font-weight: 500;
    text-decoration: none;
    transition: background 0.15s, border-color 0.15s, color 0.15s;
}

a.blog-error__action:hover {
    background: var(--blog-color-accent-soft);
    border-color: var(--blog-color-accent);
    color: var(--blog-color-accent);
}

a.blog-error__action--primary {
    background: var(--blog-color-accent);
    border-color: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
}

a.blog-error__action--primary:hover {
    background: var(--blog-color-accent-hover);
    border-color: var(--blog-color-accent-hover);
    color: var(--blog-text-onAccent);
}

a.blog-error__action:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: 2px;
}


/* ==== ./blog/components/_category-grid.css ==== */
/* presseIA — blog : section category_grid (V2)
   ────────────────────────────────────────────────
   Grille de cards navigationnelles vers les catégories du média.
   Chaque card : cover image (ou initiale dégradée fallback) + nom +
   count d'articles. Tap zone large, hover discret.

   Markup dans `templates/blog/sections/_category_grid.html.twig`.
*/

.blog-category-grid {
    padding-block: var(--blog-space-section-y);
}

.blog-category-grid__header {
    margin-bottom: var(--blog-space-5);
}

.blog-category-grid__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-2xl);
    font-weight: 700;
    color: var(--blog-text-primary);
    margin: 0;
    line-height: var(--blog-leading-tight);
}

.blog-category-grid__list {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--blog-space-4);
}

@media (min-width: 768px) {
    .blog-category-grid__list {
        grid-template-columns: repeat(3, 1fr);
    }
}

@media (min-width: 992px) {
    .blog-category-grid__list {
        grid-template-columns: repeat(4, 1fr);
    }
}

/* Card catégorie : image en haut, nom + count en bas */
.blog-category-grid__card {
    display: flex;
    flex-direction: column;
    border: 1px solid var(--blog-border);
    border-radius: var(--blog-radius-md);
    background: var(--blog-surface-elevated);
    overflow: hidden;
    text-decoration: none;
    color: inherit;
    transition: transform 0.15s ease-out, border-color 0.15s, box-shadow 0.15s;
}

.blog-category-grid__card:hover {
    transform: translateY(-2px);
    border-color: var(--blog-color-accent);
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08);
}

.blog-category-grid__card:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: 2px;
}

/* Zone média : image ou fallback "initiale" */
.blog-category-grid__media {
    aspect-ratio: 16 / 10;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    background: linear-gradient(
        135deg,
        var(--blog-color-accent-soft),
        rgba(var(--blog-color-accent-rgb), 0.25)
    );
}

.blog-category-grid__image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.blog-category-grid__initial {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-5xl);
    font-weight: 800;
    color: var(--blog-color-accent);
    line-height: 1;
    letter-spacing: var(--blog-tracking-tight);
}

/* Corps : nom + count */
.blog-category-grid__body {
    padding: var(--blog-space-3) var(--blog-space-4);
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-1);
}

.blog-category-grid__name {
    font-family: var(--blog-font-heading);
    font-weight: 700;
    font-size: var(--blog-text-base);
    color: var(--blog-text-primary);
    transition: color 0.15s;
}

.blog-category-grid__card:hover .blog-category-grid__name {
    color: var(--blog-color-accent);
}

.blog-category-grid__count {
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
}


/* ==== ./blog/components/_featured-dossier.css ==== */
/* presseIA — blog : section featured_dossier
   --------------------------------------------
   Section "dossier éditorial fort" : un seul article mis en avant
   façon magazine — bandeau image cinéma (21:9), bloc texte centré
   ramassé en dessous, sur surface muted pour se distinguer des
   autres sections homepage.

   Markup :
     <section class="blog-section blog-featured-dossier">
       <div class="blog-featured-dossier__shell">
         <article>
           <div class="blog-featured-dossier__label">…</div>
           <a class="blog-featured-dossier__media">…</a>
           <div class="blog-featured-dossier__body">
             <a class="blog-kicker">…</a>
             <h2 class="blog-featured-dossier__title">…</h2>
             <p class="blog-featured-dossier__dek">…</p>
             <div class="blog-meta">…</div>
           </div>
         </article>
       </div>
     </section>
*/

.blog-featured-dossier {
    background: var(--blog-surface-muted);
    /* padding-block hérité de .blog-section via --blog-space-section-y
       — homogénéisation au correctif #6 review catalogue. */
}

/* Mode dégradé : pas d'image hero disponible. On resserre le padding
   vertical pour ne pas laisser une bande vide perçue comme un trou dans
   le flux (correctif #3 review catalogue). */
.blog-featured-dossier--no-media {
    padding-block: var(--blog-space-7);
}

@media (max-width: 767.98px) {
    .blog-featured-dossier--no-media {
        padding-block: var(--blog-space-gutter);
    }
}

.blog-featured-dossier--no-media .blog-featured-dossier__title {
    /* Titre plus serré quand pas d'image — la hiérarchie change. */
    margin-bottom: var(--blog-space-3);
}

.blog-featured-dossier__shell {
    max-width: 64rem;
    margin-inline: auto;
    padding-inline: var(--blog-space-gutter);
}

/* Label "dossier" — petit chapeau accent au-dessus de l'image,
   évoque la rubrique magazine. Centré pour rester cohérent
   avec le body. */
.blog-featured-dossier__label {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--blog-space-2);
    text-transform: uppercase;
    letter-spacing: var(--blog-tracking-wide);
    font-size: var(--blog-text-xs);
    font-weight: 700;
    color: var(--blog-color-accent);
    margin-bottom: var(--blog-space-4);
}

.blog-featured-dossier__label-dot {
    width: 0.4rem;
    height: 0.4rem;
    border-radius: 50%;
    background: var(--blog-color-accent);
    flex-shrink: 0;
}

/* Image bandeau cinéma. Lien englobant pour zone de clic large
   (l'image et le titre pointent au même endroit). */
.blog-featured-dossier__media {
    display: block;
    aspect-ratio: 21 / 9;
    overflow: hidden;
    border-radius: var(--blog-radius-md);
    background: var(--blog-surface-elevated);
    margin-bottom: var(--blog-space-6);
}

.blog-featured-dossier__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.4s ease;
}

.blog-featured-dossier__media:hover img {
    transform: scale(1.02);
}

.blog-featured-dossier__media .blog-img-placeholder {
    width: 100%;
    height: 100%;
    border-radius: 0;
}

/* Bloc texte centré sous l'image — largeur de lecture confortable. */
.blog-featured-dossier__body {
    max-width: 44rem;
    margin-inline: auto;
    text-align: center;
}

.blog-featured-dossier__body > .blog-kicker {
    margin-bottom: var(--blog-space-3);
}

.blog-featured-dossier__title {
    font-size: var(--blog-text-3xl);
    line-height: var(--blog-leading-tight);
    margin: 0 0 var(--blog-space-4);
}

@media (min-width: 768px) {
    .blog-featured-dossier__title {
        font-size: var(--blog-text-4xl);
    }
}

@media (min-width: 1200px) {
    .blog-featured-dossier__title {
        font-size: var(--blog-text-5xl);
    }
}

.blog-featured-dossier__title a {
    color: inherit;
    text-decoration: none;
    transition: color 0.15s;
}

.blog-featured-dossier__title a:hover {
    color: var(--blog-color-accent);
}

/* Dek : excerpt en lead, italique serif léger — feeling magazine.
   Hérite font-heading via `.blog-body h1…h6`, donc passer en serif
   ici via héritage n'est pas dispo (c'est un <p>). On reste sur
   font-body avec italic pour la nuance éditoriale. */
.blog-featured-dossier__dek {
    font-size: var(--blog-text-lg);
    line-height: var(--blog-leading-relaxed);
    color: var(--blog-text-secondary);
    margin: 0 0 var(--blog-space-5);
    font-style: italic;
}

/* Méta : centrée pour s'aligner sur le bloc body. */
.blog-featured-dossier__body .blog-meta {
    justify-content: center;
}


/* ==== ./blog/components/_hero-section.css ==== */
/* presseIA — blog : sections hero homepage
   ------------------------------------------
   Partagé par les sections `hero_main_with_sidebar` et
   `hero_with_secondary_cards` (Lot 5.3).

   Classes :
     .blog-hero-section          wrapper article principal
     .blog-hero-title            titre — taille hero secondaire par défaut
     .blog-hero-title--xl        variante hero principal homepage (plus grosse)
     .blog-hero-kickers          groupe kicker + badge "À la une"
     .blog-hero-aside            sidebar verticale d'articles compacts
     .blog-hero-aside__item      article horizontal compact (image + body)
     .blog-hero-aside__media     image carrée 6rem
     .blog-hero-aside__title     h3 compact

   Les règles de hover sur `.blog-hero-title a` et
   `.blog-card-title a` restent dans `blog.css` (utilitaires
   transverses) pour ne pas dupliquer.
*/

/* ── Titre hero — sizes ─────────────────────────────────────────── */

.blog-hero-title {
    font-size: var(--blog-text-2xl);
    line-height: var(--blog-leading-tight);
    margin: 0 0 var(--blog-space-3);
}

/* Hero principal homepage — taille éditoriale progressive selon viewport,
   resserrée d'un cran à chaque palier pour s'aligner sur la posture
   "manuel utile / service" du reste du blog (titres pages moins gros). */
.blog-hero-title--xl {
    font-size: var(--blog-text-2xl);
    margin-bottom: var(--blog-space-4);
}

@media (min-width: 768px) {
    .blog-hero-title--xl {
        font-size: var(--blog-text-3xl);
    }
}

@media (min-width: 1200px) {
    .blog-hero-title--xl {
        font-size: var(--blog-text-4xl);
    }
}


/* ── Kickers (groupe catégorie + badge "À la une") ─────────────── */

.blog-hero-kickers {
    display: flex;
    flex-wrap: wrap;
    gap: var(--blog-space-2);
    margin-bottom: var(--blog-space-3);
}


/* ── Media hero (espacement standardisé sous l'image) ──────────── */

.blog-hero-section__media {
    margin-bottom: var(--blog-space-4);
}

/* Espacement entre le hero principal et la rangée de cards
   secondaires (hero_with_secondary_cards). Sélecteur spécifique
   au pattern — pas un utilitaire général. Calibré à space-4 (16px)
   pour atterrir sur ~40-48px ressenti avec le gutter g-4 de la row
   Bootstrap qui suit (correctif #8 review catalogue). */
.blog-hero-section + .row {
    margin-top: var(--blog-space-4);
}


/* ── Sidebar verticale (hero_main_with_sidebar) ─────────────────── */

.blog-hero-aside {
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-4);
    height: 100%;
}

.blog-hero-aside__item {
    display: flex;
    gap: var(--blog-space-3);
    align-items: flex-start;
}

.blog-hero-aside__media {
    flex: 0 0 6rem;
    width: 6rem;
}

.blog-hero-aside__body {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-1);
}

.blog-hero-aside__title {
    font-size: var(--blog-text-base);
    line-height: var(--blog-leading-snug);
    margin: 0;
}


/* ==== ./blog/components/_vertical-list.css ==== */
/* presseIA — blog : section vertical_list
   ----------------------------------------
   Liste verticale dense d'articles enrichie :
   - thumbnail carrée 88×88 à gauche
   - titre + excerpt 2 lignes au centre
   - meta à droite sur lg+, sous le contenu sinon
   - quand `--numbered` : gros chiffre serif à l'extrême gauche
     (classement éditorial type Most Popular)

   Remplace l'ancien usage de `.list-group .list-group-flush` Bootstrap.

   Markup :
     <ul class="blog-vertical-list">                  (ou <ol ... --numbered>)
       <li class="blog-vertical-list__item">
         <span class="blog-vertical-list__rank">1</span>  (si numbered)
         <a class="blog-vertical-list__thumb">…</a>
         <div class="blog-vertical-list__body">
           <a class="blog-kicker">…</a>
           <h3 class="blog-vertical-list__title">…</h3>
           <p class="blog-vertical-list__excerpt">…</p>
           <div class="blog-meta">…</div>
         </div>
       </li>
     </ul>
*/

.blog-vertical-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    counter-reset: blog-vertical-rank;
}

.blog-vertical-list__item {
    display: flex;
    gap: var(--blog-space-3);
    align-items: flex-start;
    padding-block: var(--blog-space-4);
    border-bottom: 1px solid var(--blog-border);
}

.blog-vertical-list__item:first-child {
    padding-top: 0;
}

.blog-vertical-list__item:last-child {
    border-bottom: 0;
    padding-bottom: 0;
}

/* Chiffre de classement — gros chiffre serif à l'extrême gauche.
   Style "Most Popular" éditorial. */
.blog-vertical-list__rank {
    flex: 0 0 auto;
    font-family: var(--blog-font-heading);
    font-weight: 700;
    font-size: 3.5rem;
    line-height: 0.9;
    color: var(--blog-color-accent);
    min-width: 3rem;
    text-align: center;
    align-self: center;
    user-select: none;
}

/* Thumbnail carrée — link wrapper pour cliquabilité visuelle */
.blog-vertical-list__thumb {
    flex: 0 0 auto;
    width: 88px;
    height: 88px;
    overflow: hidden;
    border-radius: 4px;
    display: block;
    background: var(--blog-surface-muted);
}

.blog-vertical-list__thumb img,
.blog-vertical-list__thumb .blog-img-placeholder {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* Bloc contenu — flex column, prend tout l'espace restant */
.blog-vertical-list__body {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-1);
}

.blog-vertical-list__title {
    font-size: var(--blog-text-lg);
    line-height: var(--blog-leading-snug);
    margin: 0;

    /* line-clamp 2 lignes pour homogénéiser les hauteurs */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    line-clamp: 2;
    overflow: hidden;
}

.blog-vertical-list__excerpt {
    font-size: var(--blog-text-sm);
    color: var(--blog-text-secondary);
    line-height: var(--blog-leading-normal);
    margin: 0;
    max-width: 70ch;

    /* line-clamp 2 lignes */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    line-clamp: 2;
    overflow: hidden;
}

/* Mobile : thumbnail réduite + rank plus petit */
@media (max-width: 575px) {
    .blog-vertical-list__rank {
        font-size: 2.25rem;
        min-width: 2rem;
    }
    .blog-vertical-list__thumb {
        width: 64px;
        height: 64px;
    }
    .blog-vertical-list__excerpt {
        display: none;
    }
}


/* ==== ./blog/components/_grid-articles.css ==== */
/* grid_articles — grille d'articles flex avec dernière ligne centrée
   automatiquement quand `count(items) % cols != 0`.

   Volontairement en flexbox (vs CSS Grid) pour bénéficier de
   `justify-content: center` qui centre les items orphelins de la
   dernière ligne sans tricks `:nth-child(N of)`. Sur les lignes pleines,
   `justify-content: center` est un no-op (la largeur cumulée des items
   + gaps = 100%, pas d'espace à distribuer). */

.blog-grid-articles {
    display: flex;
    flex-wrap: wrap;
    gap: var(--blog-space-4);
    justify-content: center;
}

.blog-grid-articles__item {
    /* width par défaut (mobile-first) : pleine largeur sur < sm */
    width: 100%;
}

/* sm+ : 2 colonnes pour les 2 variantes */
@media (min-width: 576px) {
    .blog-grid-articles__item {
        width: calc((100% - var(--blog-space-4)) / 2);
    }
}

/* lg+ : 3 ou 4 colonnes selon le variant */
@media (min-width: 992px) {
    .blog-grid-articles--cols-3 > .blog-grid-articles__item {
        width: calc((100% - 2 * var(--blog-space-4)) / 3);
    }
    .blog-grid-articles--cols-4 > .blog-grid-articles__item {
        width: calc((100% - 3 * var(--blog-space-4)) / 4);
    }
}


/* ==== ./blog/components/_category-spotlight.css ==== */
/* category_spotlight (V2) — projecteur sur une catégorie.

   Différenciation vs feature_with_mini_cards : un eyebrow "DANS LA
   CATÉGORIE" en haut + titre catégorie large. Pattern éditorial qui
   signale immédiatement la bascule thématique au lecteur.
   (correctif #5 review catalogue) */

.blog-category-spotlight__header {
    margin-bottom: var(--blog-space-5);
}

.blog-category-spotlight__eyebrow {
    display: inline-flex;
    align-items: center;
    gap: var(--blog-space-1);
    text-transform: uppercase;
    letter-spacing: var(--blog-tracking-wider, 0.08em);
    font-size: var(--blog-text-xs);
    font-weight: 700;
    color: var(--blog-color-accent);
    margin-bottom: var(--blog-space-2);
}

.blog-category-spotlight__eyebrow-arrow {
    font-size: var(--blog-text-base);
    line-height: 1;
    color: var(--blog-color-accent);
}

.blog-category-spotlight__heading-row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--blog-space-4);
    flex-wrap: wrap;
    border-bottom: 2px solid var(--blog-text-primary);
    padding-bottom: var(--blog-space-3);
}

.blog-category-spotlight__title {
    font-family: var(--blog-font-heading);
    font-weight: 700;
    font-size: var(--blog-text-3xl);
    line-height: var(--blog-leading-tight);
    margin: 0;
    color: var(--blog-text-primary);
}

@media (min-width: 768px) {
    .blog-category-spotlight__title {
        font-size: var(--blog-text-4xl);
    }
}


/* ==== ./blog/components/_thumb-list.css ==== */
/* Thumb-list — liste à thumbnail horizontale partagée (sidebar
   feature_with_mini_cards + category_spotlight).

   Format : thumbnail carrée 80×80 à gauche (flex-shrink:0), bloc texte
   à droite (flex:1). Titre line-clamp 2 lignes. Séparateur fin entre
   items. Responsive : pas de bascule verticale en mobile — on garde
   la densité.

   Distinct de `_vertical-list.css` qui est pleine largeur et accueille
   un excerpt. */

.blog-thumb-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
}

.blog-thumb-list__item {
    display: flex;
    gap: var(--blog-space-3);
    align-items: flex-start;
    padding-block: var(--blog-space-3);
    border-bottom: 1px solid var(--blog-border);
}

.blog-thumb-list__item:first-child {
    padding-top: 0;
}

.blog-thumb-list__item:last-child {
    border-bottom: 0;
    padding-bottom: 0;
}

.blog-thumb-list__thumb {
    flex: 0 0 auto;
    width: 80px;
    height: 80px;
    overflow: hidden;
    border-radius: 4px;
    display: block;
    background: var(--blog-surface-muted);
}

.blog-thumb-list__thumb img,
.blog-thumb-list__thumb .blog-img-placeholder {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.blog-thumb-list__body {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-1);
}

.blog-thumb-list__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-base);
    font-weight: 700;
    line-height: var(--blog-leading-snug);
    margin: 0;
    color: var(--blog-text-primary);

    /* line-clamp 2 lignes — homogénéise la hauteur des items et
       garantit que la sidebar reste compacte pour matcher la featured. */
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    line-clamp: 2;
    overflow: hidden;
}

.blog-thumb-list__title a {
    color: inherit;
    text-decoration: none;
    transition: color 0.15s;
}

.blog-thumb-list__title a:hover {
    color: var(--blog-color-accent);
}


/* ==== ./blog/components/_prose.css ==== */
/* presseIA — blog : prose (markdown rendu)
   ------------------------------------------
   Styling générique pour du HTML libre généré par un filtre markdown
   (content_page, bio auteur, descriptions…). Distinct de
   `.blog-article-body` qui style des blocs ContentBlock structurés.

   Markup :
     <div class="blog-prose">
       {{ html_brut_markdown_render|raw }}
     </div>
*/

.blog-prose {
    font-size: var(--blog-text-base);
    line-height: var(--blog-leading-relaxed);
    color: var(--blog-text-primary);
}

.blog-prose > * {
    margin-top: 0;
    margin-bottom: 0;
}

.blog-prose > * + * {
    margin-top: var(--blog-space-4);
}

/* Titres internes */

.blog-prose h2 {
    font-size: var(--blog-text-2xl);
    line-height: var(--blog-leading-tight);
    margin-top: var(--blog-space-7);
    margin-bottom: var(--blog-space-3);
}

/* Mobile : resserrage du saut avant h2 (cf. _article-body.css). */
@media (max-width: 767.98px) {
    .blog-prose h2 {
        margin-top: var(--blog-space-5);
    }
}

.blog-prose h2:first-child {
    margin-top: 0;
}

.blog-prose h3 {
    font-size: var(--blog-text-xl);
    line-height: var(--blog-leading-tight);
    margin-top: var(--blog-space-6);
    margin-bottom: var(--blog-space-2);
}

.blog-prose h4 {
    font-size: var(--blog-text-lg);
    line-height: var(--blog-leading-tight);
    margin-top: var(--blog-space-5);
    margin-bottom: var(--blog-space-2);
}

/* Liens — accent sobre, underline visible (vs reset du `.blog-body a`
   global qui n'a pas d'underline par défaut). */
.blog-prose a {
    color: var(--blog-color-accent);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
}

.blog-prose a:hover {
    color: var(--blog-color-accent-hover);
    text-decoration-thickness: 2px;
}

/* Listes */

.blog-prose ul,
.blog-prose ol {
    padding-left: var(--blog-space-5);
}

.blog-prose ul { list-style: disc; }
.blog-prose ol { list-style: decimal; }

.blog-prose li + li {
    margin-top: var(--blog-space-2);
}

/* Citation */

.blog-prose blockquote {
    padding: var(--blog-space-3) var(--blog-space-5);
    border-left: 3px solid var(--blog-color-accent);
    background: var(--blog-surface-muted);
    border-radius: 0 var(--blog-radius-sm) var(--blog-radius-sm) 0;
    font-style: italic;
    color: var(--blog-text-secondary);
}

.blog-prose blockquote > p:last-child {
    margin-bottom: 0;
}

/* Code */

.blog-prose code {
    font-family: var(--blog-font-mono);
    font-size: 0.9em;
    background: var(--blog-surface-muted);
    padding: 0.1em 0.35em;
    border-radius: var(--blog-radius-xs);
}

.blog-prose pre {
    background: var(--blog-color-neutral-950);
    color: var(--blog-color-neutral-50);
    padding: var(--blog-space-4);
    border-radius: var(--blog-radius-sm);
    overflow-x: auto;
    font-family: var(--blog-font-mono);
    font-size: var(--blog-text-sm);
    line-height: var(--blog-leading-snug);
}

.blog-prose pre code {
    background: transparent;
    padding: 0;
    color: inherit;
    font-size: inherit;
}

/* Tableau */

.blog-prose table {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--blog-text-sm);
}

.blog-prose th,
.blog-prose td {
    text-align: left;
    padding: var(--blog-space-2) var(--blog-space-3);
    border-bottom: 1px solid var(--blog-border);
}

.blog-prose th {
    background: var(--blog-surface-muted);
    font-weight: 600;
}

/* Séparateur horizontal */

.blog-prose hr {
    border: 0;
    height: 1px;
    background: var(--blog-border);
    margin: var(--blog-space-6) 0;
}

/* Image inline */

.blog-prose img {
    border-radius: var(--blog-radius-sm);
    max-width: 100%;
    height: auto;
}


/* ==== ./blog/components/_content-page.css ==== */
/* presseIA — blog : page de contenu statique (mentions légales,
   CGU, politique de confidentialité…).
   ---------------------------------------------------------------
   Largeur de lecture confortable (44rem via `.blog-container-narrow`),
   header avec border-bottom sobre, corps via `.blog-prose` pour le
   markdown rendu.
*/

.blog-content-page__header {
    padding-bottom: var(--blog-space-4);
    margin-bottom: var(--blog-space-6);
    border-bottom: 1px solid var(--blog-border);
}

.blog-content-page__title {
    font-size: var(--blog-text-2xl);
    line-height: var(--blog-leading-tight);
    margin: 0 0 var(--blog-space-2);
}

@media (min-width: 768px) {
    .blog-content-page__title {
        font-size: var(--blog-text-4xl);
    }
}

.blog-content-page__updated {
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    margin: 0;
}


/* ==== ./blog/components/_contact.css ==== */
/* presseIA — blog : page contact
   --------------------------------
   Layout split chaleureux : bloc édito (3 raisons d'écrire + note
   modération) à gauche, formulaire dans une card à droite. Sur
   mobile : empilé, édito au-dessus.
*/

.blog-contact-header {
    margin-bottom: var(--blog-space-6);
    text-align: center;
}

.blog-contact-header__title {
    font-size: var(--blog-text-2xl);
    line-height: var(--blog-leading-tight);
    margin: 0 0 var(--blog-space-3);
}

@media (min-width: 768px) {
    .blog-contact-header__title {
        font-size: var(--blog-text-4xl);
    }
}

.blog-contact-header__pitch {
    font-size: var(--blog-text-lg);
    color: var(--blog-text-secondary);
    max-width: 36rem;
    margin: 0 auto;
    line-height: var(--blog-leading-relaxed);
}

/* Grille split — desktop ≥ lg, empilé en dessous */

.blog-contact-grid {
    display: grid;
    gap: var(--blog-space-6);
}

@media (min-width: 992px) {
    .blog-contact-grid {
        grid-template-columns: 5fr 7fr;
        gap: var(--blog-space-7);
        align-items: start;
    }
}

/* Aside édito — 3 raisons d'écrire + note */

.blog-contact-aside {
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-5);
}

.blog-contact-aside__reason {
    display: flex;
    gap: var(--blog-space-3);
    align-items: flex-start;
}

.blog-contact-aside__reason-icon {
    flex: 0 0 2.25rem;
    width: 2.25rem;
    height: 2.25rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--blog-color-accent-soft);
    color: var(--blog-color-accent);
    font-size: var(--blog-text-base);
}

.blog-contact-aside__reason-body {
    flex: 1 1 auto;
}

.blog-contact-aside__reason-title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-base);
    font-weight: 700;
    margin: 0 0 var(--blog-space-1);
    color: var(--blog-text-primary);
}

.blog-contact-aside__reason-pitch {
    font-size: var(--blog-text-sm);
    color: var(--blog-text-muted);
    margin: 0;
    line-height: var(--blog-leading-snug);
}

.blog-contact-aside__note {
    padding: var(--blog-space-4);
    background: var(--blog-surface-muted);
    border-radius: var(--blog-radius-md);
    font-size: var(--blog-text-sm);
    color: var(--blog-text-secondary);
    line-height: var(--blog-leading-snug);
    margin: 0;
}

/* Actions du formulaire — bouton aligné à droite */

.blog-contact-form-actions {
    display: flex;
    justify-content: flex-end;
    margin-top: var(--blog-space-4);
}

/* Espacement entre l'alerte succès et la grille en dessous */

.blog-contact-alert {
    margin-bottom: var(--blog-space-5);
}


/* ==== ./blog/components/_author-page.css ==== */
/* presseIA — blog : page auteur
   -------------------------------
   En-tête simple : breadcrumb + titre + nb articles. La carte de visite
   complète (avatar + bio enrichie) est désormais portée par
   `templates/blog/sidebar/_author_card.html.twig` (cf. `_sidebar.css`).
   Le listing d'articles utilise `.blog-archive-grid`, partagé avec
   catégorie / tag / recherche.
*/

.blog-author-header {
    background: var(--blog-surface-elevated);
    border-bottom: 1px solid var(--blog-border);
    padding-block: var(--blog-space-6);
}

@media (max-width: 767.98px) {
    .blog-author-header {
        padding-block: var(--blog-space-gutter);
    }
}

.blog-author-header__breadcrumb {
    margin-bottom: var(--blog-space-4);
    font-size: var(--blog-text-sm);
}

.blog-author-header__title {
    font-size: var(--blog-text-2xl);
    line-height: var(--blog-leading-tight);
    margin: 0 0 var(--blog-space-2) 0;
}

@media (min-width: 768px) {
    .blog-author-header__title {
        font-size: var(--blog-text-4xl);
    }
}

.blog-author-header__subtitle {
    margin: 0;
    color: var(--blog-text-muted);
    font-size: var(--blog-text-base);
}


/* ==== ./blog/components/_newsletter-status.css ==== */
/* presseIA — blog : page de statut newsletter (confirmed / unsubscribed).
   --------------------------------------------------------------------
   Page de feedback courte, centrée, avec une grande icône d'état.
*/

.blog-newsletter-status {
    max-width: 36rem;
    margin-inline: auto;
    padding-inline: var(--blog-space-gutter);
    text-align: center;
}

.blog-newsletter-status__icon {
    font-size: 3rem;
    line-height: 1;
    margin-bottom: var(--blog-space-4);
}

.blog-newsletter-status__icon--success {
    color: var(--blog-color-success);
}

.blog-newsletter-status__icon--neutral {
    color: var(--blog-text-muted);
}

.blog-newsletter-status__title {
    font-size: var(--blog-text-2xl);
    line-height: var(--blog-leading-tight);
    margin: 0 0 var(--blog-space-3);
}

.blog-newsletter-status__pitch {
    font-size: var(--blog-text-base);
    color: var(--blog-text-secondary);
    line-height: var(--blog-leading-relaxed);
    margin: 0 0 var(--blog-space-5);
}


/* ==== ./blog/components/_consent.css ==== */
/* presseIA — blog : bannière consent RGPD
   ----------------------------------------
   Overlay assombri plein écran + barre d'action ancrée en bas. Affichée tant
   qu'aucun cookie `presseia_consent` n'a été posé. Conditionnée au provider
   analytics côté Twig :
     - ga4 / matomo  → cookies de tracking → bannière requise
     - plausible / umami → privacy-friendly natifs → pas de bannière

   Le voile (.blog-consent) assombrit la page pour forcer l'attention sans
   bloquer la lecture ; cliquer le voile ne vaut PAS consentement (aucun
   handler) → conforme RGPD (pas d'acceptation implicite).

   Pilotée par `assets/js/blog/consent.js` :
     - data-blog-consent           (wrapper, classe is-hidden quand cookie posé)
     - data-blog-consent-accept    (bouton accepter)
     - data-blog-consent-decline   (bouton refuser)
     - data-blog-consent-open      (rouvre la bannière, ex: footer)
*/

.blog-consent {
    position: fixed;
    inset: 0;
    z-index: 1050;
    display: flex;
    align-items: flex-end;
    background: rgba(0, 0, 0, 0.55);
    animation: blog-consent-fade-in 0.2s ease-out;
}

.blog-consent.is-hidden {
    display: none;
}

@keyframes blog-consent-fade-in {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
    .blog-consent {
        animation: none;
    }
}

/* Barre d'action pleine largeur, fond surface + liseré accent marqué. */
.blog-consent__bar {
    width: 100%;
    background: var(--blog-surface-elevated);
    border-top: 3px solid var(--blog-color-accent);
    box-shadow: var(--blog-shadow-lg);
    padding-block: var(--blog-space-4);
}

.blog-consent__inner {
    max-width: var(--blog-bp-xxl);
    margin-inline: auto;
    padding-inline: var(--blog-space-gutter);
    display: flex;
    flex-direction: column;
    gap: var(--blog-space-3);
}

@media (min-width: 768px) {
    .blog-consent__inner {
        flex-direction: row;
        align-items: center;
        justify-content: space-between;
        gap: var(--blog-space-5);
    }
}

.blog-consent__body {
    flex: 1 1 auto;
    min-width: 0;
}

.blog-consent__title {
    font-family: var(--blog-font-heading);
    font-weight: 700;
    font-size: var(--blog-text-lg);
    margin: 0 0 var(--blog-space-1);
    color: var(--blog-text-primary);
}

.blog-consent__pitch {
    margin: 0;
    font-size: var(--blog-text-sm);
    color: var(--blog-text-secondary);
    line-height: var(--blog-leading-snug);
}

.blog-consent__pitch a {
    color: var(--blog-color-accent);
    text-decoration: underline;
}

.blog-consent__actions {
    display: flex;
    gap: var(--blog-space-2);
    flex-shrink: 0;
    flex-wrap: wrap;
}

/* Bouton "Préférences cookies" stylé comme un lien dans le footer
   (le markup natif est <button> pour gérer le clic JS). */
.blog-consent-link {
    background: none;
    border: 0;
    padding: 0;
    color: inherit;
    font: inherit;
    cursor: pointer;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 2px;
}


/* ==== ./blog/components/_design-catalog.css ==== */
/* Page /design — catalogue des sections homepage rendues en série.
   Outil dev pour comparer les variants. Styles minimaux : header
   sticky par section, séparateurs nets, TOC en haut. */

.blog-design-intro {
    background: var(--blog-surface-muted);
    border-bottom: 1px solid var(--blog-border);
    padding-block: var(--blog-space-5);
}

.blog-design-intro__switch {
    display: flex;
    gap: var(--blog-space-1);
    margin-bottom: var(--blog-space-3);
}

.blog-design-intro__switch-link {
    display: inline-block;
    padding: 0.4rem 0.9rem;
    background: var(--blog-surface-page);
    border: 1px solid var(--blog-border);
    border-radius: 4px;
    font-size: var(--blog-text-sm);
    font-weight: 600;
    color: var(--blog-text-secondary);
    text-decoration: none;
    transition: color 0.15s, border-color 0.15s, background 0.15s;
}
.blog-design-intro__switch-link:hover {
    color: var(--blog-color-accent);
    border-color: var(--blog-color-accent);
}
.blog-design-intro__switch-link--active {
    background: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
    border-color: var(--blog-color-accent);
}
.blog-design-intro__switch-link--active:hover {
    color: var(--blog-text-onAccent);
}

.blog-design-intro__title {
    font-family: var(--blog-font-heading);
    font-size: var(--blog-text-3xl);
    font-weight: 700;
    margin: 0 0 var(--blog-space-2);
}

.blog-design-intro__lead {
    color: var(--blog-text-secondary);
    margin-bottom: var(--blog-space-4);
    max-width: 60ch;
}

.blog-design-intro__toc {
    display: flex;
    flex-wrap: wrap;
    gap: var(--blog-space-2);
}

.blog-design-intro__toc-link {
    display: inline-block;
    padding: 0.25rem 0.6rem;
    background: var(--blog-surface-page);
    border: 1px solid var(--blog-border);
    border-radius: 4px;
    font-family: var(--blog-font-mono, ui-monospace, monospace);
    font-size: var(--blog-text-xs);
    color: var(--blog-text-primary);
    text-decoration: none;
    transition: color 0.15s, border-color 0.15s;
}
.blog-design-intro__toc-link:hover {
    color: var(--blog-color-accent);
    border-color: var(--blog-color-accent);
}

.blog-design-block {
    border-top: 4px solid var(--blog-border);
}

.blog-design-block__header {
    background: var(--blog-surface-muted);
    padding-block: var(--blog-space-3);
    border-bottom: 1px solid var(--blog-border);
}

.blog-design-block__heading {
    display: flex;
    align-items: center;
    gap: var(--blog-space-3);
    flex-wrap: wrap;
    margin-bottom: var(--blog-space-1);
}

.blog-design-block__variant {
    font-family: var(--blog-font-mono, ui-monospace, monospace);
    font-size: var(--blog-text-base);
    font-weight: 700;
    color: var(--blog-text-primary);
    background: var(--blog-surface-page);
    border: 1px solid var(--blog-border);
    padding: 0.15rem 0.5rem;
    border-radius: 4px;
}

.blog-design-block__type {
    display: inline-block;
    background: var(--blog-color-accent);
    color: var(--blog-text-onAccent);
    font-size: var(--blog-text-xs);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: var(--blog-tracking-wide);
    padding: 0.15rem 0.5rem;
    border-radius: 4px;
}

.blog-design-block__desc {
    color: var(--blog-text-secondary);
    font-size: var(--blog-text-sm);
    margin: 0;
    max-width: 80ch;
}

.blog-design-block__warn {
    margin-top: var(--blog-space-2);
    padding: 0.4rem 0.6rem;
    background: var(--blog-color-warning-bg, #fff4e5);
    border-left: 3px solid var(--blog-color-warning, #d97706);
    color: var(--blog-color-warning, #92400e);
    font-size: var(--blog-text-sm);
}

.blog-design-block__render {
    padding-block: var(--blog-space-3);
}

/* ── Composants utilitaires blog (à casser en partials si volume augmente) ── */

/* Kicker = tag catégorie éditorial */
.blog-kicker {
    display: inline-block;
    background: var(--blog-kicker-bg);
    color: var(--blog-kicker-text);
    font-size: var(--blog-text-xs);
    font-weight: 700;
    letter-spacing: var(--blog-tracking-wide);
    text-transform: uppercase;
    padding: var(--blog-kicker-padding);
    border-radius: var(--blog-kicker-radius);
    text-decoration: none;
    /* Évite l'étirement quand le parent est en flex column (cf.
       .blog-hero-aside__body, .blog-article-card__body…). No-op hors flex. */
    align-self: flex-start;
}
.blog-kicker:hover {
    background: var(--blog-color-kicker-soft);
    color: var(--blog-color-kicker);
}

/* Tag = #hashtag plus neutre */
.blog-tag {
    display: inline-block;
    background: var(--blog-tag-bg);
    color: var(--blog-tag-text);
    font-size: var(--blog-text-xs);
    font-weight: 500;
    padding: var(--blog-tag-padding);
    border-radius: var(--blog-tag-radius);
    text-decoration: none;
    align-self: flex-start;
}
.blog-tag:hover {
    background: var(--blog-color-accent-soft);
    color: var(--blog-color-accent);
}

/* Rail horizontal (horizontal_card_rail) */
.blog-rail {
    display: grid;
    grid-auto-flow: column;
    /* Largeur de carte FIXE (carrousel) : ne pas mettre `1fr` en max, sinon
       avec peu de cartes les colonnes s'étirent pour remplir la piste
       (1 carte = 100 %, 2 = 50 %) et la vignette est upscalée/pixelisée.
       Borne haute = les cartes gardent leur gabarit et restent alignées à
       gauche, l'éventuel surplus déborde et défile. */
    grid-auto-columns: minmax(260px, 300px);
    gap: var(--blog-space-4);
    overflow-x: auto;
    padding-bottom: var(--blog-space-2);
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
}
.blog-rail > * { scroll-snap-align: start; }
.blog-rail::-webkit-scrollbar { height: 6px; }
.blog-rail::-webkit-scrollbar-thumb {
    background: var(--blog-border-strong);
    border-radius: 3px;
}

/* Wrapper du rail : porte les boutons prev/next pilotés par
   `assets/js/blog/rail.js`. Le scroll touch natif reste indépendant. */
.blog-rail-shell {
    position: relative;
}

/* Fade gradient sur les bords pour adoucir le coupe-net des cards.
   Activé seulement quand le scroll est possible dans la direction
   concernée — flag posé par le JS. */
.blog-rail-shell::before,
.blog-rail-shell::after {
    content: "";
    position: absolute;
    top: 0;
    bottom: var(--blog-space-2); /* match le padding-bottom du rail */
    width: 3rem;
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.2s;
}

.blog-rail-shell::before {
    left: 0;
    background: linear-gradient(
        to right,
        rgba(var(--blog-surface-page-rgb), 1) 0%,
        rgba(var(--blog-surface-page-rgb), 0) 100%
    );
}

.blog-rail-shell::after {
    right: 0;
    background: linear-gradient(
        to right,
        rgba(var(--blog-surface-page-rgb), 0) 0%,
        rgba(var(--blog-surface-page-rgb), 1) 100%
    );
}

.blog-rail-shell[data-blog-rail-can-prev]::before {
    opacity: 1;
}

.blog-rail-shell[data-blog-rail-can-next]::after {
    opacity: 1;
}

/* Boutons prev/next pilotés par rail.js (data-blog-rail-can-*). Le bouton
   est un panneau plein (fond = surface page) posé SUR le bord des cartes :
   masqué quand le scroll n'est pas possible dans sa direction, sinon il
   recouvre le bord du contenu d'un voile translucide. Donc état désactivé
   = opacity 0 (invisible, pas de voile), état actif = visible. Sur mobile,
   masqués — touch natif suffit. */
.blog-rail-shell__nav {
    position: absolute;
    top: 0;
    bottom: var(--blog-space-2);
    z-index: 2;
    width: 2.75rem;
    display: none;
    align-items: center;
    justify-content: center;
    background: var(--blog-surface-page);
    color: var(--blog-text-secondary);
    border: 0;
    border-radius: 0;
    cursor: pointer;
    transition: color 0.15s, opacity 0.15s;
    font-size: var(--blog-text-base);
    padding: 0;
    opacity: 0;
    pointer-events: none;
}

.blog-rail-shell__nav:hover {
    color: var(--blog-color-accent);
}

.blog-rail-shell__nav:focus-visible {
    outline: 2px solid var(--blog-color-accent);
    outline-offset: -2px;
}

.blog-rail-shell__nav--prev {
    left: 0;
    border-right: 1px solid var(--blog-border);
}
.blog-rail-shell__nav--next {
    right: 0;
    border-left: 1px solid var(--blog-border);
}

/* Affiche les boutons en md+, désactivés par défaut */
@media (min-width: 768px) {
    .blog-rail-shell__nav {
        display: flex;
    }
}

/* Activation : scroll possible dans la direction → pleine opacité + clic actif */
.blog-rail-shell[data-blog-rail-can-prev] .blog-rail-shell__nav--prev,
.blog-rail-shell[data-blog-rail-can-next] .blog-rail-shell__nav--next {
    opacity: 0.8;
    pointer-events: auto;
}

/* Image placeholder (fallback hero) */
.blog-img-placeholder {
    width: 100%;
    height: 100%;
    min-height: 140px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--blog-surface-muted);
    color: var(--blog-text-muted);
    font-size: var(--blog-text-sm);
    border-radius: var(--blog-radius-sm);
}

/* Conteneur image 16:9 cover (cards, hero) */
.blog-media {
    display: block;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    border-radius: var(--blog-radius-sm);
    background: var(--blog-surface-muted);
}
.blog-media > img,
.blog-media > .blog-img-placeholder {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    border-radius: 0;
}
.blog-media-square { aspect-ratio: 1 / 1; }
.blog-media-sm { max-width: 7rem; }

/* Avatar initiales (byline auteur) */
.blog-avatar {
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 50%;
    background: var(--blog-color-accent-soft);
    color: var(--blog-color-accent);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
    font-size: 0.9rem;
    flex: 0 0 auto;
}
.blog-avatar-lg { width: 3.25rem; height: 3.25rem; font-size: 1rem; }

/* Feedback "lien copié" */
.is-copied {
    background: var(--blog-color-accent) !important;
    color: var(--blog-text-onAccent) !important;
    border-color: var(--blog-color-accent) !important;
}

/* Ad zones (bannières publicitaires top/footer du layout) */
.blog-ad-zone {
    margin-block: var(--blog-space-4);
}

/* Hover titres de cards/hero — règle transverse (les sizes des
   titres `.blog-hero-title*` sont dans `components/_hero-section.css`,
   celles des cards dans `_article-card.css` ou _card.css selon le contexte). */
.blog-card-title a,
.blog-hero-title a {
    color: inherit;
    text-decoration: none;
    transition: color 0.15s;
}
.blog-card-title a:hover,
.blog-hero-title a:hover { color: var(--blog-color-accent); }

/* Lien "tout voir" de section */
.blog-section-link {
    color: var(--blog-color-accent);
    font-size: var(--blog-text-sm);
    font-weight: 600;
    text-decoration: none;
}
.blog-section-link:hover { color: var(--blog-color-accent-hover); }
