  /* ---------- CALENDRIER ---------- */
  .panel{background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); padding:16px; box-shadow:var(--shadow);}
  .cal-toggle{display:flex; gap:4px; background:var(--bg); padding:4px; border-radius:999px; margin-bottom:14px; width:fit-content;}
  .cal-tab{border:none; background:none; padding:7px 16px; border-radius:999px; font-size:12.5px; font-weight:600; color:var(--ink-soft);}
  .cal-tab.active{background:var(--surface); color:var(--ink); box-shadow:var(--shadow);}
  .cal-view{display:none;}
  .cal-view.active{display:block;}

  .month-header{display:flex; align-items:center; justify-content:space-between; margin-bottom:10px;}
  .month-label{font-family:'Fraunces',serif; font-size:15px; font-weight:600; text-transform:capitalize;}
  .month-nav{width:28px; height:28px; border-radius:50%; border:1px solid var(--border); background:var(--surface); color:var(--ink-soft); display:flex; align-items:center; justify-content:center; padding:0;}
  .month-nav:hover{color:var(--ink); border-color:var(--ink-soft);}
  .month-nav svg{width:13px; height:13px;}
  .month-dows{display:grid; grid-template-columns:repeat(7,1fr); margin-bottom:4px;}
  .month-dows span{text-align:center; font-family:'IBM Plex Mono',monospace; font-size:9px; color:var(--ink-soft); text-transform:uppercase;}
  .month-grid{display:grid; grid-template-columns:repeat(7,1fr); gap:4px; margin-bottom:14px; width:100%;}
  .month-cell{aspect-ratio:1; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; border-radius:9px; font-size:12.5px; cursor:pointer; background:var(--bg); border:1.5px solid transparent;}
  .month-cell.other{opacity:.3;}
  .month-cell.today{border-color:var(--accent);}
  .month-cell.sel{background:var(--action); color:#fff;}
  .month-cell .mc-dot{width:4px; height:4px; border-radius:50%; background:var(--accent-fill);}
  .month-cell.sel .mc-dot{background:#fff;}

  .day-strip{display:flex; gap:7px; overflow-x:auto; padding-bottom:4px; margin-bottom:14px;}
  .day-strip::-webkit-scrollbar{display:none;}
  .day-pill{flex:0 0 auto; width:46px; text-align:center; padding:9px 0 8px; border-radius:13px; border:1px solid var(--border); background:var(--surface); cursor:pointer;}
  .day-pill .n{font-family:'IBM Plex Mono',monospace; font-size:9.5px; color:var(--ink-soft); text-transform:uppercase;}
  .day-pill .d{font-family:'Fraunces',serif; font-size:16px; margin-top:2px;}
  .day-pill.sel{background:var(--action); border-color:var(--action);}
  .day-pill.sel .n, .day-pill.sel .d{color:var(--on-action);}
  .day-pill .dot2{width:4px; height:4px; border-radius:50%; background:var(--accent-fill); margin:4px auto 0;}
  .clear-day{display:flex; align-items:center; gap:6px; background:none; border:none; color:var(--ink-soft); font-size:12px; margin-top:14px; padding:4px 2px;}
  .gcal-connect{display:flex; align-items:center; gap:8px; width:100%; margin-top:14px; padding:11px 14px; border:1.5px dashed var(--border-soft); background:none; border-radius:12px; font-size:12.5px; font-weight:600; color:var(--ink-soft);}
  .gcal-connect:hover{border-color:var(--ink-soft); color:var(--ink);}
  .gcal-connect.connected{border:1.5px solid var(--sam); background:#E1E8D8; color:#3E5238;}
  .gcal-connect svg{width:15px; height:15px; flex-shrink:0;}
  .clear-day:hover{color:var(--ink);}
  .clear-day svg{width:14px; height:14px;}


  /* L'agenda Google : l'état sous le bouton, parce qu'un bouton « connecté » qui
     ne dit ni à quel compte ni depuis quand ne se vérifie pas. */
  .gcal-etat{
    margin-top:7px; padding:0 4px;
    font-family:'IBM Plex Mono',monospace; font-size:9.5px; line-height:1.5;
    letter-spacing:.03em; color:var(--ink-soft);
  }
  .gcal-etat.en-erreur{color:#D6362C;}
  .gcal-actions{display:flex; gap:7px; margin-top:9px;}
  .gcal-actions button{
    flex:1; border:1px solid var(--border-soft); background:var(--bg);
    border-radius:999px; padding:9px 12px; font-size:12px; font-weight:600;
    color:var(--ink); font-family:'Inter',sans-serif;
  }
  .gcal-actions button:hover{border-color:var(--ink-soft);}
  .gcal-actions .gcal-unlink{color:#D6362C;}
  .gcal-actions .gcal-unlink:hover{border-color:#D6362C;}

  /* Le bouton Google, tant que ce n'est pas ouvert : visible, expliqué, inerte.
     Le retirer donnerait l'impression que ça n'existe pas ; le laisser actif
     serait un mensonge. */
  .gcal-connect.bientot{opacity:.55; cursor:default;}
  .gcal-connect.bientot:hover{border-color:var(--border);}

  /* L'abonnement. Séparé du bloc Google par un trait : ce sont deux chemins
     différents vers le même endroit, pas deux réglages du même. */
  .ics-bloc{margin-top:18px; padding-top:16px; border-top:1px solid var(--border);}
  .ics-titre{
    font-family:'IBM Plex Mono',monospace; font-size:10px; text-transform:uppercase;
    letter-spacing:.07em; color:var(--ink-soft); margin-bottom:9px;
  }
  .ics-vide p{margin:0 0 11px; font-size:12.5px; line-height:1.5; color:var(--ink-soft);}
  .ics-primaire{
    width:100%; border:none; border-radius:999px; background:var(--action); color:#fff;
    padding:12px; font-size:13px; font-weight:600; font-family:'Inter',sans-serif;
  }
  .ics-primaire:hover{opacity:.88;}

  /* Le lien est long et doit rester lisible : il se coupe n'importe où plutôt
     que de déborder de l'écran. */
  .ics-lien{
    display:block; background:var(--bg); border:1px solid var(--border-soft);
    border-radius:10px; padding:10px 12px; margin-bottom:8px;
    font-family:'IBM Plex Mono',monospace; font-size:10px; line-height:1.5;
    color:var(--ink); word-break:break-all; user-select:all;
  }
  .ics-actions{display:flex; gap:6px;}
  .ics-actions button{
    flex:1; border:1px solid var(--border-soft); background:var(--bg); border-radius:999px;
    padding:9px 8px; font-size:12px; font-weight:600; color:var(--ink); font-family:'Inter',sans-serif;
  }
  .ics-actions button:hover{border-color:var(--ink-soft);}
  .ics-actions .ics-retirer{color:#D6362C;}
  .ics-actions .ics-retirer:hover{border-color:#D6362C;}
  .ics-etat{
    margin-top:9px; font-family:'IBM Plex Mono',monospace; font-size:9.5px;
    line-height:1.5; letter-spacing:.03em; color:var(--ink-soft);
  }
  .ics-aide{margin-top:11px;}
  .ics-aide summary{
    font-size:12px; font-weight:600; color:var(--ink); cursor:pointer; list-style:none;
    padding:7px 0; border-top:1px solid var(--border);
  }
  .ics-aide summary::-webkit-details-marker{display:none;}
  .ics-aide summary::before{content:'▸ '; color:var(--ink-soft);}
  .ics-aide[open] summary::before{content:'▾ ';}
  .ics-aide p{margin:0 0 8px; font-size:12px; line-height:1.55; color:var(--ink-soft);}
  .ics-aide .ics-avertissement{color:var(--ink); background:var(--bg); border-radius:9px; padding:9px 11px;}
