/*
 * BTP.SN — feuille de style principale
 * Portée depuis prototype/portal.html (v25) — identité visuelle validée.
 */
  :root{
    /* Palette reprise du logo btp.sn : jaune #FFCF01 et noir sur fond blanc. */
    --bg:#F4F3EF; --surface:#FFFFFF; --surface-alt:#EDEBE4; --surface-raised:#FFFFFF;
    --ink:#111111; --ink-muted:#57544C; --ink-faint:#6D6A63;
    /* Le jaune du logo sert de fond, jamais de texte : sur blanc il est
       illisible. Le texte posé dessus est noir, comme dans le logo, et les
       accents typographiques utilisent --accent-text, assez sombre pour rester
       lisible. */
    --accent:#FFCF01; --accent-ink:#111111; --accent-soft:#FFF2BF;
    --accent-text:#8A6A00; --logo-accent:#B18100;
    --secondary:#1F2933; --secondary-soft:#E4E7EA;
    --line:#DCD8CC; --line-strong:#C2BDAE;
    --success:#2F7D4F; --success-soft:#DDEEE2;
    --warning:#B4740E; --warning-soft:#F5E4C4;
    --danger:#A33B3B; --danger-soft:#F1DBD9;
    --shadow: 0 1px 2px rgba(27,29,31,.06), 0 8px 24px -12px rgba(27,29,31,.18);
    color-scheme: light;
  }
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]){
      --bg:#141414; --surface:#1D1D1D; --surface-alt:#262626; --surface-raised:#202020;
      --ink:#F2F0EA; --ink-muted:#ABA79C; --ink-faint:#908C83;
      --accent:#FFCF01; --accent-ink:#111111; --accent-soft:#3A2F00;
      --accent-text:#FFD84A; --logo-accent:#FFCF01;
      --secondary:#C9CDD2; --secondary-soft:#2A2E33;
      --line:#333333; --line-strong:#454545;
      --success:#57B37F; --success-soft:#1C3327;
      --warning:#E3A73B; --warning-soft:#3A2E10;
      --danger:#E07C71; --danger-soft:#3A2320;
      --shadow: 0 1px 2px rgba(0,0,0,.4), 0 12px 28px -14px rgba(0,0,0,.6);
      color-scheme: dark;
    }
  }
  :root[data-theme="dark"]{
    --bg:#141414; --surface:#1D1D1D; --surface-alt:#262626; --surface-raised:#202020;
    --ink:#F2F0EA; --ink-muted:#ABA79C; --ink-faint:#908C83;
    --accent:#FFCF01; --accent-ink:#111111; --accent-soft:#3A2F00;
    --accent-text:#FFD84A; --logo-accent:#FFCF01;
    --secondary:#C9CDD2; --secondary-soft:#2A2E33;
    --line:#333333; --line-strong:#454545;
    --success:#57B37F; --success-soft:#1C3327;
    --warning:#E3A73B; --warning-soft:#3A2E10;
    --danger:#E07C71; --danger-soft:#3A2320;
    --shadow: 0 1px 2px rgba(0,0,0,.4), 0 12px 28px -14px rgba(0,0,0,.6);
    color-scheme: dark;
  }

  html{scroll-behavior:smooth;}
  *{box-sizing:border-box;}
  body{margin:0;background:var(--bg);color:var(--ink);font-family:"Montserrat",system-ui,sans-serif;
    padding-inline:0; -webkit-font-smoothing:antialiased;font-size:16px;line-height:1.5;}
  h1,h2,h3,.disp{font-family:"Frank Ruhl Libre",Georgia,serif;font-weight:700;text-wrap:balance;}
  a{color:inherit;}
  button{font-family:inherit;}
  img{max-width:100%;}
  :focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px;}
  .wrap{max-width:1180px;margin-inline:auto;padding-inline:20px;}
  .eyebrow{font-family:"Montserrat",sans-serif;font-weight:800;font-size:.72rem;letter-spacing:.12em;
    text-transform:uppercase;color:var(--accent-text);}
  .nums{font-variant-numeric:tabular-nums;}

  /* ---- utility bar ---- */
  .utility{background:var(--ink);color:var(--bg);font-size:.8rem;}
  .utility .wrap{display:flex;justify-content:space-between;align-items:center;height:34px;gap:12px;overflow:hidden;}
  .utility .u-left{display:flex;gap:16px;color:var(--ink-faint);white-space:nowrap;}
  .utility .u-left b{color:var(--bg);font-weight:600;}
  .utility .u-right{display:flex;gap:10px;}
  .utility .u-right a{opacity:.75;}
  .utility .u-right a:hover{opacity:1;}

  /* ---- header / nav ---- */
  header.site{position:sticky;top:0;z-index:40;background:var(--surface);border-bottom:1px solid var(--line);}
  .headrow{display:flex;align-items:center;justify-content:space-between;min-height:72px;gap:16px;
    flex-wrap:wrap;padding-block:10px;}
  .head-spacer{flex:1;display:none;}
  .logo{font-family:"Montserrat",sans-serif;font-weight:800;
    font-size:2.5rem;letter-spacing:-.02em;white-space:nowrap;line-height:1;}
  /* Le logo est du grand texte : son seuil de contraste est de 3:1, non de
     4,5:1. Il peut donc porter un jaune plus franc que les petits accents,
     tout en restant conforme — le jaune pur de la marque, lui, plafonne à
     1,48:1 sur blanc et reste inutilisable en texte. */
  .logo .sn{color:var(--logo-accent, #B18100);margin-left:0;}
  @media (min-width:640px){
    .head-spacer{display:block;}
    .header-actions{flex:1;justify-content:flex-end;}
  }
  .topics-bar{background:var(--surface);border-bottom:1px solid var(--line);}
  .topics-bar .wrap{padding-block:7px;}
  nav.topics{display:flex;flex-wrap:wrap;gap:5px 16px;align-items:center;}
  nav.topics button{background:none;border:none;padding:2px 0;cursor:pointer;white-space:nowrap;
    font-family:"Montserrat",sans-serif;font-weight:700;font-size:.68rem;letter-spacing:.05em;
    text-transform:uppercase;color:var(--ink-muted);transition:color .15s ease;}
  nav.topics button:hover{color:var(--accent-text);}
  nav.topics button[aria-current="true"]{color:var(--accent-text);}

  .subnav{background:var(--surface-alt);border-top:1px solid var(--line);border-bottom:1px solid var(--line);}
  .subnav .wrap{padding-block:5px;}
  nav.main{display:flex;flex-wrap:wrap;gap:2px;row-gap:2px;}
  nav.main button{background:none;border:none;color:var(--ink-muted);font-weight:700;font-size:1.02rem;
    padding:9px 13px;border-radius:8px;cursor:pointer;transition:background .15s,color .15s;}
  nav.main button:hover{background:var(--surface);color:var(--ink);}
  nav.main button[aria-current="true"]{color:var(--ink);background:var(--surface);}
  nav.main button[aria-current="true"]::after{content:"";}
  .search-btn{background:var(--surface-alt);border:1px solid var(--line);border-radius:8px;height:38px;
    padding:0 12px;font-weight:600;font-size:.85rem;cursor:pointer;color:var(--ink-muted);}
  .header-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
  .theme-btn,.icon-btn{background:var(--surface-alt);border:1px solid var(--line);border-radius:8px;width:38px;height:38px;
    display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--ink-muted);
    transition:background .15s ease,color .15s ease,transform .15s ease;}
  .icon-btn{font-size:.95rem;}
  .theme-btn:hover,.icon-btn:hover{background:var(--accent-soft);color:var(--accent-text);transform:translateY(-1px);}

  /* ---- nav dropdowns ---- */
  nav.main button{white-space:nowrap;}
  .caret{font-size:.65em;margin-left:3px;opacity:.7;}
  .nav-drop{position:relative;}
  .drop-panel{display:none;position:absolute;top:100%;left:0;background:var(--surface);border:1px solid var(--line);
    border-radius:10px;box-shadow:var(--shadow);padding:6px;min-width:230px;z-index:50;}
  .nav-drop.open .drop-panel{display:block;}
  .drop-panel button{display:block;width:100%;text-align:left;background:none;border:none;color:var(--ink-muted);
    font-size:.86rem;font-weight:600;padding:8px 10px;border-radius:7px;cursor:pointer;transition:background .15s,color .15s;}
  .drop-panel button:hover{background:var(--surface-alt);color:var(--ink);}
  .drop-panel-right{left:auto;right:0;min-width:250px;}

  /* ---- account panel ---- */
  .account-panel{padding:14px;}
  .account-panel h4{margin:0 0 10px;font-size:.92rem;font-family:Montserrat,sans-serif;}
  .account-panel label{display:block;font-size:.74rem;font-weight:700;color:var(--ink-muted);margin:8px 0 3px;}
  .account-panel input{width:100%;padding:8px 9px;border-radius:7px;border:1px solid var(--line-strong);
    background:var(--surface);color:var(--ink);font-size:.85rem;}
  .account-panel .form-note{display:block;margin-top:10px;}

  /* ---- search overlay ---- */
  .search-overlay{background:var(--surface);border-bottom:1px solid var(--line);
    box-shadow:var(--shadow);}
  .search-overlay[hidden]{display:none;}
  .search-overlay .wrap{padding-block:16px;}
  .search-overlay input{width:100%;padding:12px 14px;border-radius:9px;border:1px solid var(--line-strong);
    background:var(--surface-alt);color:var(--ink);font-size:1rem;font-family:inherit;}
  .search-results{margin-top:10px;max-height:360px;overflow-y:auto;}
  .sr-item{display:flex;justify-content:space-between;gap:10px;padding:9px 10px;border-radius:8px;cursor:pointer;}
  .sr-item:hover{background:var(--surface-alt);}
  .sr-item .sr-type{font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--accent-text);
    flex:none;padding-top:2px;}
  .sr-item .sr-title{font-size:.9rem;color:var(--ink);}
  .sr-empty{color:var(--ink-faint);font-size:.88rem;padding:8px 10px;}

  .filter-chips{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0 20px;}
  .chip{border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-muted);font-size:.8rem;
    font-weight:700;padding:7px 13px;border-radius:999px;cursor:pointer;}
  .chip[aria-current="true"]{background:var(--ink);color:var(--bg);border-color:var(--ink);}

  @media (max-width:640px){
    nav.main button{font-size:.92rem;padding:8px 10px;}
  }

  main{display:block;}
  section.view{display:none;padding-block:34px 60px;}
  section.view.active{display:block;}

  /* ---- buttons ---- */
  .btn{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:.88rem;border-radius:8px;
    padding:10px 18px;border:1px solid transparent;cursor:pointer;text-decoration:none;
    transition:filter .15s,background .15s,transform .12s;}
  .btn-accent{background:var(--accent);color:var(--accent-ink);}
  .btn-accent:hover{filter:brightness(1.06);transform:translateY(-1px);}
  .btn-line{background:transparent;border-color:var(--line-strong);color:var(--ink);}
  .btn-line:hover{background:var(--surface-alt);transform:translateY(-1px);}
  .btn:active{transform:translateY(0);}
  .btn-sm{padding:7px 12px;font-size:.8rem;}

  /* ---- hero ---- */
  .hero{padding-block:30px 10px;}
  .hero-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:22px;}
  .lead-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:var(--shadow);
    transition:box-shadow .2s ease;}
  .lead-card:hover{box-shadow:0 2px 4px rgba(27,29,31,.09), 0 16px 34px -14px rgba(27,29,31,.26);}
  /* display:block est indispensable : le média est un lien, donc en ligne par
     défaut, et aspect-ratio n'a aucun effet sur un élément en ligne. */
  .lead-media{display:block;aspect-ratio:16/8.5;background:linear-gradient(135deg,var(--secondary),var(--ink));position:relative;}
  .lead-media .tag{position:absolute;left:16px;top:16px;background:var(--accent);color:var(--accent-ink);
    font-family:Montserrat,sans-serif;font-weight:800;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;
    padding:5px 10px;border-radius:6px;}
  .lead-media svg{position:absolute;inset:0;width:100%;height:100%;opacity:.5;}
  .lead-body{padding:22px 24px 26px;}
  .lead-body h2{font-size:clamp(1.35rem,1.05rem + 1.1vw,1.7rem);line-height:1.2;margin:8px 0 10px;font-weight:800;}
  .lead-body p{color:var(--ink-muted);line-height:1.6;margin:0 0 12px;font-size:1rem;}
  .meta{font-size:.8rem;color:var(--ink-faint);display:flex;gap:10px;align-items:center;flex-wrap:wrap;}
  .side-list{display:flex;flex-direction:column;gap:14px;}
  .mini-card{display:flex;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:12px;
    padding:12px;align-items:flex-start;}
  .mini-thumb{width:64px;height:64px;border-radius:8px;flex:none;position:relative;
    background:linear-gradient(160deg,var(--surface-alt),var(--line));}
  .mini-card h3{font-size:1.05rem;margin:0 0 4px;line-height:1.25;font-weight:700;}
  .mini-card .eyebrow{font-size:.62rem;}
  .mini-thumb.video{background:linear-gradient(160deg,var(--secondary),var(--ink));}
  .mini-thumb.video::after{content:"";position:absolute;inset:0;margin:auto;width:22px;height:22px;
    border-radius:999px;background:rgba(255,255,255,.92);
    clip-path:polygon(32% 22%, 32% 78%, 78% 50%);}
  .mini-thumb .dur{position:absolute;right:4px;bottom:3px;background:rgba(0,0,0,.68);color:#fff;
    font-size:.6rem;font-weight:700;padding:1px 4px;border-radius:4px;line-height:1.4;}
  .story-thumb, .mini-thumb, .article-hero-media{display:flex;align-items:center;justify-content:center;}
  .thumb-icon{opacity:.95;filter:drop-shadow(0 1px 2px rgba(0,0,0,.15));}
  .story-thumb .thumb-icon{width:36px;height:36px;}
  .mini-thumb .thumb-icon{width:24px;height:24px;}
  .mini-card:hover{transform:translateX(2px);box-shadow:var(--shadow);}
  .mini-card{transition:transform .18s ease, box-shadow .18s ease;}

  /* ---- section headings ---- */
  .sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin:38px 0 16px;
    border-bottom:2px solid var(--ink);padding-bottom:10px;}
  .sec-head h2{font-family:"Montserrat",sans-serif;font-weight:800;font-size:1.05rem;margin:0;
    text-transform:uppercase;letter-spacing:.03em;}
  .sec-head a{font-size:.85rem;font-weight:700;color:var(--secondary);text-decoration:none;white-space:nowrap;
    transition:color .15s ease;}
  .sec-head a:hover{color:var(--accent-text);}

  .story-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-flow:dense;gap:16px;}
  .story-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;overflow:hidden;
    transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease;}
  .story-card:hover{transform:translateY(-3px);box-shadow:var(--shadow);border-color:var(--line-strong);}
  .story-thumb{aspect-ratio:16/10;background:linear-gradient(150deg,var(--surface-alt),var(--line));}
  .story-card .pad{padding:12px 14px 16px;}
  .story-card h3{font-size:1.1rem;margin:6px 0 0;line-height:1.28;font-weight:700;}
  /* blocs de tailles variées ("à la une") : un tiers des cartes est mis en avant, sur le modèle
     éditorial de batiactu.com (une accroche plus grande entourée de brèves plus compactes) */
  .story-card.featured{grid-column:span 2;}
  .story-card.featured .story-thumb{aspect-ratio:21/9;}
  .story-card.featured h3{font-size:1.3rem;}
  .story-card.featured .excerpt{color:var(--ink-muted);font-size:.9rem;margin:8px 0 0;line-height:1.55;}

  .price-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;}
  .price-tile{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px 18px;
    transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease;}
  .price-tile:hover{transform:translateY(-3px);box-shadow:var(--shadow);border-color:var(--line-strong);}
  .price-tile .lbl{font-size:.72rem;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.06em;font-weight:600;}
  .price-tile .val{font-family:Montserrat,sans-serif;font-size:1.35rem;font-weight:800;margin-top:4px;color:var(--ink);}
  .price-tile .trend{font-size:.78rem;font-weight:700;margin-top:2px;}
  .t-up{color:var(--danger);} .t-down{color:var(--success);} .t-flat{color:var(--ink-faint);}

  .newsletter-band{margin-top:44px;background:var(--secondary-soft);border:1px solid var(--line);border-radius:14px;
    padding:26px 28px;display:flex;justify-content:space-between;align-items:center;gap:24px;flex-wrap:wrap;}
  .newsletter-band h3{margin:0 0 4px;font-size:1.15rem;}
  .newsletter-band p{margin:0;color:var(--ink-muted);font-size:.92rem;}
  .nl-form{display:flex;gap:8px;flex-wrap:wrap;}
  .nl-form input{padding:10px 12px;border-radius:8px;border:1px solid var(--line-strong);background:var(--surface);
    color:var(--ink);min-width:220px;font-size:.9rem;}
  .nl-msg{font-size:.85rem;color:var(--success);font-weight:600;}

  /* ---- module toolbars ---- */
  .module-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:6px;}
  .module-head h1{font-size:clamp(1.4rem,1.15rem + 0.9vw,1.85rem);margin:6px 0 4px;}
  .module-head .desc{color:var(--ink-muted);max-width:60ch;font-size:.95rem;}
  .auto-note{margin:8px 0 0;font-size:.78rem;color:var(--secondary);max-width:60ch;}
  .auto-note:empty{display:none;}
  .item-detail a.src-link, .article-body a.src-link{color:var(--secondary);font-weight:700;text-decoration:none;}
  .item-detail a.src-link:hover, .article-body a.src-link:hover{color:var(--accent-text);}
  .toolbar{display:flex;gap:10px;flex-wrap:wrap;background:var(--surface);border:1px solid var(--line);
    border-radius:12px;padding:14px;margin:20px 0 22px;}
  .toolbar select, .toolbar input[type="text"]{padding:9px 11px;border-radius:8px;border:1px solid var(--line-strong);
    background:var(--surface);color:var(--ink);font-size:.87rem;font-family:inherit;}
  .toolbar input[type="text"]{flex:1;min-width:180px;}
  .count-note{font-size:.85rem;color:var(--ink-faint);margin:0 0 14px;}

  .card-list{display:flex;flex-direction:column;gap:12px;}
  .item-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px 18px;
    display:flex;gap:16px;justify-content:space-between;flex-wrap:wrap;
    transition:box-shadow .18s ease, border-color .18s ease;}
  .item-card:hover{box-shadow:var(--shadow);border-color:var(--line-strong);}
  .item-main{flex:1;min-width:240px;}
  .item-main h3{margin:0 0 6px;font-size:1.15rem;line-height:1.25;}
  .item-main .org{color:var(--secondary);font-weight:700;font-size:.9rem;}
  .badges{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0 0;}
  .badge{font-size:.72rem;font-weight:700;padding:3px 9px;border-radius:999px;white-space:nowrap;}
  .badge-sector{background:var(--surface-alt);color:var(--ink-muted);}
  .badge-new{background:var(--accent-soft);color:var(--accent-text);}
  .badge-open{background:var(--success-soft);color:var(--success);}
  .badge-soon{background:var(--warning-soft);color:var(--warning);}
  .badge-closed{background:var(--danger-soft);color:var(--danger);}
  .badge-premium{background:var(--warning-soft);color:var(--warning);}
  .item-side{display:flex;flex-direction:column;align-items:flex-end;justify-content:space-between;gap:10px;min-width:150px;}
  .item-side .deadline{font-size:.82rem;color:var(--ink-muted);text-align:right;}
  .item-side .deadline b{color:var(--ink);font-family:Montserrat,sans-serif;}
  .item-detail{border-top:1px dashed var(--line);margin-top:12px;padding-top:12px;font-size:.92rem;
    color:var(--ink-muted);line-height:1.6;width:100%;}
  .item-detail[hidden]{display:none;}

  .company-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
  .company-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px;cursor:pointer;
    transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease;}
  .company-card:hover{transform:translateY(-3px);box-shadow:var(--shadow);border-color:var(--line-strong);}
  .company-top{display:flex;gap:12px;align-items:center;}
  .avatar{width:46px;height:46px;border-radius:9px;background:var(--secondary);color:#fff;font-family:Montserrat,sans-serif;
    font-weight:800;display:flex;align-items:center;justify-content:center;flex:none;font-size:.95rem;}
  .company-card h3{margin:0 0 2px;font-size:1.08rem;line-height:1.25;}
  .company-card .loc{font-size:.8rem;color:var(--ink-faint);}
  .company-card p{font-size:.87rem;color:var(--ink-muted);margin:10px 0 0;line-height:1.5;}
  .company-detail{border-top:1px dashed var(--line);margin-top:12px;padding-top:12px;font-size:.85rem;color:var(--ink-muted);}
  .company-detail[hidden]{display:none;}

  table.price-table{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--line);
    border-radius:12px;overflow:hidden;}
  table.price-table th, table.price-table td{padding:12px 14px;text-align:left;border-bottom:1px solid var(--line);font-size:.9rem;}
  table.price-table th{background:var(--surface-alt);font-family:Montserrat,sans-serif;font-size:.72rem;
    text-transform:uppercase;letter-spacing:.05em;color:var(--ink-muted);}
  table.price-table tr:last-child td{border-bottom:none;}
  .table-wrap{overflow-x:auto;}
  .src-note{font-size:.8rem;color:var(--ink-faint);margin-top:10px;}

  .form-panel{background:var(--surface-alt);border:1px solid var(--line);border-radius:12px;padding:18px;margin:0 0 22px;}
  .form-panel[hidden]{display:none;}
  .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
  .form-grid .full{grid-column:1/-1;}
  .form-panel label{display:block;font-size:.78rem;font-weight:700;color:var(--ink-muted);margin-bottom:4px;}
  .form-panel input,.form-panel select,.form-panel textarea{width:100%;padding:9px 10px;border-radius:8px;
    border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);font-family:inherit;font-size:.88rem;}
  .form-panel textarea{resize:vertical;min-height:70px;}
  .form-actions{display:flex;gap:10px;margin-top:12px;align-items:center;}
  .form-note{font-size:.78rem;color:var(--ink-faint);}

  /* ---- article page ---- */
  .article-wrap{display:grid;grid-template-columns:1.7fr 1fr;gap:32px;align-items:start;}
  .article-main h1{font-size:clamp(1.5rem,1.15rem + 1.4vw,2.1rem);line-height:1.22;margin:6px 0 4px;}
  .article-hero-media{aspect-ratio:16/7.5;border-radius:14px;margin:18px 0 22px;}
  .article-hero-media .thumb-icon{width:56px;height:56px;}
  .article-body p{color:var(--ink-muted);line-height:1.8;font-size:1.05rem;margin:0 0 16px;}
  .share-row{display:flex;align-items:center;gap:8px;margin-top:26px;padding-top:20px;border-top:1px solid var(--line);}
  .share-label{font-size:.82rem;font-weight:700;color:var(--ink-muted);margin-right:4px;}
  .paywall{background:var(--surface-alt);border:1px dashed var(--line-strong);border-radius:12px;padding:28px 24px;
    text-align:center;margin-top:10px;}
  .paywall-icon{font-size:1.8rem;margin-bottom:8px;}
  .paywall h3{margin:0 0 8px;font-size:1.1rem;}
  .paywall p{color:var(--ink-muted);font-size:.92rem;max-width:44ch;margin:0 auto 16px;}
  .article-side{display:flex;flex-direction:column;gap:22px;}
  .side-block h4{font-family:Montserrat,sans-serif;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;
    color:var(--ink-muted);margin:0 0 12px;border-bottom:1px solid var(--line);padding-bottom:8px;}
  .story-card[data-id]{cursor:pointer;}
  .mini-card[data-id]{cursor:pointer;}

  /* ---- ad slots ---- */
  .ad-slot{background:var(--surface);border:1px dashed var(--line-strong);border-radius:12px;padding:16px;text-align:center;}
  .ad-label{display:block;font-size:.65rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
    color:var(--ink-faint);margin-bottom:8px;}
  .ad-body{color:var(--ink-muted);font-size:.85rem;line-height:1.6;}
  .ad-body a{color:var(--secondary);font-weight:700;text-decoration:none;}
  .ad-banner{background:linear-gradient(120deg,var(--surface-alt),var(--surface));border:1px dashed var(--line-strong);
    border-radius:14px;padding:22px;text-align:center;}
  .ad-banner strong{display:block;font-size:1.02rem;}
  .ad-banner a{color:var(--secondary);font-weight:700;font-size:.85rem;text-decoration:none;}
  .ad-banner a:hover{color:var(--accent-text);}

  /* ---- espace abonné / plans ---- */
  .plan-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:26px 0;}
  .plan-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:22px;
    display:flex;flex-direction:column;gap:14px;position:relative;}
  .plan-card.highlight{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft) inset, var(--shadow);}
  .plan-card.highlight::before{content:"Recommandé";position:absolute;top:-11px;left:50%;transform:translateX(-50%);
    background:var(--accent);color:var(--accent-ink);font-size:.65rem;font-weight:800;letter-spacing:.05em;
    text-transform:uppercase;padding:4px 10px;border-radius:999px;}
  .plan-card h3{margin:0;font-size:1.15rem;}
  .plan-price{font-family:Montserrat,sans-serif;font-weight:800;font-size:1.5rem;}
  .plan-price span{font-size:.85rem;font-weight:600;color:var(--ink-muted);}
  .plan-card ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;flex:1;}
  .plan-card li{font-size:.88rem;color:var(--ink-muted);padding-left:20px;position:relative;line-height:1.4;}
  .plan-card li::before{content:"✓";position:absolute;left:0;color:var(--success);font-weight:800;}

  /* ---- régie publicitaire ---- */
  .ad-format-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin:24px 0;}
  .ad-format-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:18px;}
  .ad-format-card h3{margin:0 0 8px;font-size:1.05rem;}
  .ad-format-card p{color:var(--ink-muted);font-size:.88rem;margin:0 0 10px;line-height:1.5;}
  .ad-format-card .price{font-weight:700;color:var(--accent-text);font-size:.85rem;}

  /* ---- back-office (démonstration) ---- */
  .admin-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:22px 0 26px;}
  .admin-kpi{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:16px;}
  .admin-kpi .lbl{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);font-weight:700;}
  .admin-kpi .val{font-family:Montserrat,sans-serif;font-weight:800;font-size:1.55rem;margin-top:4px;}
  .admin-tabs{display:flex;gap:4px;flex-wrap:wrap;border-bottom:1px solid var(--line);margin-bottom:22px;}
  .admin-tabs button{background:none;border:none;padding:10px 6px;margin-right:16px;font-weight:700;font-size:.9rem;
    color:var(--ink-muted);cursor:pointer;border-bottom:2px solid transparent;transition:color .15s ease,border-color .15s ease;}
  .admin-tabs button:hover{color:var(--ink);}
  .admin-tabs button[aria-current="true"]{color:var(--ink);border-color:var(--accent);}
  .admin-row{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:14px 16px;
    display:flex;gap:14px;justify-content:space-between;align-items:center;flex-wrap:wrap;margin-bottom:10px;}
  .admin-row .admin-main{flex:1;min-width:220px;}
  .admin-row h4{margin:0 0 4px;font-size:.98rem;}
  .admin-row .admin-sub{font-size:.8rem;color:var(--ink-muted);}
  .admin-row .admin-actions{display:flex;gap:8px;flex-wrap:wrap;}
  .admin-section h3{font-size:1rem;font-family:Montserrat,sans-serif;margin:0 0 12px;}
  .admin-section{margin-bottom:30px;}
  .admin-empty{color:var(--ink-faint);font-size:.88rem;padding:10px 0;}
  .badge-pending{background:var(--warning-soft);color:var(--warning);}

  /* ---- live / dynamic elements ---- */
  .u-clock{display:inline-flex;align-items:center;gap:6px;color:var(--ink-faint);}
  .live-dot{width:6px;height:6px;border-radius:999px;background:#57B37F;flex:none;animation:pulseDot 1.7s ease-in-out infinite;}
  @keyframes pulseDot{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.35;transform:scale(.7);}}

  .ticker-band{background:var(--surface-alt);border-bottom:1px solid var(--line);}
  .ticker-band .wrap{display:flex;align-items:center;gap:16px;padding-block:10px;}
  .ticker-live{display:flex;align-items:center;gap:7px;flex:none;font-family:Montserrat,sans-serif;font-weight:800;
    font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-text);}
  .ticker-live .live-dot{background:var(--accent);}
  .ticker-track-wrap{flex:1;min-width:0;overflow:hidden;white-space:nowrap;
    mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent);
    -webkit-mask-image:linear-gradient(90deg,transparent,#000 28px,#000 calc(100% - 28px),transparent);}
  .ticker-track{display:inline-flex;gap:44px;width:max-content;animation:tickerScroll 42s linear infinite;}
  .ticker-band:hover .ticker-track{animation-play-state:paused;}
  .ticker-track a{color:var(--ink-muted);font-size:.85rem;font-weight:600;text-decoration:none;white-space:nowrap;transition:color .15s ease;}
  .ticker-track a:hover{color:var(--accent-text);}
  @keyframes tickerScroll{from{transform:translateX(0);}to{transform:translateX(-50%);}}

  .hero-dots{position:absolute;left:20px;bottom:14px;display:flex;gap:6px;z-index:2;}
  .hero-dots button{width:8px;height:8px;padding:0;border-radius:999px;border:none;cursor:pointer;
    background:rgba(255,255,255,.4);transition:background .2s ease,transform .2s ease;}
  .hero-dots button[aria-current="true"]{background:#fff;transform:scale(1.3);}
  .hero-fade{transition:opacity .22s ease;}
  .hero-fade.fading{opacity:0;}

  .most-read-list{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;}
  .most-read-item{display:flex;gap:10px;align-items:flex-start;background:var(--surface);border:1px solid var(--line);
    border-radius:12px;padding:14px;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;}
  .most-read-item:hover{transform:translateY(-3px);box-shadow:var(--shadow);border-color:var(--line-strong);}
  .most-read-rank{font-family:"Frank Ruhl Libre",Georgia,serif;font-weight:700;font-size:1.55rem;color:var(--line-strong);
    flex:none;line-height:1;}
  .most-read-item h4{margin:0 0 6px;font-size:.9rem;line-height:1.32;font-weight:700;}
  .most-read-views{font-size:.72rem;color:var(--ink-faint);font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:4px;}

  .trend-arrow{display:inline-block;animation:arrowPulse 2.2s ease-in-out infinite;}
  @keyframes arrowPulse{0%,100%{opacity:1;}50%{opacity:.45;}}
  .badge-new.pulse{animation:badgePulse 1.8s ease-in-out infinite;}
  @keyframes badgePulse{0%,100%{box-shadow:0 0 0 0 rgba(217,83,30,.35);}50%{box-shadow:0 0 0 5px rgba(217,83,30,0);}}

  @keyframes fadeInUp{from{opacity:0;transform:translateY(9px);}to{opacity:1;transform:translateY(0);}}
  .enter{animation:fadeInUp .38s ease both;}

  section.view.active{animation:viewFade .3s ease;}
  @keyframes viewFade{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}

  @media (prefers-reduced-motion:reduce){
    .ticker-track,.live-dot,.trend-arrow,.enter,section.view.active,.hero-fade{animation:none!important;transition:none!important;}
  }

  @media (max-width:900px){
    .hero-grid{grid-template-columns:1fr;}
    .story-grid{grid-template-columns:repeat(2,1fr);}
    .price-strip{grid-template-columns:repeat(2,1fr);}
    .company-grid{grid-template-columns:repeat(2,1fr);}
    .form-grid{grid-template-columns:1fr;}
    .article-wrap{grid-template-columns:1fr;}
    .plan-grid{grid-template-columns:1fr;}
    .ad-format-grid{grid-template-columns:1fr;}
    .account-forms-grid{grid-template-columns:1fr !important;}
    .admin-kpis{grid-template-columns:1fr 1fr;}
    .most-read-list{grid-template-columns:repeat(2,1fr);}
  }
  @media (max-width:560px){
    .story-grid{grid-template-columns:1fr;}
    .price-strip{grid-template-columns:1fr 1fr;}
    .company-grid{grid-template-columns:1fr;}
    .headrow{min-height:64px;height:auto;}
    .logo{font-size:1.7rem;}
    .most-read-list{grid-template-columns:1fr;}
    .u-clock{display:none;}
  }

  footer.site{background:var(--ink);color:var(--bg);margin-top:50px;}
  footer.site .wrap{padding-block:40px 26px;}
  /* Les colonnes s'ajustent au nombre réel de blocs : réserver cinq places
     quand deux sont remplies laisse un grand vide à droite. Avec auto-fit,
     les pistes inutilisées se replient d'elles-mêmes. */
  .foot-grid{display:grid;gap:24px;
    grid-template-columns:minmax(240px,1.4fr) repeat(auto-fit,minmax(170px,1fr));}
  .foot-grid h4{font-family:Montserrat,sans-serif;font-size:.8rem;text-transform:uppercase;letter-spacing:.06em;
    color:var(--accent-text);margin:0 0 12px;}
  .foot-grid a{display:block;color:#C9C4B8;text-decoration:none;font-size:.88rem;margin-bottom:8px;}
  .foot-grid a:hover{color:var(--bg);}
  .foot-about p{color:#B7B2A5;font-size:.88rem;line-height:1.6;max-width:34ch;}
  .foot-bottom{border-top:1px solid #33362f;margin-top:30px;padding-top:18px;display:flex;justify-content:space-between;
    gap:12px;flex-wrap:wrap;font-size:.78rem;color:#8d8878;}
  @media (max-width:820px){.foot-grid{grid-template-columns:1fr 1fr;}}

/* =====================================================================
 * Adaptation WordPress
 *
 * Le prototype était une page unique : sa navigation reposait sur des
 * <button> pilotés en JavaScript. WordPress produit de vrais liens <a>,
 * qui restent utilisables sans JavaScript. Cette section reprend donc les
 * mêmes styles pour les liens, et ajoute ce qu'un site WordPress apporte
 * en plus du prototype : pagination, accessibilité, pied de page.
 * ===================================================================== */

/* ---- Navigation : mêmes styles pour les liens que pour les boutons ---- */
nav.topics a{background:none;border:none;padding:2px 0;cursor:pointer;white-space:nowrap;
  font-family:"Montserrat",sans-serif;font-weight:700;font-size:.68rem;letter-spacing:.05em;
  text-transform:uppercase;color:var(--ink-muted);text-decoration:none;transition:color .15s ease;}
nav.topics a:hover{color:var(--accent-text);}
nav.topics a[aria-current]{color:var(--accent-text);}

nav.main{gap:2px;}
nav.main > a,
nav.main .drop-trigger{display:inline-block;background:none;border:none;color:var(--ink-muted);
  font-weight:700;font-size:1.02rem;padding:9px 13px;border-radius:8px;cursor:pointer;
  text-decoration:none;white-space:nowrap;transition:background .15s,color .15s;}
nav.main > a:hover,
nav.main .drop-trigger:hover{background:var(--surface);color:var(--ink);}
nav.main > a[aria-current],
nav.main .drop-trigger[aria-current],
nav.main > a.is-current,
nav.main .drop-trigger.is-current{color:var(--ink);background:var(--surface);}

.drop-panel a{display:block;width:100%;text-align:left;background:none;border:none;color:var(--ink-muted);
  font-size:.86rem;font-weight:600;padding:8px 10px;border-radius:7px;cursor:pointer;
  text-decoration:none;transition:background .15s,color .15s;}
.drop-panel a:hover{background:var(--surface-alt);color:var(--ink);}

/* Le panneau s'ouvre au survol et au clavier ; `open` reste accepté pour
   rester compatible avec le balisage du prototype. */
.nav-drop.is-open .drop-panel,
.nav-drop.open .drop-panel,
.nav-drop:hover .drop-panel,
.nav-drop:focus-within .drop-panel{display:block;}

/* ---- Logo cliquable ---- */
.logo a{color:inherit;text-decoration:none;}
.logo img{max-height:60px;width:auto;}

/* ---- Accessibilité ---- */
.screen-reader-text{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;}
.screen-reader-text:focus{position:fixed!important;top:10px;left:10px;z-index:100000;
  width:auto;height:auto;clip:auto;clip-path:none;padding:12px 18px;
  background:var(--accent);color:var(--accent-ink);border-radius:8px;font-weight:700;}

/* ---- Titres de page dans les en-têtes de section ---- */
.sec-head h1{margin:0;font-size:2.1rem;line-height:1.15;}
.sec-head{flex-wrap:wrap;}

/* ---- Pagination ---- */
.navigation.pagination{margin:34px 0 10px;}
.navigation.pagination .nav-links{display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
.navigation.pagination .page-numbers{display:inline-flex;align-items:center;justify-content:center;
  min-width:40px;height:40px;padding:0 12px;border-radius:8px;border:1px solid var(--line);
  background:var(--surface);color:var(--ink-muted);text-decoration:none;font-weight:700;font-size:.9rem;
  transition:background .15s,color .15s,border-color .15s;}
.navigation.pagination .page-numbers:hover{border-color:var(--line-strong);color:var(--ink);}
.navigation.pagination .page-numbers.current{background:var(--accent);border-color:var(--accent);
  color:var(--accent-ink);}
.navigation.pagination .page-numbers.dots{border-color:transparent;background:none;}

/* ---- Grilles des modules métier ---- */
.card-list{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;}
.company-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;}
@media (max-width:900px){
  .card-list,.company-grid{grid-template-columns:1fr;}
}

/* ---- Pied de page ---- */
.foot-col h2{font-family:Montserrat,sans-serif;font-size:.8rem;text-transform:uppercase;
  letter-spacing:.06em;color:var(--bg);margin:0 0 12px;}
.foot-bottom a{color:#8d8878;text-decoration:none;margin-left:14px;}
.foot-bottom a:hover{color:var(--bg);}
@media (max-width:820px){
  .foot-grid{grid-template-columns:1fr;}
}

/* ---- Contenu éditorial produit par l'éditeur de blocs ---- */
.article-body img,.article-body figure{max-width:100%;height:auto;}
.article-body .wp-block-image{margin:22px 0;}
.article-body blockquote{border-left:3px solid var(--accent);margin:22px 0;padding:2px 0 2px 18px;
  color:var(--ink-muted);font-style:italic;}

/* ---- Tableau des prix des matériaux ---- */
.price-table{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--line);
  border-radius:12px;overflow:hidden;font-size:.92rem;}
.price-table th,.price-table td{padding:12px 14px;text-align:left;border-bottom:1px solid var(--line);
  vertical-align:middle;}
.price-table thead th{background:var(--surface-alt);font-family:"Montserrat",sans-serif;font-weight:800;
  font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);white-space:nowrap;}
.price-table tbody th{font-weight:700;color:var(--ink);}
.price-table tbody tr:last-child th,
.price-table tbody tr:last-child td{border-bottom:none;}
.price-table tbody tr:hover{background:var(--surface-alt);}
.price-table .nums{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;}
.price-table thead th.nums{text-align:right;}
.price-table abbr.badge{margin-left:6px;font-size:.66rem;text-decoration:none;border:1px dashed var(--line-strong);
  color:var(--ink-faint);cursor:help;}
@media (max-width:700px){
  .price-table{font-size:.84rem;}
  .price-table th,.price-table td{padding:9px 10px;}
}

/* ---- Emplacements publicitaires et bandeau newsletter ---- */
.btpsn-ads{margin:18px 0;display:grid;gap:12px;}
.item-side .btpsn-ads,.article-side .btpsn-ads{margin-top:0;}
.newsletter-band .nl-content{display:flex;align-items:center;justify-content:space-between;
  gap:16px;flex-wrap:wrap;width:100%;}

/* ---- Images de cartes : remplir le cadre sans déformer ---- */
.story-thumb img,.lead-media img,.article-hero-media img,.mini-thumb img{
  width:100%;height:100%;object-fit:cover;display:block;}
.story-thumb,.lead-media,.article-hero-media,.mini-thumb{overflow:hidden;}

/* ---- Chapô de rubrique ---- */
/* Distinct de .lead-body, qui est le corps rembourré de la grande carte :
   confondre les deux donnait des marges intérieures aux textes d'introduction. */
.intro{color:var(--ink-muted);font-size:1.02rem;line-height:1.6;max-width:68ch;margin:6px 0 0;}
.lead-card .lead-body h3{font-size:clamp(1.35rem,1.05rem + 1.1vw,1.7rem);line-height:1.2;margin:8px 0 10px;}
.lead-card .lead-body p{color:var(--ink-muted);line-height:1.6;margin:0;font-size:1rem;}

/* ---- Grille des rubriques propres au site ---- */
/* Trois colonnes plutôt que deux : ces cartes n'ont ni badge ni métadonnées,
   les étaler sur toute la largeur les rendait inutilement hautes. */
.section-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;}
@media (max-width:900px){ .section-grid{grid-template-columns:repeat(2,1fr);} }
@media (max-width:640px){ .section-grid{grid-template-columns:1fr;} }

/* ---- Navigation mobile ----
   Sur un écran de téléphone, la barre de rubriques et le menu principal
   occupaient près de la moitié de la hauteur avant le moindre contenu. Ils
   se replient derrière un bouton, et les zones cliquables sont agrandies
   pour être atteignables au doigt. */
.menu-toggle{display:none;align-items:center;gap:7px;height:38px;padding:0 12px;
  background:var(--accent);color:var(--accent-ink);border:none;border-radius:8px;
  font-family:"Montserrat",sans-serif;font-weight:800;font-size:.8rem;cursor:pointer;}
.menu-toggle-label{letter-spacing:.04em;text-transform:uppercase;}

@media (max-width:900px){
  .menu-toggle{display:inline-flex;}
  .nav-panel{display:none;}
  .nav-panel.is-open{display:block;}

  /* Cibles tactiles : 44 px est la taille minimale confortable au doigt. */
  nav.main{flex-direction:column;gap:0;}
  nav.main > a,
  nav.main .drop-trigger{display:flex;align-items:center;min-height:44px;padding:10px 12px;
    border-bottom:1px solid var(--line);border-radius:0;}
  .nav-drop{width:100%;}
  .nav-drop .drop-panel{position:static;display:block;border:none;box-shadow:none;
    background:var(--surface-alt);padding:0 0 0 14px;min-width:0;}
  .drop-panel a{min-height:40px;display:flex;align-items:center;}
  nav.topics{gap:0;flex-direction:column;align-items:stretch;}
  nav.topics a{min-height:40px;display:flex;align-items:center;font-size:.72rem;}
  .header-actions{gap:6px;}
}

/* ---- Visibilité du focus au clavier ----
   Le jaune de la marque sert de repère de focus, mais il disparaîtrait sur un
   fond clair : on le double d'un liseré sombre pour qu'il reste visible
   partout. */
:focus-visible{outline:2px solid var(--ink);outline-offset:2px;
  box-shadow:0 0 0 4px var(--accent);border-radius:4px;}

/* ---- Pictogrammes en SVG ---- */
.btpsn-icon{display:block;}
.thumb-icon{color:var(--ink-faint);opacity:.7;}
.thumb-icon .btpsn-icon{width:40px;height:40px;}
.icon-btn .btpsn-icon{width:18px;height:18px;}
.paywall-icon .btpsn-icon{width:30px;height:30px;margin:0 auto;color:var(--ink-muted);}

/* ---- Bandeau d'identité ----
   Le logo retenu est en jaune et blanc sur fond transparent : sur un en-tête
   clair, son « .sn » et sa vague disparaîtraient. La bande qui le porte passe
   donc en sombre, ce qui rend aussi le jaune de la marque plus franc. Les
   commandes qui l'accompagnent sont reprises en conséquence. */
header.site.a-logo-image .headrow{background:var(--ink);margin:0;padding-inline:20px;}
header.site.a-logo-image .headrow .logo{padding-block:10px;}
header.site.a-logo-image .headrow .logo img{max-height:88px;width:auto;}
header.site.a-logo-image .headrow .logo a{color:#FFFFFF;}
header.site.a-logo-image .headrow .logo .sn{color:var(--accent);}

header.site.a-logo-image .headrow .icon-btn,
header.site.a-logo-image .headrow .theme-btn{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.22);
  color:#F2F0EA;}
header.site.a-logo-image .headrow .icon-btn:hover,
header.site.a-logo-image .headrow .theme-btn:hover{background:var(--accent);border-color:var(--accent);
  color:var(--accent-ink);}
header.site.a-logo-image .headrow .btn-line{border-color:rgba(255,255,255,.35);color:#F2F0EA;}
header.site.a-logo-image .headrow .btn-line:hover{background:var(--accent);border-color:var(--accent);
  color:var(--accent-ink);}

@media (max-width:900px){
  header.site.a-logo-image .headrow{padding-inline:14px;}
  header.site.a-logo-image .headrow .logo img{max-height:58px;}
}
