/* Calendoom — feuille de style principale.
   Les polices sont chargees par <link> dans index.html (plus rapide qu'un @import,
   qui obligerait le navigateur a attendre ce fichier avant de les demander). */
*{box-sizing:border-box;margin:0;padding:0;}
html,body{background:#f5f4f0;}
.app{font-family:'Space Mono',monospace;background:#f5f4f0;color:#4a5568;height:100vh;height:100dvh;display:flex;flex-direction:column;overflow:hidden;}
/* z-index 70 : la topbar cree un contexte d'empilement (sticky + z-index), donc
   ses menus deroulants sont plafonnes a CETTE valeur vis-a-vis de l'exterieur.
   Elle doit donc rester au-dessus de l'axe des dates (60) et des en-tetes de bloc (55). */
.topbar{display:flex;align-items:center;gap:6px;padding:0 16px;height:48px;background:#ffffff;border-bottom:1px solid #e2e0d9;position:sticky;top:0;z-index:70;flex-shrink:0;}
.topbar-row1{display:contents;}
.topbar-row2{display:contents;}
.topbar-left{display:flex;align-items:center;gap:2px;margin-right:auto;}
.topbar-logo-group{position:absolute;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:6px;pointer-events:none;}
.topbar-emoji-always{font-size:18px;line-height:1;}
.topbar h1{font-family:'Plus Jakarta Sans',sans-serif;font-size:18px;font-weight:700;letter-spacing:-.01em;color:#1a202c;pointer-events:auto;transition:opacity .4s ease,transform .4s ease;}
.topbar h1.melting{animation:logo-melt 1.1s ease-in forwards;}
@keyframes logo-melt{0%{transform:translateY(0) scaleY(1);filter:blur(0);opacity:1;}55%{transform:translateY(5px) scaleY(.72) skewX(-2deg);filter:blur(.6px);opacity:.5;letter-spacing:.06em;}100%{transform:translateY(13px) scaleY(.12);filter:blur(3px);opacity:0;}}
.logo-melt-face{position:absolute;left:50%;top:50%;font-size:20px;pointer-events:none;animation:face-pop 2.4s ease-out forwards;}
@keyframes face-pop{0%{opacity:0;transform:translate(-50%,-30%) scale(.4);}22%{opacity:1;transform:translate(-50%,-50%) scale(1);}32%{transform:translate(-50%,-50%) scale(1) rotate(-7deg);}45%{transform:translate(-50%,-50%) scale(1) rotate(6deg);}58%{transform:translate(-50%,-50%) scale(1) rotate(0);}82%{opacity:1;}100%{opacity:0;transform:translate(-50%,-58%) scale(.85);}}
.tbr{display:flex;gap:2px;align-items:center;}
.btn{background:transparent;border:none;color:#a0aec0;padding:0;width:28px;height:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:4px;transition:background .1s,color .1s;flex-shrink:0;}
.btn:hover{background:#f0ede8;color:#2d3748;}
.btn.on{background:#ebf5ff;color:#2b6cb0;}
.btn.arch-on{background:#fef9c3;color:#854d0e;}
.btn-txt{background:transparent;border:none;color:#a0aec0;padding:4px 9px;font-family:'Space Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.08em;cursor:pointer;border-radius:20px;transition:all .15s;flex-shrink:0;}
.btn-today{background:transparent;border:1.5px solid #e2e0d9;color:#718096;padding:3px 9px;font-family:'Space Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.08em;cursor:pointer;border-radius:20px;transition:all .15s;flex-shrink:0;margin-right:4px;}
.btn-today:hover{border-color:#3b82f6;color:#2b6cb0;background:#ebf5ff;}
.tnav{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-right:4px;}
.tnav .btn-today{margin-right:0;}
.btn-nav{background:transparent;border:1.5px solid #e2e0d9;color:#718096;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:6px;transition:all .15s;flex-shrink:0;font-size:15px;line-height:1;padding:0;}
.btn-nav:hover{border-color:#3b82f6;color:#2b6cb0;background:#ebf5ff;}
.btn-txt:hover{background:#f0ede8;color:#2d3748;}
.btn-txt.on{background:#1a202c;color:#fff;}
.bni{background:transparent;border:none;color:#a0aec0;width:28px;height:28px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:4px;transition:background .1s,color .1s;}
.bni:hover{background:#f0ede8;color:#2d3748;}
.vsep{width:1px;height:16px;background:#e2e0d9;margin:0 4px;}
.tl-wrap{display:flex;align-items:stretch;}.hscroll{overflow-x:auto;overflow-y:auto;flex:1;scrollbar-width:thin;scrollbar-color:#e2e0d9 transparent;}
.scroll-body{flex:1;overflow:hidden;display:flex;flex-direction:column;min-height:0;}
.focus-strip{background:#f0e9d8;border-bottom:1px solid #e0d6bd;flex-shrink:0;}
.focus-strip-head{display:flex;align-items:center;gap:8px;padding:6px 14px 0;}
.fs-title{font-family:'Space Mono',monospace;font-size:11px;font-weight:700;letter-spacing:.16em;color:#6b6450;flex-shrink:0;}
.fs-meta{font-family:'Space Mono',monospace;font-size:11px;color:#a99f85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.fs-plan{margin-left:auto;background:transparent;border:none;font-family:'Space Mono',monospace;font-size:11px;font-weight:700;color:#2b6cb0;cursor:pointer;white-space:nowrap;flex-shrink:0;padding:2px 4px;}
.fs-plan:hover{text-decoration:underline;}
.fs-collapse{background:transparent;border:none;color:#b3a98e;cursor:pointer;font-size:14px;line-height:1;padding:2px 4px;flex-shrink:0;}
.focus-strip-chips{display:flex;gap:7px;padding:7px 14px;overflow-x:auto;scrollbar-width:none;}
.focus-strip-chips::-webkit-scrollbar{display:none;}
.fs-chip{display:flex;align-items:center;gap:7px;background:#fcfaf4;border:1px solid #e4dcc8;border-radius:6px;padding:4px 10px;cursor:pointer;flex-shrink:0;transition:background .1s,border-color .1s;}
.fs-chip:hover{background:#fff;border-color:#d4c9ad;}
.fs-chip.factu{background:#fdf6e7;border-color:#f3dba6;}
.fs-chip.factu:hover{background:#fbeecd;}
.fs-chip-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.fs-chip-txt{line-height:1.2;white-space:nowrap;text-align:left;display:flex;flex-direction:column;}
.fs-chip-label{font-family:'Plus Jakarta Sans',sans-serif;font-size:11px;font-weight:700;color:#1a202c;}
.fs-chip-sub{font-family:'Space Mono',monospace;font-size:11px;color:#8a8270;}
.fs-redo{background:#ece4d0;border:none;color:#5a5340;font-family:'Space Mono',monospace;font-size:10px;font-weight:700;border-radius:4px;padding:3px 7px;cursor:pointer;flex-shrink:0;margin-left:3px;white-space:nowrap;letter-spacing:.03em;transition:background .1s,color .1s;}
.fs-redo:hover{background:#2b6cb0;color:#fff;}
.fs-done{font-size:11px;padding:3px 8px;}
.fs-done:hover{background:#16a34a;color:#fff;}
.fs-collapsed{display:flex;align-items:center;gap:8px;padding:6px 14px;cursor:pointer;}
.fs-collapsed:hover{background:#ece4d0;}
@media(max-width:768px){
  .focus-strip-head{display:none;}
  .focus-strip-chips{padding:6px 10px;gap:6px;}
  .fs-chip-plan{background:#e8f0fa;border-color:#bcd9f5;}
}
.dhdr{height:36px;position:sticky;top:0;z-index:60;border-bottom:1px solid #e2e0d9;background:#fafaf8;}
.dhdr-inner{position:relative;height:100%;overflow:hidden;}
.dtick{position:absolute;bottom:0;width:1px;height:5px;background:#ddd9d2;}
.dtick.mj{height:10px;background:#b0aaa0;}
.dlbl{position:absolute;top:4px;transform:translateX(-50%);font-size:9px;color:#a0aec0;white-space:nowrap;pointer-events:none;font-family:"Plus Jakarta Sans",sans-serif;letter-spacing:.04em;}
.dlbl.mj{color:#4a5568;font-weight:600;font-size:9px;}
.dlbl.rot{top:50%;transform:translateX(-50%) translateY(-50%) rotate(-90deg);transform-origin:center;font-size:9px;color:#5a6a80;letter-spacing:.04em;font-weight:600;}
.rows-area{position:relative;background:#ffffff;}
.wknd{position:absolute;top:0;bottom:0;background:rgba(0,0,0,.035);pointer-events:none;z-index:0;}
.gline{position:absolute;top:0;bottom:0;width:1px;background:#f0ede8;pointer-events:none;z-index:0;}
.tdline{position:absolute;top:0;bottom:0;width:2px;background:linear-gradient(180deg,rgba(245,158,11,.6),rgba(245,158,11,.05));pointer-events:none;z-index:5;}
.tdtop{position:absolute;top:-3px;left:-3px;width:8px;height:8px;border-radius:50%;background:#f59e0b;box-shadow:0 0 6px rgba(245,158,11,.5);}
.pr{height:64px;position:relative;border-bottom:1px solid #f0ede8;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;}
.grp-hdr{position:sticky;top:36px;z-index:55;height:26px;display:flex;align-items:center;background:#f0ede8;border-top:1px solid #e2e0d9;border-bottom:1px solid #e2e0d9;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .12s;}
.grp-hdr:hover{background:#e9e5dd;}
.grp-inner{position:sticky;left:8px;display:inline-flex;align-items:center;gap:7px;white-space:nowrap;padding-right:14px;}
.grp-chev{font-size:8px;color:#8a8270;transition:transform .2s;width:8px;flex-shrink:0;}
.grp-hdr.collapsed .grp-chev{transform:rotate(-90deg);}
.grp-txt{font-family:'Space Mono',monospace;font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#5a5340;}
.grp-count{font-family:'Space Mono',monospace;font-size:8px;font-weight:700;color:#a99f85;background:#fff;border:1px solid #e0d6bd;border-radius:10px;padding:0 6px;line-height:14px;}
.grp-hint{font-family:'Plus Jakarta Sans',sans-serif;font-size:9px;color:#b3a98e;font-weight:500;}
.grp-rows .pr:nth-child(even){background:#fcfbf9;}
.grp-rows.old .pr{opacity:.45;}
.pr.two-lanes{height:80px;}
.pr.archived-row{opacity:.3;}
.pr-accent{position:absolute;left:0;top:0;bottom:0;width:3px;z-index:10;}
.pr-name{position:sticky;left:8px;z-index:8;display:inline-flex;align-items:baseline;gap:5px;pointer-events:none;padding-top:4px;}
.pr-name-txt{font-family:'Plus Jakarta Sans',sans-serif;font-size:12px;font-weight:700;color:#1a202c;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;text-shadow:0 0 10px rgba(255,255,255,1),0 0 6px rgba(255,255,255,1),0 0 3px rgba(255,255,255,.8);}
.pr-name-txt.archived{text-decoration:line-through;color:#a0aec0;}
.pr-name-client{font-size:10px;font-weight:500;white-space:nowrap;letter-spacing:.01em;flex-shrink:0;text-shadow:0 0 10px rgba(255,255,255,1),0 0 6px rgba(255,255,255,1);}
.pr-drag-handle{pointer-events:all;cursor:grab;opacity:0;transition:opacity .15s;padding:0 4px 0 0;display:flex;align-items:center;color:#b0aaa0;font-size:10px;line-height:1;user-select:none;align-self:flex-start;margin-top:1px;}
.pr:hover .pr-drag-handle{opacity:1;}
.pr.drag-over-top{box-shadow:inset 0 2px 0 #3b82f6;}
.pr.drag-over-bottom{box-shadow:inset 0 -2px 0 #3b82f6;}.mpin.hl{filter:drop-shadow(0 0 5px rgba(0,0,0,.5)) drop-shadow(0 0 2px currentColor);}
.pseg-highlight{position:absolute;inset:0;border-radius:6px;box-shadow:0 0 0 2px #fff,0 0 0 4px currentColor;pointer-events:none;z-index:24;}
.bwrap{position:absolute;top:24px;height:24px;overflow:visible;}
.pr.two-lanes .bwrap{top:22px;height:50px;}
.bbase{position:absolute;inset:0;border-radius:2px;height:5px;top:auto;bottom:-8px;}
.pseg{position:absolute;top:0;height:100%;border-radius:6px;display:flex;align-items:center;overflow:visible;z-index:22;}
.pr.two-lanes .pseg{height:22px;}
/* Phase provisoire : periode approximative, pas un engagement. Contour pointille
   sans remplissage — visible mais clairement distincte d'un travail planifie. */
.pseg.tentative{border:1.5px dashed;background:transparent !important;}
.pseg.tentative .ph-handle::after{background:rgba(0,0,0,.18);}
.pseg.lane-1{top:26px;height:22px;}
.pseg-lbl{font-family:'Plus Jakarta Sans',sans-serif;font-size:10px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 14px;pointer-events:none;position:relative;z-index:23;flex:1;min-width:0;}
.mpin{position:absolute;top:-4px;transform:translateX(-50%);font-size:15px;z-index:40;cursor:default;filter:drop-shadow(0 1px 3px rgba(0,0,0,.15));}
.mpin::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:#1a202c;border:1px solid #2d3748;color:#f7fafc;font-size:9px;padding:3px 7px;border-radius:2px;white-space:nowrap;font-family:'Space Mono',monospace;opacity:0;pointer-events:none;transition:opacity .15s;z-index:200;}
.mpin:hover::after{opacity:1;}

.rhandle{position:absolute;top:0;bottom:0;width:9px;z-index:20;cursor:ew-resize;}
.rhandle::after{content:'';position:absolute;top:15%;bottom:15%;width:3px;border-radius:2px;background:rgba(255,255,255,.0);transition:background .15s;}
.bwrap:hover .rhandle::after{background:rgba(255,255,255,.75);}
.rhandle.left{left:-1px;}.rhandle.left::after{left:2px;}
.rhandle.right{right:-1px;}.rhandle.right::after{right:2px;}
.ph-handle{position:absolute;top:0;bottom:0;width:10px;z-index:22;cursor:ew-resize;display:flex;align-items:center;justify-content:center;}
.ph-handle::after{content:'';width:3px;height:60%;border-radius:2px;background:rgba(255,255,255,.35);transition:background .15s;}
.ph-handle:hover::after{background:rgba(255,255,255,.95);}
.ph-handle.left{left:0;border-radius:3px 0 0 3px;}
.ph-handle.right{right:0;border-radius:0 3px 3px 0;}
/* pan-y : le defilement vertical reste au navigateur, le geste horizontal nous
   revient immediatement (sans delai d'arbitrage) pour deplacer la phase. */
.ph-move{position:absolute;left:10px;right:10px;top:0;bottom:0;cursor:grab;z-index:21;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;touch-action:pan-y;}
.ph-move:active{cursor:grabbing;}
.pseg.touch-active{outline:2px solid #fff;outline-offset:-2px;z-index:30 !important;}
.touch-phase-btns{position:absolute;display:flex;gap:4px;z-index:50;pointer-events:all;}
.touch-phase-btn{width:40px;height:40px;border-radius:50%;background:rgba(0,0,0,0.55);border:none;color:#fff;font-size:16px;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 2px 6px rgba(0,0,0,0.3);}
.mpin.touch-active{filter:drop-shadow(0 0 5px rgba(0,0,0,.4)) drop-shadow(0 0 2px currentColor);transform:translateX(-50%) scale(1.2);}
.touch-action-sheet-backdrop{position:fixed;inset:0;z-index:300;background:rgba(0,0,0,0);}
.touch-action-sheet{position:fixed;bottom:0;left:0;right:0;z-index:301;background:#fff;border-radius:16px 16px 0 0;padding:12px 16px calc(env(safe-area-inset-bottom,0px) + 16px);box-shadow:0 -4px 24px rgba(0,0,0,.12);}
.touch-action-sheet-title{font-family:'Space Mono',monospace;font-size:9px;color:#a0aec0;letter-spacing:.08em;text-align:center;margin-bottom:10px;}
.touch-action-sheet-btns{display:flex;gap:8px;}
.touch-action-btn{flex:1;padding:13px 8px;border-radius:10px;border:1px solid #e2e0d9;background:#f8f7f5;font-family:'Plus Jakarta Sans',sans-serif;font-size:13px;font-weight:700;color:#1a202c;cursor:pointer;text-align:center;}
.touch-action-btn.cancel{background:#fff;color:#a0aec0;border-color:#e2e0d9;flex:0 0 auto;padding:13px 16px;}
.empty{padding:40px 0;display:flex;align-items:center;justify-content:center;color:#c8c4bc;font-size:11px;letter-spacing:.06em;}
.app-offline .fab-round{opacity:.35;pointer-events:none;filter:grayscale(1);}
.refresh-bar{position:fixed;top:48px;left:0;right:0;height:2px;z-index:100;background:linear-gradient(90deg,#3b82f6 0%,#93c5fd 50%,#3b82f6 100%);background-size:200% 100%;animation:refresh-slide 1.2s linear infinite;pointer-events:none;}
@keyframes refresh-slide{0%{background-position:100% 0}100%{background-position:-100% 0}}
.app-offline .rhandle{pointer-events:none;cursor:default;}
.app-offline .pr-drag-handle{display:none;}
.app-offline .bsave{opacity:.35;pointer-events:none;}
.app-offline .sp-act-btn:first-child{opacity:.35;pointer-events:none;}
.app-offline .sp-add-ghost{display:none;}
.app-offline .fp-right-item{pointer-events:none;opacity:.6;}
.app-offline .fp-resize-handle{display:none;}
.fab-round{position:fixed;bottom:24px;right:24px;width:48px;height:48px;border-radius:50%;background:#2b6cb0;border:none;color:#fff;font-size:24px;cursor:pointer;box-shadow:0 4px 16px rgba(43,108,176,.45);display:flex;align-items:center;justify-content:center;z-index:66;transition:opacity .2s,transform .2s;}
.fab-round:hover{background:#1d4ed8;transform:scale(1.08);}
.fab-round.hidden{opacity:0;pointer-events:none;transform:scale(.85);}
.fab-onboard{position:fixed;bottom:20px;right:84px;font-family:'Plus Jakarta Sans',sans-serif;font-size:12px;color:#718096;pointer-events:none;z-index:35;display:flex;align-items:center;gap:6px;animation:fabfade 1.2s ease-in-out infinite alternate;}
@keyframes fabfade{from{opacity:.5}to{opacity:1}}
@keyframes row-settle{0%{background:transparent}20%{background:rgba(59,130,246,0.10)}100%{background:transparent}}
.pr.just-moved{animation:row-settle 1s ease-out;}
.toast{position:fixed;bottom:calc(env(safe-area-inset-bottom,0px) + 80px);left:50%;transform:translateX(-50%);background:#1a202c;color:#f7fafc;font-family:'Plus Jakarta Sans',sans-serif;font-size:12px;font-weight:600;padding:10px 16px;border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.25);display:flex;align-items:center;gap:14px;z-index:400;animation:toast-in .2s ease-out;max-width:calc(100vw - 32px);white-space:nowrap;}
.toast.error{background:#c53030;}
.toast button{background:transparent;border:none;color:#63b3ed;font-family:'Space Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.06em;cursor:pointer;padding:2px 4px;text-transform:uppercase;flex-shrink:0;}
.toast.error button{color:#fff;text-decoration:underline;}
@keyframes toast-in{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}
.drag-tip{position:fixed;transform:translateX(-50%);background:#1a202c;color:#f7fafc;font-family:'Space Mono',monospace;font-size:10px;font-weight:700;padding:4px 8px;border-radius:4px;pointer-events:none;z-index:500;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.25);display:none;}
.login-screen{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#f5f4f0;padding:32px 20px;}
.login-card{width:100%;max-width:380px;background:#fff;border:1px solid #e2e0d9;border-radius:14px;padding:34px 30px;box-shadow:0 10px 34px rgba(26,32,44,.07);}
.login-logo{font-family:'Plus Jakarta Sans',sans-serif;font-weight:700;font-size:26px;letter-spacing:-.01em;color:#1a202c;text-align:center;}
.login-tagline{font-family:'Plus Jakarta Sans',sans-serif;font-size:13px;line-height:1.5;color:#8a8270;text-align:center;margin:8px auto 24px;max-width:280px;}
.login-mock{margin:0 0 24px;border:1px solid #ece4d2;border-radius:10px;overflow:hidden;background:#fafaf8;}
.login-mock-row{height:30px;display:flex;align-items:center;gap:7px;padding:0 10px;border-bottom:1px solid #f0ede8;}
.login-mock-row:last-child{border-bottom:none;}
.login-mock-name{font-family:'Plus Jakarta Sans',sans-serif;font-size:9px;font-weight:700;width:58px;flex-shrink:0;color:#1a202c;}
.login-mock-track{flex:1;position:relative;height:100%;}
.login-mock-bar{position:absolute;top:50%;transform:translateY(-50%);height:11px;border-radius:3px;opacity:.85;}
.login-label{display:block;font-family:'Plus Jakarta Sans',sans-serif;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#a0aec0;margin-bottom:6px;}
.login-input{width:100%;box-sizing:border-box;font-family:'Plus Jakarta Sans',sans-serif;font-size:15px;border:1.5px solid #e2e0d9;border-radius:10px;padding:11px 13px;outline:none;color:#1a202c;background:#fff;transition:border-color .15s;}
.login-input:focus{border-color:#2b6cb0;}
.login-btn{width:100%;font-family:'Plus Jakarta Sans',sans-serif;font-size:15px;font-weight:700;padding:12px;background:#2b6cb0;color:#fff;border:none;border-radius:10px;cursor:pointer;transition:background .15s,transform .1s;}
.login-btn:hover{background:#1d4ed8;}.login-btn:active{transform:scale(.98);}.login-btn:disabled{opacity:.55;cursor:default;}
.login-err{font-family:'Plus Jakarta Sans',sans-serif;font-size:13px;color:#e53e3e;margin-bottom:14px;}
.login-cta{margin-top:22px;padding-top:20px;border-top:1px solid #f0ede8;text-align:center;font-family:'Plus Jakarta Sans',sans-serif;font-size:13px;line-height:1.7;color:#8a8270;}
.login-cta a{color:#2b6cb0;font-weight:700;text-decoration:none;}.login-cta a:hover{text-decoration:underline;}
.fl{display:block;font-size:9px;letter-spacing:.14em;color:#a0aec0;text-transform:uppercase;margin-bottom:5px;font-family:'Plus Jakarta Sans',sans-serif;}
.fi{width:100%;background:#fafaf8;border:1px solid #e2e0d9;color:#2d3748;padding:7px 10px;font-family:'Space Mono',monospace;font-size:11px;border-radius:4px;}
.fi:focus{outline:none;border-color:#3b82f6;}
.swatches{display:flex;gap:6px;flex-wrap:nowrap;padding-top:2px;overflow:hidden;}
.sw{width:20px;height:20px;border-radius:50%;cursor:pointer;border:2px solid transparent;transition:border-color .1s,transform .1s;flex-shrink:0;}
.sw:hover{transform:scale(1.15);}.sw.sel{border-color:#1a202c;}
.bsave{flex:1;background:#2b6cb0;border:1px solid #3b82f6;color:#ffffff;padding:8px;font-family:'Space Mono',monospace;font-size:11px;cursor:pointer;border-radius:4px;transition:background .15s,transform .1s;}
.bsave:hover{background:#1d4ed8;}.bsave:active{transform:scale(.98);}
.bsave:hover{background:#1d4ed8;}
.bcanc{background:transparent;border:1px solid #e2e0d9;color:#a0aec0;padding:8px 14px;font-family:'Space Mono',monospace;font-size:11px;cursor:pointer;border-radius:4px;}
.bcanc:hover{color:#4a5568;}
select.fi{cursor:pointer;}
.view-toggle{display:flex;gap:2px;align-items:center;}
.view-toggle button{background:transparent;border:none;color:#a0aec0;padding:4px 9px;font-family:'Space Mono',monospace;font-size:10px;font-weight:700;letter-spacing:.08em;cursor:pointer;border-radius:20px;transition:all .15s;}
.view-toggle button:hover{color:#2d3748;background:#f0ede8;}
.view-toggle button.on{background:#1a202c;color:#fff;}
.off-overlay{position:absolute;top:0;bottom:0;background:repeating-linear-gradient(135deg,rgba(100,116,139,.05) 0px,rgba(100,116,139,.05) 4px,transparent 4px,transparent 10px);border-left:1px solid rgba(100,116,139,.2);border-right:1px solid rgba(100,116,139,.2);pointer-events:none;z-index:4;}
.off-dhdr{position:absolute;top:0;bottom:0;background:rgba(100,116,139,.06);pointer-events:none;z-index:2;}
.off-bar{position:relative;border-bottom:1px solid #e2e0d9;background:#f8f7f5;overflow:hidden;flex-shrink:0;}
.off-pill{position:absolute;top:3px;height:16px;border-radius:2px;background:rgba(100,116,139,.13);border:1px solid rgba(100,116,139,.22);display:flex;align-items:center;padding:0 6px;font-family:'Plus Jakarta Sans',sans-serif;font-size:9px;font-weight:700;letter-spacing:.1em;color:#64748b;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.settings-section{margin-bottom:20px;padding-bottom:20px;border-bottom:1px solid #e2e0d9;}
.settings-section:last-child{border-bottom:none;margin-bottom:0;}
.settings-section h3{font-family:'Plus Jakarta Sans',sans-serif;font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#64748b;margin-bottom:10px;}
.bwrap.tofactor .rhandle{border-color:#f59e0b;}
.ov-arrow{position:absolute;top:0;bottom:0;width:3px;pointer-events:none;z-index:8;}
.ov-arrow.left{left:0;border-left:3px solid currentColor;}
.ov-arrow.right{right:0;border-right:3px solid currentColor;}
.tl-and-panel{display:flex;flex:1;min-height:0;overflow:hidden;}
.side-panel{width:0;flex-shrink:0;overflow:hidden;transition:width .22s cubic-bezier(.4,0,.2,1);background:#fff;border-left:0px solid #e2e0d9;display:flex;flex-direction:column;position:relative;z-index:30;}
@media(max-width:768px){.side-panel.sliding-out{transform:translateX(100%);transition:transform .35s cubic-bezier(.4,0,1,1);}}
.side-panel.open{width:300px;border-left-width:1px;}
@media(max-width:768px){
  /* Poignees de redimensionnement masquees au doigt : trop serrees, surtout en
     portrait, et elles se disputaient le geste avec le deplacement.
     On redimensionne depuis le panneau (chips de dates + calendrier).
     .ph-move couvre alors toute la phase : plus de zone morte sur les bords. */
  .ph-handle{display:none;}
  .ph-move{left:0;right:0;}
  .refresh-bar{top:84px;}
  /* 65 : doit couvrir l'axe des dates (60) et les en-tetes de bloc (55), tout en
     restant sous la topbar (70) qu'il ne recouvre pas (il commence a 84px). */
  .side-panel{transition:none;position:fixed;top:84px;left:0;right:0;bottom:0;width:100%;border-left:none;z-index:65;}
  .side-panel.open{width:100%;}
  .topbar{padding:0;height:auto;flex-direction:column;align-items:stretch;gap:0;}
  .topbar-row1{display:flex;align-items:center;height:44px;padding:0 10px;gap:6px;}
  .topbar-row2{display:flex;align-items:center;height:40px;padding:0 10px;gap:3px;border-top:1px solid #e2e0d9;}
  .topbar h1{display:block;font-size:16px;}
  .topbar-logo-group{position:static !important;transform:none !important;display:flex !important;align-items:center;gap:5px;pointer-events:none;margin-left:auto;}
  .topbar-left{display:flex;align-items:center;gap:4px;}
  .tbr{display:flex;align-items:center;width:100%;justify-content:space-evenly;}
  .tbr .btn{width:36px;height:36px;}
  .btn{width:32px;height:32px;}
  .btn-txt{padding:3px 7px;font-size:9px;}
  .btn-today{padding:3px 9px;font-size:9px;margin-right:0;}
  .view-toggle button{padding:3px 8px;font-size:9px;}
  .vsep{display:none;}
  .fab-round{bottom:16px;right:16px;}
  .hscroll{-webkit-overflow-scrolling:touch;}
}
.sp-header{flex-shrink:0;padding:16px;}
.sp-header-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:6px;}
.sp-close{width:28px;height:28px;border-radius:50%;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;margin-left:8px;font-size:14px;color:#fff;line-height:1;border:none;transition:background .15s;}
.sp-close:hover{background:rgba(255,255,255,.35);}
.sp-client{font-family:'Space Mono',monospace;font-size:10px;letter-spacing:.1em;text-transform:uppercase;margin-bottom:3px;color:rgba(255,255,255,.72);}
.sp-client-link{position:relative;display:inline-block;cursor:pointer;transition:color .15s;}
.sp-client-link:hover{color:#fff;text-decoration:underline;text-underline-offset:2px;}
.sp-client-link::after{content:attr(data-tip);position:absolute;top:calc(100% + 4px);left:0;background:#1a202c;color:#f7fafc;font-family:'Plus Jakarta Sans',sans-serif;font-size:10px;font-weight:600;letter-spacing:0;text-transform:none;padding:4px 8px;border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:60;box-shadow:0 2px 8px rgba(0,0,0,.2);}
.sp-client-link:hover::after{opacity:1;}
.sp-name{font-family:'Plus Jakarta Sans',sans-serif;font-size:22px;font-weight:800;letter-spacing:-.01em;color:#fff;line-height:1.2;word-break:break-word;}
.sp-ce[data-placeholder]:empty::before{content:attr(data-placeholder);color:#a0aec0;pointer-events:none;}
.sp-dates{font-size:11px;color:rgba(255,255,255,.8);margin-top:6px;font-family:'Space Mono',monospace;}
.sp-mini-tl{margin-top:10px;height:5px;background:rgba(255,255,255,.2);border-radius:3px;position:relative;overflow:hidden;}
.sp-tl-bar{position:absolute;top:0;height:100%;border-radius:2px;}
.sp-actions{display:flex;border-top:1px solid #e2e0d9;border-bottom:1px solid #e2e0d9;flex-shrink:0;}
.sp-act-btn{flex:1;padding:7px 4px;font-size:10px;font-family:'Space Mono',monospace;letter-spacing:.06em;border:none;background:#fff;color:#718096;cursor:pointer;border-right:1px solid #e2e0d9;transition:background .1s,color .1s;display:flex;flex-direction:column;align-items:center;gap:2px;}
.sp-act-btn:last-child{border-right:none;}
.sp-act-btn:hover{background:#f5f4f0;color:#1a202c;}
.sp-act-btn.on{background:#f0ede8;color:#1a202c;}
.sp-action-menu{display:flex;flex-direction:column;border-bottom:1px solid #e2e0d9;background:#fafaf8;flex-shrink:0;overflow:hidden;transform-origin:top;animation:sp-menu-in .22s cubic-bezier(.16,1,.3,1);box-shadow:inset 0 6px 8px -8px rgba(0,0,0,.18);}
@keyframes sp-menu-in{from{opacity:0;transform:scaleY(.6) translateY(-8px);}to{opacity:1;transform:scaleY(1) translateY(0);}}
.sp-action-menu-item{padding:10px 16px;text-align:left;background:none;border:none;border-bottom:1px solid #f0ede8;font-family:'Plus Jakarta Sans',sans-serif;font-size:12px;font-weight:600;color:#2d3748;cursor:pointer;transition:background .1s;animation:sp-item-in .26s ease-out both;}
.sp-action-menu-item:nth-child(1){animation-delay:.04s;}
.sp-action-menu-item:nth-child(2){animation-delay:.10s;}
.sp-action-menu-item:nth-child(3){animation-delay:.16s;}
@keyframes sp-item-in{from{opacity:0;transform:translateX(-6px);}to{opacity:1;transform:translateX(0);}}
.sp-action-menu-item:last-child{border-bottom:none;}
.sp-action-menu-item:hover{background:#f0ede8;}
.sp-links{padding:8px 12px;display:flex;gap:5px;flex-wrap:wrap;border-bottom:1px solid #e2e0d9;flex-shrink:0;}
.sp-link-pill{display:inline-flex;align-items:center;gap:5px;padding:4px 9px;background:#f0ede8;border-radius:20px;border:1px solid #e2e0d9;font-size:11px;font-family:'Plus Jakarta Sans',sans-serif;font-weight:700;color:#1a202c;text-decoration:none;transition:background .1s;}
.sp-link-pill:hover{background:#e8e4de;}
.sp-content{flex:1;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#e2e0d9 transparent;padding:14px 14px 0;}
.sp-sec-hdr{font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;padding-bottom:5px;margin-bottom:8px;}
.sp-sec-hdr.now{color:#1a202c;border-bottom:1.5px solid #1a202c;}
.sp-sec-hdr.other{color:#718096;border-bottom:1px solid #e2e0d9;}
.sp-block{margin-bottom:14px;}
.sp-item-read{display:flex;align-items:center;gap:8px;padding:5px 4px;border-radius:4px;cursor:pointer;transition:background .12s;position:relative;}
.sp-item-read:hover{background:#f5f4f0;}
.sp-item-past{opacity:.78;}
.sp-item-current{border-radius:6px;padding:7px 8px;margin-bottom:3px;}
.sp-item-current:hover{background:#f5f4f0;}
.sp-dot-col{display:flex;flex-direction:column;align-items:center;flex-shrink:0;padding-top:3px;}
.sp-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.sp-line{width:1px;flex:1;min-height:12px;background:#e2e0d9;margin-top:2px;}
.sp-ir-body{flex:1;min-width:0;}
.sp-ir-label{font-family:'Plus Jakarta Sans',sans-serif;font-size:13px;font-weight:600;color:#2d3748;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.sp-ir-dates{font-size:10px;color:#718096;}
.sp-ir-badge{font-size:9px;font-weight:700;padding:1px 5px;border-radius:2px;margin-left:4px;vertical-align:middle;}
.sp-add-ghost{display:flex;align-items:center;gap:8px;padding:5px 4px;opacity:.45;cursor:pointer;margin-top:4px;margin-bottom:14px;}
.sp-add-ghost:hover{opacity:.75;}
.sp-add-circle{width:14px;height:14px;border-radius:50%;border:1.5px dashed #718096;display:flex;align-items:center;justify-content:center;font-size:11px;color:#718096;flex-shrink:0;}
.sp-item-edit{border-radius:8px;padding:12px 12px 10px;margin-bottom:6px;}
.sp-pills-row{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:8px;}

.sp-pill{padding:3px 8px;border-radius:20px;font-size:10px;font-weight:700;font-family:'Space Mono',monospace;cursor:pointer;border:1px solid #e2e0d9;color:#718096;background:transparent;transition:all .12s;white-space:nowrap;flex-shrink:0;}
.sp-pill.active{color:#fff;border-color:transparent;}
.sp-pill:not(.active):hover{background:#f0ede8;}
.sp-edit-name-lbl{font-size:10px;color:#a0aec0;margin-bottom:3px;letter-spacing:.04em;text-transform:uppercase;}
.sp-edit-name{font-family:'Plus Jakarta Sans',sans-serif;font-size:15px;font-weight:500;color:#1a202c;padding:4px 0;outline:none;border-bottom:1px solid currentColor;margin-bottom:8px;display:block;width:100%;background:transparent;}
/* Placeholder purement CSS : le champ reste reellement vide, donc aucun handler
   ne vient effacer la premiere lettre tapee (bug de la 1re frappe avalee). */
.sp-edit-name:empty::before{content:attr(data-placeholder);color:#a0aec0;font-style:italic;pointer-events:none;}
.sp-date-row{display:flex;align-items:center;gap:6px;margin-bottom:8px;}
.sp-date-lbl{font-size:11px;color:#718096;}
.sp-date-chip{font-size:11px;font-weight:600;padding:3px 8px;background:transparent;border-radius:3px;cursor:pointer;border:1px solid #d4d0c8;font-family:'Space Mono',monospace;transition:border-color .12s,background .12s;white-space:nowrap;}
.sp-date-chip:hover{background:#f5f4f0;}
.sp-date-chip.active{border-color:currentColor;background:rgba(0,0,0,.03);}
.sp-date-chip.empty{color:#a0aec0;}
.sp-date-dur{font-size:10px;color:#718096;}
.sp-mini-cal{background:#fafaf8;border-radius:6px;padding:8px;border:1px solid #e2e0d9;margin-bottom:8px;}
.sp-cal-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;}
.sp-cal-month{font-size:10px;font-weight:700;font-family:'Plus Jakarta Sans',sans-serif;letter-spacing:.06em;}
.sp-cal-arr{font-size:11px;color:#718096;cursor:pointer;padding:0 4px;background:none;border:none;font-family:monospace;}
.sp-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;text-align:center;}
.sp-cal-dh{font-size:9px;color:#a0aec0;padding:2px 0;}
.sp-cal-d{font-size:9px;padding:3px 2px;border-radius:2px;cursor:pointer;font-family:'Space Mono',monospace;line-height:1.4;}
.sp-cal-d:hover{background:rgba(0,0,0,.08);}
.sp-cal-d.we{opacity:.4;}
.sp-cal-d.range{}
.sp-cal-d.start,.sp-cal-d.end{color:#fff;font-weight:700;}
.sp-cal-d.today{font-weight:700;text-decoration:underline;}
.sp-edit-actions{display:flex;justify-content:space-between;align-items:center;margin-top:6px;}
.sp-btn-del{font-size:10px;padding:4px 8px;border-radius:3px;cursor:pointer;font-family:'Space Mono',monospace;background:none;border:1px solid #fed7d7;color:#e53e3e;}
.sp-btn-del:hover{background:#fff5f5;}
.sp-btn-cancel{font-size:10px;padding:4px 8px;border-radius:4px;cursor:pointer;font-family:'Space Mono',monospace;background:none;border:1px solid #e2e0d9;color:#718096;}
.sp-btn-cancel:hover{background:#f5f4f0;}
.sp-btn-ok{font-size:10px;padding:4px 12px;border-radius:4px;cursor:pointer;font-family:'Space Mono',monospace;color:#fff;border:none;font-weight:700;}
.sp-btn-ok:disabled{opacity:.4;cursor:default;}
.sp-item-new{border:1px dashed #d4d0c8;border-radius:6px;padding:12px 12px 10px;background:#fff;margin-bottom:6px;}
.side-panel.wide{width:480px;}
@media(max-width:768px){.side-panel.wide{width:100%;}}
.fp-grid-wrap{flex:1;overflow-y:auto;overflow-x:hidden;position:relative;}
.fp-block{position:absolute;border-radius:3px;cursor:grab;user-select:none;z-index:3;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;}
.fp-block:active{cursor:grabbing;}
.fp-block-inner{display:flex;align-items:flex-start;gap:4px;padding:4px 5px;flex:1;min-height:0;overflow:hidden;}
.fp-resize-handle{height:6px;cursor:ns-resize;position:absolute;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:center;}
.fp-right-item{padding:7px 10px;border-bottom:1px solid #f0ede8;cursor:grab;user-select:none;transition:background .1s;touch-action:pan-y;}
.fp-right-item:active{cursor:grabbing;}
.fp-skip-zone{margin:8px 10px;padding:6px 8px;border:1px dashed #e2e0d9;border-radius:4px;min-height:40px;}
.fp-skip-zone.over{border-color:#3b82f6;background:#eff6ff;}
