.cal-header{height:64px;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:0 1.2rem;position:sticky;top:0;z-index:100;background:rgba(14,9,25,.78);backdrop-filter:blur(16px);border-bottom:1px solid var(--border-subtle)}
[data-theme=light] .cal-header{background:rgba(255,255,255,.88)}
.header-left,.header-right{display:flex;align-items:center;gap:.65rem;min-width:0}.back-link,.cal-brand{text-decoration:none}.back-link{font-size:.7rem;color:var(--text-muted);font-weight:700}.cal-brand{font:800 .92rem var(--font-display);background:var(--gradient-brand);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.discord-state{padding:.28rem .48rem;border-radius:999px;border:1px solid var(--border-subtle);font-size:.56rem;color:var(--text-muted);white-space:nowrap}.discord-state.ok{color:#6ee7b7}.discord-state.off{color:#fbbf24}
.calendar-main{max-width:1440px;padding:1.2rem 1rem 3rem}.calendar-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;margin-bottom:.8rem}.calendar-hero h1{font:800 clamp(1.6rem,3vw,2.25rem) var(--font-display);letter-spacing:-.04em}.calendar-hero p{margin-top:.35rem;color:var(--text-muted);font-size:.78rem}.calendar-controls{display:flex;align-items:center;gap:.35rem;padding:.45rem}.compact-btn,.month-title,.filter-chip{border:1px solid var(--border-subtle);background:rgba(255,255,255,.04);color:var(--text-main)}.compact-btn{width:36px;height:36px}.month-title{min-width:175px;height:36px;padding:0 .7rem;font:800 .76rem var(--font-display)}.today-btn{height:36px;padding:.45rem .7rem}
.calendar-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.55rem .65rem;margin-bottom:.8rem}.filter-group,.legend{display:flex;align-items:center;gap:.35rem;flex-wrap:wrap}.filter-chip{padding:.38rem .55rem;border-radius:999px;font-size:.62rem;font-weight:800}.filter-chip.active{border-color:var(--border-focus);background:var(--accent-soft);color:var(--accent-hover)}.legend{font-size:.58rem;color:var(--text-muted)}.legend>span{display:flex;align-items:center;gap:.3rem}.legend-dot{width:7px;height:7px;border-radius:50%;display:inline-block}.legend-dot.tournament{background:#f4b740}.legend-dot.cinema{background:#38bdf8}.legend-dot.birthday{background:#ff5e91}.legend-dot.event{background:#9d5cff}
.calendar-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:.8rem}.month-panel,.upcoming-panel{padding:.8rem}.weekday-row,.month-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.4rem}.weekday-row{padding:0 .1rem .4rem;color:var(--text-muted);font-size:.55rem;font-weight:800;text-align:center}.month-grid{grid-auto-rows:minmax(118px,auto)}.calendar-loading{grid-column:1/-1;padding:2rem;text-align:center;color:var(--text-muted)}.day-cell{min-width:0;padding:.42rem;border:1px solid var(--border-subtle);border-radius:12px;background:rgba(255,255,255,.025);display:flex;flex-direction:column;gap:.28rem;overflow:hidden}.day-cell.outside{opacity:.4}.day-cell.today{border-color:var(--border-focus);box-shadow:inset 0 0 0 1px rgba(157,92,255,.15)}.day-number{display:flex;align-items:center;justify-content:space-between;font:800 .64rem var(--font-display)}.day-number small{font:.5rem var(--font-base);color:var(--accent-hover)}.day-events{display:flex;flex-direction:column;gap:.24rem;min-width:0}.event-chip{width:100%;display:flex;align-items:center;gap:.3rem;padding:.3rem .36rem;border:1px solid transparent;border-radius:8px;color:var(--text-main);text-align:left;font-size:.55rem;line-height:1.25;overflow:hidden}.event-chip span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-chip.tournament{background:rgba(244,183,64,.10);border-color:rgba(244,183,64,.28)}.event-chip.cinema{background:rgba(56,189,248,.10);border-color:rgba(56,189,248,.30)}.event-chip.birthday{background:rgba(255,94,145,.10);border-color:rgba(255,94,145,.28)}.event-chip.event{background:rgba(157,92,255,.10);border-color:rgba(157,92,255,.28)}.event-chip:hover{transform:none;filter:brightness(1.08)}.more-chip{font-size:.52rem;color:var(--text-muted);padding:.1rem .15rem}
.panel-heading h2{font:800 .95rem var(--font-display)}.upcoming-list{display:flex;flex-direction:column}.upcoming-item{display:grid;grid-template-columns:42px minmax(0,1fr);gap:.55rem;padding:.62rem 0;border-top:1px solid var(--border-subtle);background:transparent;color:inherit;text-align:left;width:100%}.upcoming-item:first-child{border-top:0}.upcoming-date{width:42px;height:42px;border:1px solid var(--border-subtle);border-radius:10px;display:grid;place-items:center;background:rgba(255,255,255,.03)}.upcoming-date strong,.upcoming-date span{display:block;text-align:center}.upcoming-date strong{font:800 .78rem var(--font-display)}.upcoming-date span{font-size:.48rem;color:var(--text-muted);text-transform:uppercase}.upcoming-copy{min-width:0}.upcoming-copy strong,.upcoming-copy span,.upcoming-copy small{display:block}.upcoming-copy strong{font-size:.67rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.upcoming-copy span{margin-top:.12rem;font-size:.56rem;color:var(--text-muted)}.upcoming-copy small{margin-top:.16rem;font-size:.52rem;color:var(--accent-hover)}
.modal-backdrop{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.68);display:grid;place-items:center;padding:1rem}.modal-backdrop[hidden]{display:none}.event-modal-card{position:relative;width:min(620px,100%);max-height:90vh;overflow:auto;background:var(--bg-deep-2);border:1px solid var(--border-card);border-radius:18px;padding:1.1rem;box-shadow:var(--shadow-md)}.editor-card{width:min(760px,100%)}.modal-close{position:absolute;right:.7rem;top:.7rem;width:34px;height:34px;border:1px solid var(--border-subtle);background:rgba(255,255,255,.04);color:var(--text-main);font-size:1.1rem}.event-modal-card h2{font:800 1.15rem var(--font-display);margin:.2rem 2.5rem .8rem 0}.detail-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem}.detail-box{padding:.62rem;border:1px solid var(--border-subtle);border-radius:10px;background:rgba(255,255,255,.025)}.detail-box span,.detail-box strong{display:block}.detail-box span{font-size:.52rem;color:var(--text-muted)}.detail-box strong{margin-top:.15rem;font-size:.68rem}.detail-description{margin-top:.7rem;color:var(--text-muted);font-size:.68rem;line-height:1.55;white-space:pre-wrap}.modal-actions{display:flex;justify-content:flex-end;gap:.45rem;margin-top:1rem;flex-wrap:wrap}
.event-form label{display:flex;flex-direction:column;gap:.3rem;color:var(--text-muted);font-size:.6rem;font-weight:700}.event-form input,.event-form select,.event-form textarea{width:100%;border:1px solid var(--border-subtle);border-radius:9px;background:rgba(255,255,255,.045);color:var(--text-main);padding:.62rem .68rem;outline:none;font:500 .74rem var(--font-base)}.event-form textarea{resize:vertical}.event-form input:focus,.event-form select:focus,.event-form textarea:focus{border-color:var(--border-focus);box-shadow:0 0 0 3px var(--accent-soft)}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem}.form-grid .wide{grid-column:1/-1}.check-row{flex-direction:row!important;align-items:center!important;gap:.45rem!important;padding:.55rem .65rem;border:1px solid var(--border-subtle);border-radius:9px;background:rgba(255,255,255,.025)}.check-row input{width:auto!important}.editor-section{margin-top:.75rem;padding:.75rem;border:1px solid var(--border-subtle);border-radius:12px;background:rgba(255,255,255,.02)}.editor-section[hidden]{display:none}.section-title{display:flex;flex-direction:column;gap:.12rem;margin-bottom:.55rem}.section-title strong{font-size:.7rem}.section-title small,.form-help,.birthday-age-preview{color:var(--text-muted);font-size:.56rem;line-height:1.45}.birthday-age-preview{margin:.55rem 0;padding:.5rem .6rem;border-radius:9px;background:var(--accent-soft);color:var(--accent-hover)}.reminder-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.45rem}.btn-danger{background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.35);color:#fb7185;padding:.6rem .8rem}.toast-stack{position:fixed;right:1rem;bottom:1rem;z-index:2000;display:grid;gap:.4rem}.toast{padding:.7rem .8rem;border:1px solid var(--border-card);border-radius:10px;background:var(--bg-deep-2);box-shadow:var(--shadow-md);font-size:.68rem}.toast.error{border-color:rgba(239,68,68,.45)}.toast.success{border-color:rgba(16,185,129,.45)}
@media(max-width:980px){.calendar-layout{grid-template-columns:1fr}.upcoming-panel{order:-1}.upcoming-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 .7rem}.calendar-hero{align-items:stretch;flex-direction:column}.calendar-controls{width:100%}.month-title{flex:1}}
@media(max-width:700px){.cal-header{height:auto;min-height:58px;padding:.45rem .65rem;align-items:flex-start}.header-left{flex-direction:column;align-items:flex-start;gap:.15rem}.header-right{margin-left:auto;flex-wrap:wrap;justify-content:flex-end}.discord-state{display:none}.calendar-main{padding:.8rem .55rem 2rem}.calendar-toolbar{align-items:flex-start;flex-direction:column}.legend{display:none}.month-panel{padding:.5rem}.weekday-row,.month-grid{gap:.2rem}.month-grid{grid-auto-rows:minmax(88px,auto)}.day-cell{padding:.28rem;border-radius:9px}.day-number{font-size:.57rem}.event-chip{padding:.25rem .27rem;font-size:.49rem}.event-chip .event-icon{display:none}.upcoming-list{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr}.form-grid .wide{grid-column:auto}.reminder-grid{grid-template-columns:1fr}.detail-meta{grid-template-columns:1fr}.today-btn{display:none}.month-title{min-width:0}.back-link{font-size:.62rem}.cal-brand{font-size:.78rem}}

/* --------------------------------------------------------------------------
   Navigation rapide mois / année
   -------------------------------------------------------------------------- */
.calendar-controls{flex-wrap:wrap}
.month-title{cursor:pointer;position:relative;padding-right:1.65rem;transition:border-color .16s ease,background .16s ease}
.month-title::after{content:"⌄";position:absolute;right:.6rem;top:50%;transform:translateY(-54%);color:var(--accent-hover);font-size:.8rem}
.month-title:hover,.month-title:focus-visible{border-color:var(--border-focus);background:var(--accent-soft);outline:none}
.subscribe-btn{white-space:nowrap}
.month-picker-card{width:min(470px,100%)}
.year-picker-row{display:grid;grid-template-columns:40px minmax(0,1fr) 40px;gap:.5rem;align-items:end;margin:.25rem 0 .85rem}
.year-input-label{display:flex;flex-direction:column;gap:.3rem;color:var(--text-muted);font-size:.58rem;font-weight:800;text-align:center}
.year-input-label input{width:100%;height:40px;border:1px solid var(--border-subtle);border-radius:10px;background:rgba(255,255,255,.045);color:var(--text-main);font:800 .9rem var(--font-display);text-align:center;outline:none}
.year-input-label input:focus{border-color:var(--border-focus);box-shadow:0 0 0 3px var(--accent-soft)}
.month-picker-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.45rem}
.month-choice{min-height:46px;padding:.55rem;border:1px solid var(--border-subtle);border-radius:10px;background:rgba(255,255,255,.035);color:var(--text-main);font:800 .68rem var(--font-display)}
.month-choice:hover,.month-choice:focus-visible{border-color:var(--border-focus);background:var(--accent-soft);outline:none}
.month-choice.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-hover)}

/* --------------------------------------------------------------------------
   Abonnement ICS personnel
   -------------------------------------------------------------------------- */
.subscription-card{width:min(680px,100%)}
.subscription-intro{margin:-.2rem 0 .8rem;color:var(--text-muted);font-size:.68rem;line-height:1.55}
.subscription-warning{display:grid;gap:.2rem;padding:.72rem .78rem;border:1px solid rgba(244,183,64,.28);border-radius:11px;background:rgba(244,183,64,.07);margin-bottom:.75rem}
.subscription-warning strong{font-size:.68rem;color:#fcd34d}.subscription-warning span{font-size:.59rem;line-height:1.5;color:var(--text-muted)}
.subscription-state{padding:.75rem;border:1px solid var(--border-subtle);border-radius:12px;background:rgba(255,255,255,.025)}
.subscription-state[hidden]{display:none}.subscription-state>strong{font-size:.72rem}.subscription-state>p{margin:.35rem 0 .7rem;color:var(--text-muted);font-size:.61rem;line-height:1.5}
.subscription-status-line{display:flex;align-items:center;gap:.42rem;margin-bottom:.7rem}.subscription-status-line strong{font-size:.7rem}.subscription-dot{width:8px;height:8px;border-radius:50%;background:var(--status-green);box-shadow:0 0 9px rgba(16,185,129,.45)}
.subscription-link-label{display:flex;flex-direction:column;gap:.3rem;color:var(--text-muted);font-size:.58rem;font-weight:800}
.subscription-link-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.4rem}.subscription-link-row input{min-width:0;width:100%;padding:.62rem .68rem;border:1px solid var(--border-subtle);border-radius:9px;background:rgba(255,255,255,.045);color:var(--text-main);font:500 .67rem ui-monospace,SFMono-Regular,Consolas,monospace;outline:none}
.subscription-link-row input:focus{border-color:var(--border-focus);box-shadow:0 0 0 3px var(--accent-soft)}
.subscription-meta{margin-top:.5rem;color:var(--text-muted);font-size:.55rem}.subscription-help{margin:.65rem 0 0!important}.subscription-actions{align-items:center}.subscription-actions .btn-danger{margin-left:auto}.subscription-actions a{text-decoration:none}

@media(max-width:700px){
  .calendar-controls{display:grid;grid-template-columns:36px minmax(0,1fr) 36px auto;gap:.3rem}
  .calendar-controls .subscribe-btn{height:36px;padding:.45rem .6rem;font-size:.62rem}
  .month-picker-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .subscription-link-row{grid-template-columns:1fr}.subscription-link-row .btn-secondary{width:100%}
  .subscription-actions{display:grid;grid-template-columns:1fr}.subscription-actions .btn-danger{margin-left:0}
  .subscription-actions>a,.subscription-actions>button{width:100%}
}

/* --------------------------------------------------------------------------
   Administration des clés d'abonnement
   -------------------------------------------------------------------------- */
.admin-keys-card{width:min(900px,100%)}
.admin-keys-intro{margin:-.2rem 0 .8rem;color:var(--text-muted);font-size:.68rem;line-height:1.55}
.admin-keys-toolbar{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-bottom:.65rem;color:var(--text-muted);font-size:.6rem}
.admin-keys-list{display:grid;gap:.55rem}
.admin-key-row{display:grid;grid-template-columns:minmax(180px,.9fr) minmax(0,1.6fr) auto;gap:.7rem;align-items:center;padding:.7rem;border:1px solid var(--border-subtle);border-radius:12px;background:rgba(255,255,255,.025)}
.admin-key-user{display:flex;align-items:center;gap:.55rem;min-width:0}.admin-key-avatar{width:34px;height:34px;display:grid;place-items:center;flex:0 0 34px;border-radius:50%;overflow:hidden;background:var(--gradient-brand-soft);border:1px solid var(--border-subtle)}.admin-key-avatar img{width:100%;height:100%;object-fit:cover}.admin-key-user strong,.admin-key-user small{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin-key-user strong{font-size:.68rem}.admin-key-user small{margin-top:.13rem;color:var(--text-muted);font-size:.52rem}
.admin-key-secret-wrap{min-width:0}.admin-key-secret{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:.5rem .58rem;border:1px solid var(--border-subtle);border-radius:9px;background:rgba(0,0,0,.14);color:var(--text-main);font:500 .58rem ui-monospace,SFMono-Regular,Consolas,monospace;transition:filter .14s ease}.admin-key-secret.is-blurred{filter:blur(5px);user-select:none;pointer-events:none}.admin-key-secret-wrap small{display:block;margin-top:.3rem;color:var(--text-muted);font-size:.49rem;line-height:1.35}
.admin-key-actions{display:flex;align-items:center;gap:.35rem}.admin-key-actions button{white-space:nowrap}
@media(max-width:760px){.admin-key-row{grid-template-columns:1fr}.admin-key-actions{justify-content:stretch}.admin-key-actions button{flex:1}.admin-keys-toolbar{align-items:flex-start;flex-direction:column}}
