.calendar-main{max-width:1600px;min-width:0;padding:28px}.calendar-main .heading h1{font-size:32px}.calendar-main .heading{margin-bottom:20px}.calendar{padding:0;overflow:hidden;margin-bottom:22px;border:1px solid var(--line)}.calendar-toolbar{padding:22px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}.calendar-toolbar>div:first-child{margin-right:auto}.calendar-toolbar h2{margin:4px 0 0;font-size:23px}.calendar-toolbar .eyebrow{font-size:12px}.calendar-views{display:flex;padding:4px;border-radius:14px;background:var(--soft);gap:2px}.calendar-views button{min-height:44px;padding:9px 14px;font-size:14px;border-radius:11px;color:var(--sub)}.calendar-views button.active{background:white;color:var(--ink);box-shadow:0 2px 6px #0000000d}.calendar-navigation{display:flex;gap:6px}.calendar-navigation button{min-height:44px;padding:8px 14px}.calendar-navigation button:first-child,.calendar-navigation button:last-child{font-size:24px;line-height:1}.calendar-scroll{overflow:auto;max-height:70vh;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;position:relative}.calendar-timeline{min-width:840px}.calendar-timeline.calendar-day{min-width:0}.calendar-head,.calendar-grid{display:grid;grid-template-columns:64px repeat(var(--days),minmax(0,1fr))}.calendar-head{position:sticky;top:0;z-index:5;background:var(--paper);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.calendar-date{display:flex;flex-direction:column;align-items:center;padding:12px 3px;min-height:70px;font-size:13px;border-left:1px solid var(--line)}.calendar-date strong{font-size:15px}.calendar-date.is-today strong{background:var(--blue);color:#fff;border-radius:20px;padding:1px 9px}.calendar-zone{font-size:10px;color:var(--sub);padding:10px 4px;overflow-wrap:anywhere;align-self:center}.calendar-grid{height:var(--height);position:relative}.calendar-hours{position:relative;background:var(--paper)}.calendar-hours span{position:absolute;right:9px;font-size:12px;color:var(--sub);line-height:16px}.calendar-column{position:relative;border-left:1px solid var(--line);background:var(--paper);min-width:0}.calendar-period{position:absolute;width:100%;overflow:hidden;pointer-events:none}.calendar-period>span{padding:5px 7px;display:block;font-size:12px;color:#656570;line-height:1.25}.period-closed,.period-absence,.period-break{background:repeating-linear-gradient(135deg,#f3f3f6,#f3f3f6 5px,#ebebf0 5px,#ebebf0 6px)}.period-absence{background:#e7e7ee}.period-exception-open{background:#eef7f3}.calendar-slot{position:absolute;width:100%;height:30px;border-top:1px solid #e9e9ef80;z-index:1;border-radius:0;padding:0}.calendar-slot:disabled{opacity:1;cursor:default}.calendar-slot:not(:disabled):hover,.calendar-slot:focus-visible{background:#0071e310;outline-offset:-2px}.calendar-event{position:absolute;z-index:2;display:flex;flex-direction:column;text-align:left;gap:1px;padding:5px 7px;border-radius:7px;border:1px solid #cbddef;border-left:3px solid #5286b2;background:#eaf2fa;color:#234f75;font-size:12px;line-height:1.35;overflow:auto;min-height:0;overscroll-behavior:contain}.calendar-event strong{font-size:14px}.calendar-event span,.calendar-event small{display:block;font-size:12px;overflow-wrap:anywhere}.calendar-event:hover{filter:brightness(.97);box-shadow:0 2px 6px #0001}.calendar-event:focus-visible{z-index:4;outline-offset:0}.calendar-event.status-completed{background:#edf4ee;border-color:#d0e0d3;border-left-color:#6b8874;color:#3e624a}.calendar-event.status-cancelled{background:#f4f4f6;border-color:#dddde3;border-left-color:#9d9da6;color:#74747e}.calendar-event.status-cancelled strong{text-decoration:line-through}.calendar-event.status-no_show{background:#f7f0ed;border-color:#e8d8d0;border-left-color:#ac8573;color:#805f50}.calendar-legend{display:flex;flex-wrap:wrap;gap:10px 18px;padding:16px 22px;font-size:12px;color:var(--sub);border-top:1px solid var(--line)}.calendar-legend-unavailable{margin-left:auto}.calendar-month-labels,.calendar-month{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.calendar-month-labels span{text-align:center;font-size:13px;color:var(--sub);padding:12px;border-top:1px solid var(--line)}.calendar-month-day{min-height:140px;padding:9px;display:flex;align-items:flex-start;flex-direction:column;gap:5px;border-top:1px solid var(--line);border-right:1px solid var(--line);text-align:left;min-width:0}.calendar-month-day:nth-child(7n){border-right:0}.calendar-month-day>strong{font-size:15px;border-radius:50%;width:28px;height:28px;text-align:center;line-height:28px}.calendar-month-day.is-today>strong{background:var(--blue);color:white}.calendar-month-day>span{font-size:12px;color:var(--sub)}.calendar-month-day.other-month{background:#fafafb;color:var(--sub)}.calendar-month-day:hover{background:#f0f5fb}.month-event{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;color:#345b7b}.month-event.status-cancelled{text-decoration:line-through;color:var(--sub)}.month-event.status-no_show{color:#805f50}.calendar-busy{font-style:normal;font-size:11px;color:#805f50;border-top:3px solid #ad8875;width:100%;padding-top:3px}.calendar-message{padding:50px 22px;color:var(--sub)}.calendar-selection{margin:0 22px 18px;padding:16px;border-radius:14px;background:var(--soft);font-size:14px}.calendar-selection p{margin:7px 0 12px}.calendar-main .modal-backdrop{z-index:60}.calendar-main .dashboard-periods{margin-top:22px}
@media(max-width:1100px){.calendar-toolbar{gap:12px}.calendar-toolbar>div:first-child{width:100%}.calendar-navigation{margin-left:auto}}
@media(max-width:720px){.calendar-main{padding:22px 12px 100px}.calendar-main .heading h1{font-size:30px}.calendar-toolbar{padding:16px 12px;gap:10px}.calendar-toolbar h2{font-size:20px}.calendar-views button{padding:9px 11px}.calendar-navigation{width:100%;justify-content:space-between;margin:0}.calendar-head,.calendar-grid{grid-template-columns:52px repeat(var(--days),minmax(0,1fr))}.calendar-scroll{max-height:65vh}.calendar-day .calendar-event{font-size:14px;padding:6px 10px}.calendar-day .calendar-event strong{font-size:15px}.calendar-month-day{padding:5px;min-height:93px}.calendar-month-day>strong{font-size:14px}.calendar-month-labels span{padding:10px 2px;font-size:12px}.calendar-month-day .month-event{display:none}.calendar-month-day .calendar-busy{font-size:0}.calendar-legend{padding:14px 12px;gap:8px 12px}.calendar-legend-unavailable{width:100%;margin:0}.calendar-selection{margin:0 12px 12px}.calendar .secondary{font-size:14px}}
.calendar .calendar-event small{display:inline}.calendar .calendar-zone{font-size:12px}.calendar-hours{position:sticky!important;left:0;z-index:3}.calendar-head .calendar-zone{position:sticky;left:0;z-index:6;background:var(--paper);align-self:stretch;display:grid;place-items:center}
.calendar-selection{position:fixed;inset:0;z-index:80;margin:0;padding:18px;background:#1d1d1f66;display:flex;justify-content:flex-end;align-items:stretch}.calendar-selection .manual-modal{width:min(560px,100%);max-height:calc(100vh - 36px);overflow:auto;box-shadow:0 20px 60px #0003}.manual-new-customer{display:grid;gap:10px;padding:14px;border-radius:14px;background:var(--soft)}.manual-options{display:grid;gap:8px;max-height:180px;overflow:auto}.manual-options legend{font-size:15px;font-weight:600}.calendar .calendar-zone{font-size:0}@media(max-width:720px){.calendar-selection{padding:0;align-items:flex-end}.calendar-selection .manual-modal{width:100%;max-height:92vh;border-radius:22px 22px 0 0;padding:21px}}
.calendar .calendar-zone{display:none}
.calendar .calendar-zone{display:grid;visibility:hidden;font-size:0}
.calendar-period-title{font:inherit;font-size:inherit;font-weight:inherit;text-align:left;padding:0;border:0;background:none;cursor:pointer;border-radius:8px}.calendar-period-title:hover,.calendar-period-title:focus-visible{text-decoration:underline;text-underline-offset:5px}.calendar-date-picker{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.calendar-navigation{display:flex;align-items:center;gap:6px;margin-left:0}.calendar-navigation button{white-space:nowrap}@media(max-width:720px){.calendar-navigation{gap:4px}.calendar-navigation button{padding:8px 11px}.calendar-toolbar .calendar-period-title{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}
.calendar-scroll{touch-action:pan-x pan-y}
.manual-exception-warning{margin:0;padding:14px 16px;border-radius:14px;background:#fff4ed;color:#9a3412;font-size:.95rem;line-height:1.45}
.calendar-event.is-exceptional{outline:2px solid rgba(154,52,18,.28);outline-offset:-2px}

/* Rendez-vous lisibles sans jamais dépasser leur bloc. */
.calendar-event{overflow:hidden;min-width:0;min-height:0;justify-content:flex-start}
.calendar-event strong,.calendar-event span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.calendar-event strong{font-weight:700}
.calendar-event.event-tiny span{display:none}
.calendar-event.event-small .event-time{display:none}
.month-event{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* Appointment detail and schedule editing share one aligned workspace. */
.appointment-workspace{display:grid;grid-template-columns:repeat(2,minmax(0,520px));gap:18px;width:min(1058px,100%);max-height:calc(100vh - 36px);align-items:stretch}
.appointment-workspace>.modal{width:auto;max-height:calc(100vh - 36px);overflow:auto;min-height:0}
.appointment-detail-panel,.appointment-edit-panel{display:flex;flex-direction:column}
.appointment-edit-panel .form{max-width:none;gap:13px}
.appointment-edit-panel .edit-panel-heading{margin-bottom:2px;align-items:flex-start}
.appointment-edit-panel .edit-panel-heading h2{margin:4px 0 0}
@media(max-width:900px){.appointment-workspace{grid-template-columns:minmax(0,1fr);width:min(620px,100%);max-height:calc(100vh - 36px)}.appointment-workspace>.modal{max-height:calc(100vh - 36px)}}
@media(max-width:720px){.appointment-workspace{display:block;width:100%;max-height:92vh}.appointment-workspace>.modal{max-height:92vh;border-radius:22px 22px 0 0}.appointment-workspace.is-editing .appointment-detail-panel{display:none}.appointment-workspace.is-editing .appointment-edit-panel{display:flex}.appointment-edit-panel .edit-panel-heading{position:sticky;top:-21px;padding-bottom:12px;background:var(--paper);z-index:1}}

/* Appointment actions use a clear primary, secondary, and overflow hierarchy. */
.appointment-actions{display:grid;gap:12px;margin-top:22px}
.appointment-actions-primary{display:flex}
.appointment-actions-primary .primary{width:100%}
.appointment-actions-secondary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.appointment-actions-secondary .secondary{width:100%}
.appointment-actions-more{position:relative;display:flex;justify-content:flex-start}
.appointment-actions-trigger{color:var(--sub);padding-inline:14px}
.appointment-actions-menu{position:absolute;left:0;bottom:calc(100% + 8px);z-index:4;display:grid;gap:3px;min-width:220px;padding:8px;background:var(--paper);border:1px solid var(--line);border-radius:14px;box-shadow:0 12px 35px #0002}
.appointment-actions-menu button{padding:11px 13px;text-align:left;border-radius:9px}
.appointment-actions-menu button:hover,.appointment-actions-menu button:focus-visible{background:var(--soft)}
@media(max-width:720px){.appointment-actions{gap:10px}.appointment-actions-secondary{grid-template-columns:1fr}.appointment-actions-more{width:auto;align-items:flex-start}.appointment-actions-trigger{width:auto;min-height:40px;padding:8px 12px;font-size:13px}.appointment-actions-menu{position:absolute;left:0;bottom:calc(100% + 8px);width:min(260px,calc(100vw - 40px));min-width:0;margin:0;padding:6px;background:var(--paper);box-shadow:0 12px 32px #0003}.appointment-actions-menu button{min-height:44px;padding:10px 12px;white-space:normal}.appointment-actions-menu [data-action="cancel-appointment"]{color:var(--danger)}}
.appointment-cancel-confirmation,.appointment-delete-confirmation{border-top:1px solid var(--line);padding-top:18px}
.appointment-cancel-confirmation h3,.appointment-delete-confirmation h3{margin:0 0 8px}
.appointment-delete-confirmation .notice{margin-top:12px}
.appointment-delete-confirmation .catalog-check{align-items:flex-start;line-height:1.45}
.appointment-delete-confirmation .danger,.appointment-actions-menu [data-action="start-delete-appointment"]{color:var(--danger)}
.appointment-delete-blocked{display:block;padding:10px 13px;line-height:1.4}
@media(max-width:720px){.appointment-cancel-confirmation .form-actions,.appointment-delete-confirmation .form-actions{grid-template-columns:1fr}.appointment-delete-confirmation{padding-top:16px}}
