/* Mon planning : feuille de style commune (connexion et application). Inspiration Apple, comme « Mes Finances » et « Mes Projets ». */
:root {
  color-scheme: light;
  --bg: #f5f5f7; --card: #ffffff; --side: #f9f9fb; --ink: #1d1d1f; --ink-2: #56565b; --ink-3: #6b6b70;
  --hair: rgba(0,0,0,.08); --hair-strong: rgba(0,0,0,.14); --fill: rgba(118,118,128,.12); --fill-2: rgba(118,118,128,.07);
  --accent: #0071e3; --bad: #ff3b30; --bad-text: #c9302c; --good: #34c759; --good-text: #1a7f37; --warn: #ff9500; --warn-text: #b45f00;
  --we: rgba(118,118,128,.07); --sum: #1d1d1f;
  --shadow: 0 1px 2px rgba(0,0,0,.04), 0 8px 32px rgba(0,0,0,.06);
  --row: 34px; --row0: 38px; --tint: 9%;
  /* Échelles : tailles de texte et rayons */
  --fs-2xs: 11px; --fs-xs: 12px; --fs-sm: 12.5px; --fs-md: 13px; --fs-body: 14px; --fs-lg: 15px; --fs-h3: 17px; --fs-h2: 20px; --fs-h1: 26px;
  --r-xs: 3px; --r-sm: 6px; --r-md: 9px; --r-lg: 12px; --r-xl: 18px; --r-full: 999px;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;
    --bg: #000; --card: #1c1c1e; --side: #111113; --ink: #f5f5f7; --ink-2: #a1a1a6; --ink-3: #8e8e93;
    --hair: rgba(255,255,255,.09); --hair-strong: rgba(255,255,255,.16); --fill: rgba(118,118,128,.24); --fill-2: rgba(118,118,128,.14);
    --accent: #0a84ff; --bad-text: #ff6961; --good-text: #30d158; --warn-text: #ff9f0a; --we: rgba(118,118,128,.12); --sum: #f5f5f7; --tint: 11%;
    --shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 32px rgba(0,0,0,.4);
  }
}
:root[data-theme="dark"] {
  color-scheme: dark;
  --bg: #000; --card: #1c1c1e; --side: #111113; --ink: #f5f5f7; --ink-2: #a1a1a6; --ink-3: #8e8e93;
  --hair: rgba(255,255,255,.09); --hair-strong: rgba(255,255,255,.16); --fill: rgba(118,118,128,.24); --fill-2: rgba(118,118,128,.14);
  --accent: #0a84ff; --bad-text: #ff6961; --good-text: #30d158; --warn-text: #ff9f0a; --we: rgba(118,118,128,.12); --sum: #f5f5f7;
  --shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 32px rgba(0,0,0,.4);
}
* { box-sizing: border-box; }
html, body { margin: 0; min-height: 100%; }
body { background: var(--bg); color: var(--ink); font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", system-ui, "Segoe UI", sans-serif; font-size: var(--fs-body); line-height: 1.45; -webkit-font-smoothing: antialiased; }
[hidden] { display: none !important; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; }
:focus-visible { outline: 3px solid color-mix(in srgb, var(--accent) 40%, transparent); outline-offset: 2px; }
h1, h2, h3 { margin: 0; letter-spacing: -0.01em; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
.muted { color: var(--ink-2); } .small { font-size: var(--fs-sm); } .nowrap { white-space: nowrap; } .sp { flex: 1; }
svg.i { width: 17px; height: 17px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }

/* ---------- Champs et boutons ---------- */
input, select, textarea { width: 100%; border-radius: var(--r-md); border: 1px solid var(--hair-strong); background: var(--card); padding: 0 12px; height: 38px; outline: none; }
textarea { height: auto; min-height: 64px; padding: 9px 12px; resize: vertical; line-height: 1.4; }
input:focus, select:focus, textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent); }
input[type="checkbox"] { width: 18px; height: 18px; padding: 0; accent-color: var(--accent); }
label.f { display: flex; flex-direction: column; gap: 5px; font-size: var(--fs-sm); font-weight: 500; color: var(--ink-2); }
.btn { height: 34px; padding: 0 13px; border-radius: var(--r-md); border: 1px solid var(--hair-strong); background: var(--card); font-weight: 500; display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; font-size: var(--fs-md); }
.btn:hover { background: var(--fill-2); }
.btn.primary { background: var(--accent); border-color: var(--accent); color: #fff; font-weight: 600; }
.btn.primary:hover { filter: brightness(1.07); }
.btn.danger { background: var(--bad-text); border-color: var(--bad-text); color: #fff; font-weight: 600; }
.btn.warn { background: var(--warn); border-color: var(--warn); color: #fff; font-weight: 600; }
.btn.sm { height: 32px; padding: 0 10px; font-size: var(--fs-sm); }
.btn[disabled] { opacity: .5; cursor: default; }
.ib { width: 32px; height: 32px; display: inline-grid; place-items: center; border: 0; background: none; border-radius: var(--r-md); color: var(--ink-2); flex: none; }
.ib:hover { background: var(--fill); color: var(--ink); }
.ib[disabled], .ib.off { opacity: .3; pointer-events: none; }
.seg { display: inline-flex; background: var(--fill); border-radius: var(--r-md); padding: 2px; }
.seg button { border: 0; background: none; min-height: 28px; padding: 3px 12px; border-radius: var(--r-sm); font-size: var(--fs-sm); color: var(--ink-2); }
.seg button.on { background: var(--card); color: var(--ink); box-shadow: 0 1px 3px rgba(0,0,0,.12); font-weight: 600; }
.msg { font-size: var(--fs-md); line-height: 1.45; border-radius: var(--r-md); padding: 10px 12px; }
.msg:empty { display: none; }
.msg.err { color: var(--bad-text); background: color-mix(in srgb, var(--bad-text) 10%, transparent); }
.msg.info { color: var(--ink-2); background: var(--fill); }
.spin { width: 16px; height: 16px; border: 2px solid rgba(255,255,255,.4); border-top-color: #fff; border-radius: 50%; animation: spin .8s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
.pill { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--hair-strong); background: var(--card); border-radius: var(--r-full); padding: 2px 10px; font-size: var(--fs-xs); color: var(--ink-2); white-space: nowrap; }
.pill .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--good); }
.pill.mod .dot { background: var(--warn); }
.pill.ro { background: color-mix(in srgb, var(--warn) 16%, var(--card)); border-color: color-mix(in srgb, var(--warn) 45%, transparent); color: var(--ink); }
.pill.ro .dot { background: var(--warn); }
.tag { display: inline-block; border-radius: var(--r-full); padding: 1px 9px; font-size: var(--fs-xs); background: var(--fill); color: var(--ink-2); white-space: nowrap; }
.tag.c { background: color-mix(in srgb, var(--accent) 14%, transparent); color: var(--accent); }
.prog { display: inline-block; width: 60px; height: 5px; background: var(--fill); border-radius: var(--r-xs); vertical-align: middle; margin-right: 7px; overflow: hidden; }
.prog i { display: block; height: 100%; background: var(--accent); }

/* ---------- Connexion ---------- */
body.login { display: grid; place-items: center; padding: 24px 16px; min-height: 100vh; }
.wrap-login { width: 100%; max-width: 380px; }
.brand { display: flex; flex-direction: column; align-items: center; gap: 14px; margin-bottom: 26px; text-align: center; }
.mark { width: 64px; height: 64px; border-radius: var(--r-xl); display: grid; place-items: center; background: linear-gradient(135deg, #0a84ff, #5e5ce6); box-shadow: inset 0 1px 0 rgba(255,255,255,.35), 0 8px 24px rgba(10,132,255,.35); }
.brand h1 { font-size: var(--fs-h1); font-weight: 700; letter-spacing: -0.02em; }
.brand p { color: var(--ink-2); margin: 4px 0 0; }
.login .card { background: var(--card); border: 1px solid var(--hair); border-radius: var(--r-xl); padding: 22px; box-shadow: var(--shadow); }
.login form { display: flex; flex-direction: column; gap: 14px; }
.login input { height: 44px; border-radius: var(--r-lg); font-size: var(--fs-lg); }
.login .btn.primary { height: 44px; justify-content: center; font-size: var(--fs-lg); margin-top: 4px; }
.foot { margin-top: 18px; text-align: center; font-size: var(--fs-xs); color: var(--ink-3); line-height: 1.5; }

/* ---------- En-tête : menu magnétique ---------- */
body.app { display: flex; flex-direction: column; height: 100vh; overflow: hidden; }
.top { position: sticky; top: 0; z-index: 20; background: color-mix(in srgb, var(--card) 84%, transparent); backdrop-filter: saturate(180%) blur(20px); -webkit-backdrop-filter: saturate(180%) blur(20px); border-bottom: 1px solid var(--hair); flex: none; }
.bar { display: flex; align-items: center; gap: 4px; padding: 0 16px; height: 40px; }
.logo { display: flex; align-items: center; gap: 8px; font-weight: 650; letter-spacing: -.01em; margin-right: 10px; white-space: nowrap; }
.logo i { width: 22px; height: 22px; border-radius: var(--r-sm); background: linear-gradient(135deg, #0a84ff, #5e5ce6); display: grid; place-items: center; }
.logo i:before { content: ""; width: 12px; height: 2px; background: #fff; box-shadow: 3px 4px 0 #fff, -2px -4px 0 #fff; border-radius: var(--r-xs); }
.nav { border: 0; background: none; padding: 6px 11px; border-radius: var(--r-md); color: var(--ink-2); font-weight: 500; white-space: nowrap; }
.nav:hover { background: var(--fill); }
.nav.on { color: var(--ink); background: var(--fill); }
.user { display: flex; align-items: center; gap: 8px; color: var(--ink-2); font-size: var(--fs-md); }
.av { width: 28px; height: 28px; border-radius: 50%; background: var(--fill); display: grid; place-items: center; font-weight: 600; color: var(--ink); font-size: var(--fs-xs); text-transform: uppercase; }
.ctx { display: flex; align-items: center; gap: 6px; padding: 5px 16px; border-top: 1px solid var(--hair); min-height: 41px; }
.ctx:empty { display: none; }
.crumb { color: var(--ink-3); font-size: var(--fs-md); white-space: nowrap; display: flex; align-items: center; gap: 5px; min-width: 0; flex: 0 1 auto; overflow: hidden; }
.crumb b { overflow: hidden; text-overflow: ellipsis; }
.ctx > :not(.crumb) { flex: none; }
.ctx { overflow-x: auto; scrollbar-width: thin; }
.crumb a { color: var(--ink-3); } .crumb b { color: var(--ink); font-size: var(--fs-lg); letter-spacing: -.01em; cursor: default; }
.crumb b.editable { cursor: pointer; } .crumb b.editable:hover { color: var(--accent); }
.gap { width: 1px; height: 18px; background: var(--hair-strong); margin: 0 6px; flex: none; }
.dd { position: relative; }
.menu { position: absolute; top: 36px; left: 0; min-width: 260px; max-width: 380px; background: var(--card); border: 1px solid var(--hair-strong); border-radius: var(--r-lg); box-shadow: var(--shadow); padding: 6px; display: none; z-index: 40; max-height: 70vh; overflow: auto; }
.menu.open { display: block; }
.menu h4 { margin: 8px 10px 2px; font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); font-weight: 600; }
.mi { display: flex; align-items: center; gap: 8px; padding: 7px 10px; border-radius: var(--r-md); cursor: pointer; font-size: var(--fs-md); color: var(--ink); }
.mi:hover { background: var(--fill); text-decoration: none; }
.mi .t { flex: 1; min-width: 0; } .mi .t b { display: block; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mi .t small { color: var(--ink-3); font-size: var(--fs-xs); } .mi .ck { width: 14px; color: var(--accent); font-weight: 700; flex: none; }
.mi .ia { display: none; } .mi:hover .ia { display: flex; }
.mi .ia button { width: 24px; height: 24px; border: 0; background: none; border-radius: var(--r-sm); color: var(--ink-3); display: grid; place-items: center; }
.mi .ia button:hover { background: var(--fill-2); color: var(--ink); }
.mi.dim { color: var(--ink-3); cursor: default; }
.menu hr { border: 0; border-top: 1px solid var(--hair); margin: 6px 0; }
.banner { display: none; align-items: center; gap: 10px; padding: 7px 16px; background: color-mix(in srgb, var(--warn) 14%, var(--card)); border-top: 1px solid color-mix(in srgb, var(--warn) 35%, transparent); font-size: var(--fs-md); }
.banner.show { display: flex; }

/* ---------- Corps ---------- */
#main { flex: 1; min-height: 0; display: flex; flex-direction: column; }
.page { padding: 14px 16px 24px; overflow: auto; flex: 1; min-height: 0; }
.card { background: var(--card); border: 1px solid var(--hair); border-radius: var(--r-lg); box-shadow: var(--shadow); }
.layout { display: grid; grid-template-columns: 250px 1fr; gap: 12px; align-items: start; }
.tree { padding: 10px; position: sticky; top: 0; }
.tree h3 { margin: 4px 8px 8px; font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); font-weight: 600; }
.fo { display: flex; align-items: center; gap: 7px; padding: 6px 8px; border-radius: var(--r-md); color: var(--ink); font-size: var(--fs-md); cursor: pointer; white-space: nowrap; user-select: none; }
.fo:hover { background: var(--fill-2); }
.fo.on { background: color-mix(in srgb, var(--accent) 12%, transparent); color: var(--accent); font-weight: 600; }
.fo.drop { outline: 2px solid var(--accent); outline-offset: -2px; background: color-mix(in srgb, var(--accent) 10%, transparent); }
.fo .tg { color: var(--ink-3); font-size: var(--fs-2xs); width: 20px; height: 20px; margin: -2px -2px; display: grid; place-items: center; flex: none; border-radius: var(--r-sm); } .fo .tg:hover { background: var(--fill); }
.fo .nm { overflow: hidden; text-overflow: ellipsis; flex: 1; min-width: 0; } .fo .n { color: var(--ink-3); font-size: var(--fs-xs); font-weight: 400; }
.fo svg.i { color: var(--ink-3); } .fo.on svg.i { color: var(--accent); }
.main-card { padding: 16px 18px 8px; min-width: 0; }
.hd { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
.hd h2 { font-size: var(--fs-h2); letter-spacing: -.02em; } .hd .sub { color: var(--ink-3); }
.subs { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px; margin-bottom: 16px; }
.sf { display: flex; align-items: center; gap: 10px; border: 1px solid var(--hair); border-radius: var(--r-lg); padding: 10px 12px; background: var(--fill-2); cursor: pointer; min-width: 0; }
.sf:hover { background: var(--fill); } .sf.drop { outline: 2px solid var(--accent); }
.sf svg.i { color: var(--accent); width: 24px; height: 24px; } .sf b { display: block; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .sf small { color: var(--ink-3); }
.sf .t { min-width: 0; flex: 1; }
table.list { border-collapse: collapse; width: 100%; }
table.list th { text-align: left; font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .04em; color: var(--ink-3); font-weight: 600; padding: 8px 10px; border-bottom: 1px solid var(--hair-strong); white-space: nowrap; }
table.list td { padding: 0 10px; height: 50px; border-bottom: 1px solid var(--hair); white-space: nowrap; }
table.list tr.p:hover td { background: var(--fill-2); } table.list tr.p { cursor: pointer; }
table.list .r { text-align: right; }
.pn { display: flex; align-items: center; gap: 10px; font-weight: 600; } .pn svg.i { color: var(--accent); width: 22px; height: 22px; }
.pn small { display: block; font-weight: 400; color: var(--ink-3); font-size: var(--fs-xs); }
.acts { display: flex; justify-content: flex-end; } tr.p .acts { opacity: 0; } tr.p:hover .acts, tr.p:focus-within .acts { opacity: 1; }
.empty { text-align: center; color: var(--ink-3); padding: 36px 16px; }
.hint { padding: 10px 4px 12px; color: var(--ink-3); font-size: var(--fs-sm); }
.search { display: flex; align-items: center; gap: 6px; background: var(--fill); border-radius: var(--r-md); padding: 0 10px; height: 30px; width: 260px; color: var(--ink-3); }
.search input { border: 0; background: none; outline: none; width: 100%; height: 30px; padding: 0; box-shadow: none !important; }

/* ---------- Écran planning : tableau + Gantt ---------- */
.split-wrap { flex: 1; min-height: 0; margin: 12px 16px 0; background: var(--card); border: 1px solid var(--hair); border-radius: var(--r-lg); box-shadow: var(--shadow); display: grid; grid-template-columns: var(--tw, 660px) 6px 1fr; overflow: hidden; }
.split-wrap.ro { border-color: color-mix(in srgb, var(--warn) 40%, transparent); }
.splitter { background: var(--fill-2); cursor: col-resize; border-left: 1px solid var(--hair); border-right: 1px solid var(--hair); }
.splitter:hover, .splitter.drag { background: color-mix(in srgb, var(--accent) 30%, transparent); }
.pane { overflow: auto; position: relative; min-width: 0; outline: none; }
.sheet { border-collapse: collapse; width: 100%; font-size: var(--fs-md); table-layout: fixed; }
.sheet th { height: var(--head, 56px); text-align: left; font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .04em; color: var(--ink-3); font-weight: 600; padding: 0 8px; position: sticky; top: 0; background: var(--card); border-bottom: 1px solid var(--hair-strong); z-index: 5; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sheet td { height: var(--row); padding: 0 8px; border-bottom: 1px solid var(--hair); white-space: nowrap; overflow: hidden; position: relative; text-overflow: ellipsis; }
.sheet tr.sel td { background: color-mix(in srgb, var(--accent) 8%, transparent); }
.sheet td.n { color: var(--ink-3); text-align: center; cursor: pointer; background: var(--side); user-select: none; padding: 0; }
.sheet tr.sel td.n { background: color-mix(in srgb, var(--accent) 22%, var(--side)); color: var(--ink); font-weight: 700; }
.sheet td.r, .sheet th.r { text-align: right; }
.sheet .prog { width: 44px; margin-right: 6px; }
.sheet td.ro { color: var(--ink-2); }
.sheet td.act-cell { outline: 2px solid var(--accent); outline-offset: -2px; border-radius: var(--r-xs); background: var(--card) !important; z-index: 2; }
.sheet tr.s td.nm { font-weight: 650; }
.sheet .cn { display: flex; align-items: center; gap: 6px; overflow: hidden; } .sheet .cn span.tx { overflow: hidden; text-overflow: ellipsis; }
.sheet .ch { color: var(--ink-3); font-size: var(--fs-2xs); width: 12px; flex: none; text-align: center; }
.sheet .ms { display: inline-block; width: 8px; height: 8px; background: var(--ink); transform: rotate(45deg); flex: none; margin: 0 2px; }
.sheet td.nm .cn.hide { visibility: hidden; }
.cell-input { position: absolute; left: 0; top: 0; width: 100%; min-width: 120px; height: var(--row); border: 2px solid var(--accent); border-radius: var(--r-xs); padding: 0 6px; background: var(--card); z-index: 6; box-shadow: none; }
.cell-input:focus { box-shadow: none; }
.gantt { position: relative; }
.ghd { position: sticky; top: 0; z-index: 5; background: var(--card); height: var(--head, 56px); border-bottom: 1px solid var(--hair-strong); }
.grow { display: flex; height: 28px; } .grow.a { border-bottom: 1px solid var(--hair); }
.grow div { font-size: var(--fs-xs); color: var(--ink-2); font-weight: 600; padding: 6px 6px; border-right: 1px solid var(--hair); white-space: nowrap; overflow: hidden; flex: none; }
.grow.b div { font-weight: 500; color: var(--ink-3); }
.gcols { position: absolute; left: 0; top: var(--head, 56px); bottom: 0; }
.col { position: absolute; top: 0; bottom: 0; border-right: 1px solid var(--hair); }
.col.we { background: var(--we); } .col.fe { background: repeating-linear-gradient(135deg, var(--we), var(--we) 4px, transparent 4px, transparent 8px); }
.glines { position: absolute; left: 0; right: 0; top: var(--head, 56px); }
.gl { height: var(--row); border-bottom: 1px solid var(--hair); }
.gl.sel { background: color-mix(in srgb, var(--accent) 7%, transparent); }
.today { position: absolute; top: var(--head, 56px); bottom: 0; width: 2px; background: color-mix(in srgb, var(--ink) 62%, transparent); z-index: 3; }
.glbl { position: absolute; font-size: var(--fs-xs); color: var(--ink-2); z-index: 2; white-space: nowrap; line-height: 20px; pointer-events: none; }
svg.dep { position: absolute; left: 0; top: var(--head, 56px); pointer-events: none; z-index: 1; overflow: visible; }
.status { display: flex; gap: 18px; align-items: center; padding: 8px 20px; color: var(--ink-2); font-size: var(--fs-sm); flex: none; flex-wrap: wrap; }
.status b { color: var(--ink); }

/* ---------- Paramètres ---------- */
.setrow { display: flex; align-items: center; gap: 12px; height: 46px; border-bottom: 1px solid var(--hair); }
.setrow .d { width: 160px; font-variant-numeric: tabular-nums; } .setrow .l { flex: 1; font-weight: 500; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.setrow.off .l, .setrow.off .d { color: var(--ink-3); text-decoration: line-through; }
.sw { position: relative; width: 38px; height: 22px; border-radius: var(--r-full); background: var(--fill); border: 0; flex: none; padding: 0; }
.sw:after { content: ""; position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.3); transition: .15s; }
.sw.on { background: var(--good); } .sw.on:after { left: 18px; }
.cols2 { display: grid; grid-template-columns: 1fr 300px; gap: 18px; align-items: start; }
.sidebox { background: var(--fill-2); border-radius: var(--r-lg); padding: 14px; display: flex; flex-direction: column; gap: 10px; }
.sidebox h4 { margin: 0; font-size: var(--fs-body); }
.prefs { max-width: 520px; display: flex; flex-direction: column; gap: 14px; }

/* ---------- Fenêtres et notifications ---------- */
.overlay { position: fixed; inset: 0; background: rgba(0,0,0,.38); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); z-index: 60; display: flex; align-items: flex-start; justify-content: center; padding: 8vh 16px; overflow-y: auto; }
.modal { background: var(--card); border-radius: var(--r-xl); box-shadow: 0 20px 60px rgba(0,0,0,.3); width: 100%; max-width: 480px; border: 1px solid var(--hair); }
.modal .mh { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px 6px; } .modal .mh h2 { font-size: var(--fs-h3); }
.modal .mb { padding: 6px 20px 14px; display: flex; flex-direction: column; gap: 12px; } .modal .mb p { margin: 0; color: var(--ink-2); font-size: var(--fs-md); }
.modal .mf { padding: 12px 20px 16px; display: flex; justify-content: flex-end; gap: 8px; border-top: 1px solid var(--hair); flex-wrap: wrap; align-items: center; }
.recap { background: var(--fill-2); border-radius: var(--r-md); padding: 10px 12px; font-size: var(--fs-sm); color: var(--ink-2); }
.chk { display: flex; gap: 9px; align-items: flex-start; font-size: var(--fs-md); color: var(--ink); } .chk input { margin-top: 2px; flex: none; }
.toast { position: fixed; bottom: 40px; left: 50%; transform: translateX(-50%); background: #1d1d1f; color: #fff; padding: 9px 18px; border-radius: var(--r-full); font-weight: 500; z-index: 100; box-shadow: 0 8px 28px rgba(0,0,0,.3); max-width: 90vw; text-align: center; }
.toast.err { background: #c9302c; }

@media (max-width: 900px) { .layout { grid-template-columns: 1fr; } .tree { position: static; } .cols2 { grid-template-columns: 1fr; } .split-wrap { grid-template-columns: 1fr; } .splitter { display: none; } }

/* ---------- Aides à la saisie : calendrier, liste de ressources ---------- */
.picker { position: fixed; z-index: 90; background: var(--card); border: 1px solid var(--hair-strong); border-radius: var(--r-lg); box-shadow: var(--shadow); padding: 8px; font-size: var(--fs-md); }
.cal { width: 252px; }
.cal-h { display: flex; align-items: center; justify-content: space-between; padding: 0 2px 6px; } .cal-h b { text-transform: capitalize; }
.cal-g { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.cal-g .wd { text-align: center; font-size: var(--fs-xs); color: var(--ink-3); padding: 3px 0; text-transform: uppercase; }
.cal-g .d { border: 0; background: none; height: 30px; border-radius: var(--r-md); color: var(--ink); font: inherit; cursor: pointer; }
.cal-g .d:hover { background: var(--fill); }
.cal-g .d.out { color: var(--ink-3); opacity: .6; } .cal-g .d.we { color: var(--ink-2); }
.cal-g .d.fe { background: var(--we); text-decoration: underline dotted; }
.cal-g .d.now { box-shadow: inset 0 0 0 1.5px var(--accent); }
.cal-g .d.sel { background: var(--accent); color: #fff; font-weight: 600; opacity: 1; }
.cal-f { display: flex; justify-content: center; padding-top: 6px; }
.res { width: 270px; max-height: 300px; overflow: auto; padding: 6px; }
.opt { display: flex; align-items: center; gap: 9px; padding: 6px 8px; border-radius: var(--r-md); cursor: pointer; }
.opt:hover, .opt.hi { background: var(--fill); }
.opt.none { color: var(--ink-3); cursor: default; }
.opt .cb { width: 18px; height: 18px; border-radius: var(--r-sm); border: 1.5px solid var(--hair-strong); display: grid; place-items: center; font-size: var(--fs-xs); color: transparent; flex: none; }
.opt .cb.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.opt.add .cb { border-style: dashed; color: var(--accent); }
.opt .tx { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.opt-hint { padding: 6px 8px 2px; font-size: var(--fs-xs); color: var(--ink-3); }
.sheet .ch[data-toggle] { cursor: pointer; border-radius: var(--r-xs); }
.sheet .ch[data-toggle]:hover { background: var(--fill); color: var(--ink); }
.ctxmenu { position: fixed; z-index: 95; top: auto; left: auto; min-width: 230px; }
.ctxmenu .mi svg.i { color: var(--ink-3); } .ctxmenu .mi.danger { color: var(--bad-text); } .ctxmenu .mi.danger svg.i { color: var(--bad-text); }
.ctxmenu .mi.off { opacity: .4; pointer-events: none; }

/* ---------- Teintes des phases (12 couleurs) ---------- */
.c-blue { --c: #0a84ff; } .c-green { --c: #30c04f; } .c-orange { --c: #ff9f0a; } .c-purple { --c: #af52de; } .c-pink { --c: #ff375f; } .c-teal { --c: #2bb5c9; }
.c-yellow { --c: #f2c200; } .c-grey { --c: #8e8e93; } .c-indigo { --c: #5e5ce6; } .c-lime { --c: #8cc63f; } .c-brown { --c: #a2845e; } .c-red { --c: #e5383b; }

/* Tableau : bande de couleur à gauche, ligne de phase de 1er niveau plus haute et teintée */
.sheet td.n { box-shadow: inset 5px 0 0 var(--c, transparent); }
.sheet tr.g td { font-weight: 700; height: var(--row0); background: color-mix(in srgb, var(--c) var(--tint), var(--card)); }
.sheet tr.g td.n { background: color-mix(in srgb, var(--c) calc(var(--tint) * 1.6), var(--side)); color: var(--ink); }
.sheet tr.g td.nm { font-size: var(--fs-md); }
.sheet tr.g.sel td { background: color-mix(in srgb, var(--accent) 16%, var(--card)); }
.sheet .ms { background: var(--c, var(--ink)); }
.sheet .prog i { background: var(--c, var(--accent)); }

/* Gantt : phases (barre épaisse avec pointes et curseur d'avancement), tâches, jalons */
.gl.g { background: color-mix(in srgb, var(--c) calc(var(--tint) * .6), transparent); }
.bar-g { position: absolute; height: 16px; border-radius: 5px 5px 3px 3px; background: var(--c); z-index: 2; box-shadow: 0 1px 2px rgba(0,0,0,.25); cursor: context-menu; }
.bar-g:before, .bar-g:after { content: ""; position: absolute; bottom: -5px; width: 8px; height: 8px; background: var(--c); clip-path: polygon(0 0, 100% 0, 0 100%); }
.bar-g:before { left: 0; } .bar-g:after { right: 0; transform: scaleX(-1); }
.bar-g .pt { position: absolute; left: 6px; right: 6px; top: 6.5px; height: 3px; border-radius: var(--r-xs); background: rgba(255,255,255,.34); }
.bar-g .pt i { position: absolute; left: 0; top: 0; bottom: 0; border-radius: var(--r-xs); background: #fff; box-shadow: 0 0 0 .5px rgba(0,0,0,.12); }
.bar-t { position: absolute; height: 15px; border-radius: var(--r-sm); background: color-mix(in srgb, var(--c) 30%, var(--card)); border: 1px solid color-mix(in srgb, var(--c) 70%, transparent); overflow: hidden; z-index: 2; }
.bar-t i { display: block; height: 100%; background: var(--c); }
.dm { position: absolute; width: 15px; height: 15px; background: var(--c); transform: rotate(45deg); border-radius: var(--r-xs); z-index: 2; box-shadow: 0 0 0 2px var(--card); }
.glbl.g { font-weight: 700; color: var(--ink); font-size: var(--fs-sm); }
.rem { color: var(--ink-3); margin-right: 8px; }
.pc { font-weight: 700; color: var(--ink); margin: 0 4px 0 2px; }
.today:before { content: none; }

/* Choix de la couleur d'une phase, options du Gantt, infobulle de détails */
.cpop { position: fixed; z-index: 90; width: 262px; background: var(--card); border: 1px solid var(--hair-strong); border-radius: var(--r-lg); box-shadow: 0 12px 40px rgba(0,0,0,.28); padding: 12px; }
.cpop h4 { margin: 0 0 2px; font-size: var(--fs-md); } .cpop p { margin: 0 0 10px; font-size: var(--fs-xs); color: var(--ink-3); }
.swatches { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 10px; }
.swatches button { height: 34px; border: 0; border-radius: var(--r-md); background: var(--c); position: relative; color: #fff; font-weight: 700; }
.swatches button:hover { transform: scale(1.06); }
.swatches button.on:after { content: "✓"; position: absolute; inset: 0; display: grid; place-items: center; }
.swatches .c-yellow.on:after, .swatches .c-lime.on:after { color: #1d1d1f; }
.opts { position: fixed; z-index: 90; width: 300px; background: var(--card); border: 1px solid var(--hair-strong); border-radius: var(--r-lg); box-shadow: 0 12px 40px rgba(0,0,0,.28); padding: 8px; }
.opts h4 { margin: 6px 8px 4px; font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); font-weight: 600; }
.opts label { display: flex; align-items: flex-start; gap: 10px; padding: 8px; border-radius: var(--r-md); cursor: pointer; font-size: var(--fs-md); }
.opts label:hover { background: var(--fill); } .opts label small { display: block; color: var(--ink-3); font-size: var(--fs-xs); }
.opts input { width: 17px; height: 17px; margin-top: 1px; accent-color: var(--accent); flex: none; padding: 0; }
.tipc { position: fixed; z-index: 95; pointer-events: none; min-width: 210px; max-width: 280px; background: var(--card); border: 1px solid var(--hair-strong); border-radius: var(--r-lg); box-shadow: 0 10px 32px rgba(0,0,0,.28); padding: 10px 13px; font-size: var(--fs-sm); color: var(--ink-2); }
.tipc b { display: flex; align-items: center; gap: 7px; color: var(--ink); font-size: var(--fs-md); margin-bottom: 5px; } .tipc b i { width: 10px; height: 10px; border-radius: var(--r-xs); background: var(--c); flex: none; }
.tipc .l { display: flex; justify-content: space-between; gap: 14px; padding: 1.5px 0; } .tipc .l span:last-child { color: var(--ink); font-weight: 500; text-align: right; }
.tipc .pr { height: 5px; border-radius: var(--r-xs); background: var(--fill); margin: 5px 0 4px; overflow: hidden; } .tipc .pr i { display: block; height: 100%; background: var(--c); }

/* Glisser une barre (déplacer, allonger) et une ligne (changer de place) */
.bar-t, .dm { cursor: grab; touch-action: none; }
.bar-t .rz { position: absolute; right: 0; top: 0; bottom: 0; width: 8px; cursor: ew-resize; }
.split-wrap.ro .bar-t, .split-wrap.ro .dm { cursor: default; }
.split-wrap.ro .bar-t .rz { display: none; }
.bar-t.dragging, .dm.dragging { cursor: grabbing; z-index: 6; box-shadow: 0 4px 14px rgba(0,0,0,.3); }
.row-dragging, .row-dragging .sheet td { user-select: none; cursor: grabbing; }
.drop-line { position: absolute; left: 0; height: 3px; background: var(--accent); border-radius: var(--r-xs); z-index: 6; pointer-events: none; }
.sheet tr.drop-into td { background: color-mix(in srgb, var(--accent) 22%, var(--card)) !important; }
.sheet tr.drop-into td:first-child { box-shadow: inset 4px 0 0 var(--accent); }

/* Pendant un glissement, le curseur reste celui du geste même quand le pointeur quitte la poignée ou la barre */
body.drag-resize, body.drag-resize * { cursor: ew-resize !important; }
body.drag-move, body.drag-move * { cursor: grabbing !important; }
.glbl[data-for] { will-change: translate; }

/* Déplacement d'une ligne : étiquette qui suit le pointeur, ligne d'origine hachurée, sous-tâches emportées estompées */
.drag-chip { position: fixed; z-index: 60; pointer-events: none; display: flex; align-items: center; gap: 8px; height: 34px; padding: 0 12px 0 0; border-radius: var(--r-full); overflow: hidden; background: var(--card); border: 1px solid var(--hair-strong); box-shadow: 0 10px 30px rgba(0,0,0,.28); max-width: 320px; font-size: var(--fs-md); }
.drag-chip .st { width: 5px; align-self: stretch; background: var(--c, var(--accent)); }
.drag-chip .no { color: var(--ink-3); min-width: 24px; text-align: center; }
.drag-chip b { font-weight: 650; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.drag-chip .more { margin-left: auto; background: var(--fill); border-radius: var(--r-full); font-size: var(--fs-xs); padding: 1px 8px; color: var(--ink-2); }
.sheet tr.drag-src td { background: repeating-linear-gradient(135deg, var(--fill-2), var(--fill-2) 6px, transparent 6px, transparent 12px) !important; color: transparent !important; }
.sheet tr.drag-sub td { opacity: .4; }
.drop-tag { position: absolute; right: 12px; z-index: 7; pointer-events: none; background: var(--accent); color: #fff; font-size: var(--fs-xs); font-weight: 600; padding: 2px 9px; border-radius: var(--r-full); white-space: nowrap; box-shadow: 0 2px 8px rgba(0,0,0,.25); }

/* Ligne « projet » (début et fin du projet) : grise, non personnalisable */
.c-proj { --c: #5c5c61; }
.sheet tr.proj td { font-weight: 700; cursor: default; }
.sheet tr.proj td.n { background: color-mix(in srgb, var(--c) 22%, var(--side, var(--card))); }
.bar-proj { cursor: default; }
.gl.proj { background: color-mix(in srgb, var(--c) 10%, transparent); }
/* Étendue de la sélection repérée dans l'échelle de dates */
.hsel { position: absolute; top: 0; bottom: 0; z-index: 1; pointer-events: none; box-sizing: border-box; background: color-mix(in srgb, var(--accent) 8%, transparent); border-left: 1px solid color-mix(in srgb, var(--accent) 70%, transparent); border-right: 1px solid color-mix(in srgb, var(--accent) 70%, transparent); }
/* Redimensionnement des colonnes */
.sheet th { position: sticky; }
.sheet th .cr { position: absolute; top: 0; bottom: 0; right: 0; width: 7px; cursor: col-resize; touch-action: none; }
.sheet th .cr:hover, .sheet th .cr.on { background: color-mix(in srgb, var(--accent) 45%, transparent); }
body.col-resize, body.col-resize * { cursor: col-resize !important; user-select: none; }
/* Liaisons cliquables (suppression) */
svg.dep .lk .v { stroke: var(--ink-3); } svg.dep .lk .h { fill: var(--ink-3); stroke: none; }
svg.dep .lk .hit { stroke: transparent; stroke-width: 12px; pointer-events: stroke; cursor: pointer; }
svg.dep .lk:hover .v { stroke: var(--accent); stroke-width: 2px; } svg.dep .lk:hover .h { fill: var(--accent); }

/* Lot 4 : chemin critique, marges, contraintes, types de liens */
/* Même lecture que les autres barres : terminé foncé, reste clair */
.bar-t.crit, .dm.crit { --c: var(--bad-text, #e5322d); }
.bar-t.con, .dm.con { outline: 2px solid color-mix(in srgb, #d97706 70%, transparent); outline-offset: 1px; }
.bar-t.clate, .dm.clate { outline: 2px solid var(--bad-text, #e5322d); outline-offset: 1px; }
.free { position: absolute; height: 5px; border-radius: 0 3px 3px 0; z-index: 1; opacity: .7; background: repeating-linear-gradient(90deg, var(--ink-3) 0 3px, transparent 3px 6px); pointer-events: none; }
.cflag { background: var(--bad-text, #e5322d); color: #fff; font-weight: 600; font-size: var(--fs-xs); padding: 0 6px; border-radius: var(--r-full); margin-right: 6px; }
.sheet .cwarn { color: #b45309; font-weight: 600; } .sheet .cbad { color: var(--bad-text, #e5322d); font-weight: 600; } .sheet .cdim { color: var(--ink-3); }
.sheet .ccrit { color: var(--bad-text, #e5322d); font-weight: 700; }
.cpop.wide { width: 340px; }
.cpop .opt { display: flex; gap: 8px; align-items: flex-start; padding: 7px 8px; border-radius: var(--r-md); cursor: pointer; font-size: var(--fs-md); }
.cpop .opt:hover { background: var(--fill); }
.cpop .opt small { display: block; color: var(--ink-3); font-size: var(--fs-xs); } .cpop .opt small.code { display: inline; margin-left: 4px; background: var(--fill); padding: 0 5px; border-radius: var(--r-sm); }
.cpop .opt input { width: 17px; height: 17px; margin-top: 1px; padding: 0; flex: none; accent-color: var(--accent); }
.cpop .opt > span { flex: 1; min-width: 0; }
.cpop .f.lag { display: block; margin-top: 8px; font-size: var(--fs-xs); color: var(--ink-2); } .cpop .f.lag[hidden] { display: none; }
.cpop .f.lag input { display: block; margin-top: 4px; width: 140px; }
.cpop .acts { display: flex; justify-content: space-between; gap: 8px; margin-top: 12px; }

/* Audit UX : poignée de colonne plus large, infobulle regroupée, transitions douces */
.sheet th .cr { width: 10px; }
.tipc .crit-pill { margin-left: auto; background: var(--bad-text); color: #fff; font-size: var(--fs-xs); font-weight: 600; padding: 0 8px; border-radius: var(--r-full); }
.tipc .l.sub span:first-child { color: var(--ink-3); }
.ib, .nav, .seg button, .btn, .mi, .opts label, .cpop .opt { transition: background-color .12s ease, color .12s ease, box-shadow .12s ease; }
@keyframes pop-in { from { opacity: 0; transform: translateY(-4px) scale(.98); } to { opacity: 1; transform: none; } }
@keyframes fade-in { from { opacity: 0; } to { opacity: 1; } }
.overlay { animation: fade-in .14s ease-out; }
.modal { animation: pop-in .16s ease-out; }
.menu.open, .cpop, .opts, .ctxmenu { animation: pop-in .12s ease-out; transform-origin: top left; }
.toast { animation: fade-in .15s ease-out; }
@media (prefers-reduced-motion: reduce) { *, *:before, *:after { animation: none !important; transition: none !important; scroll-behavior: auto !important; } }


/* Traits verticaux entre les colonnes du tableau (option « Traits verticaux ») */
:root { --vl: rgba(0,0,0,.09); }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --vl: rgba(255,255,255,.1); } }
:root[data-theme="dark"] { --vl: rgba(255,255,255,.1); }
body.vgrid .sheet td + td, body.vgrid .sheet th + th { border-left: 1px solid var(--vl); }

/* Densités d'affichage : confortable (origine), normal, dense. Les hauteurs viennent de --row / --row0 / --head (voir gantt.js) */
body[data-density="normal"] .sheet td, body[data-density="dense"] .sheet td { font-size: var(--fs-sm); padding: 0 6px; }
body[data-density="dense"] .sheet td { font-size: var(--fs-xs); }
body[data-density="normal"] .sheet tr.g td.nm, body[data-density="dense"] .sheet tr.g td.nm { font-size: var(--fs-md); }
body[data-density="normal"] .glbl, body[data-density="dense"] .glbl { font-size: var(--fs-xs); }
body[data-density="normal"] .sheet th, body[data-density="dense"] .sheet th { padding: 0 6px; }
body[data-density="normal"] .ghd .grow div, body[data-density="dense"] .ghd .grow div { line-height: 16px; }
body[data-density="dense"] .ghd .grow div { padding-top: 4px; padding-bottom: 4px; }
/* Tâche sélectionnée : fin liseré, discret */
.bar-t.picked, .dm.picked { outline: 1.5px solid color-mix(in srgb, var(--accent) 60%, transparent); outline-offset: 2px; }
.bar-g.picked { box-shadow: 0 0 0 1.5px color-mix(in srgb, var(--accent) 60%, transparent), 0 1px 2px rgba(0,0,0,.25); }
.opts .seg.dens { display: flex; margin: 2px 8px 8px; } .opts .seg.dens button { flex: 1; }

/* Colonnes : déplacement, affichage, filtres façon Excel */
.sheet th.mv { cursor: grab; }
.sheet th.fl { padding-right: 26px; }
.sheet th .fb { position: absolute; right: 12px; top: 50%; translate: 0 -50%; width: 20px; height: 20px; display: grid; place-items: center; border: 0; border-radius: var(--r-sm); background: none; color: var(--ink-3); opacity: 0; padding: 0; cursor: pointer; }
.sheet th .fb .i { width: 12px; height: 12px; }
.sheet th:hover .fb, .sheet th .fb:focus-visible { opacity: 1; }
.sheet th.filtered .fb { opacity: 1; color: var(--accent); background: color-mix(in srgb, var(--accent) 14%, transparent); }
.sheet th .fb:hover { background: var(--fill); color: var(--ink); }
.col-drop { position: absolute; width: 3px; background: var(--accent); border-radius: var(--r-xs); z-index: 8; pointer-events: none; }
.fpop { width: 300px; }
.fpop .fq { width: 100%; height: 32px; margin: 6px 0; font-size: var(--fs-md); }
.flist { max-height: 260px; overflow: auto; border: 1px solid var(--hair); border-radius: var(--r-md); padding: 4px; }
.fi { display: flex; align-items: center; gap: 8px; padding: 4px 6px; border-radius: var(--r-sm); font-size: var(--fs-md); cursor: pointer; }
.fi:hover { background: var(--fill); } .fi.all { font-weight: 600; border-bottom: 1px solid var(--hair); border-radius: 6px 6px 0 0; margin-bottom: 2px; }
.fi input { width: 16px; height: 16px; padding: 0; flex: none; accent-color: var(--accent); }
.fi span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .fi em { font-style: normal; color: var(--ink-3); font-size: var(--fs-xs); }
.colpop .acts { display: flex; margin: 6px 8px 4px; } .colpop .opt-hint { margin: 6px 8px 0; }
.fnote { display: inline-flex; align-items: center; gap: 5px; color: var(--accent); font-weight: 600; }
.fnote .i { width: 13px; height: 13px; } .fnote a { color: inherit; }

/* Colonnes étroites : le texte est coupé (…) au lieu de déborder sur la colonne voisine ; la cellule en cours de saisie reste libre */
.sheet td:has(.cell-input) { overflow: visible; }
.sheet th { user-select: none; -webkit-user-select: none; }
body.drag-move, body.drag-move * { user-select: none !important; -webkit-user-select: none !important; }
/* En-tête du Gantt à deux lignes serrées (zoom jour en normal et dense) */
/* mois : ligne fine (16 / 15 px) ; jours : tout le reste, pour une lecture confortable */
.ghd.tight .grow.a div { height: 16px; line-height: 16px; padding: 0 6px; }
.ghd.tight .grow.b div { height: calc(var(--head) - 16px); line-height: calc(var(--head) - 17px); padding: 0 6px; }
body[data-density="dense"] .ghd.tight .grow.a div { height: 15px; line-height: 15px; }
body[data-density="dense"] .ghd.tight .grow.b div { height: calc(var(--head) - 15px); line-height: calc(var(--head) - 16px); }
/* Panneau de filtre : pied toujours visible, la liste défile */
.fpop { display: flex; flex-direction: column; max-height: min(540px, calc(100vh - 16px)); padding: 0; width: 310px; }
.fpop header { padding: 12px 14px 0; } .fpop h4 { margin: 0 0 8px; }
.fpop .tabs { display: flex; background: var(--fill); border-radius: var(--r-md); padding: 2px; margin-bottom: 8px; }
.fpop .tabs button { flex: 1; border: 0; background: none; min-height: 28px; border-radius: var(--r-sm); font-size: var(--fs-sm); color: var(--ink-2); cursor: pointer; }
.fpop .tabs button.on { background: var(--card); color: var(--ink); box-shadow: 0 1px 3px rgba(0,0,0,.12); font-weight: 600; }
.fpop .fbody { padding: 0 14px 10px; overflow: auto; min-height: 0; flex: 1; }
.fpop .flist { max-height: 240px; }
.fpop .cond { display: flex; flex-direction: column; gap: 8px; } .fpop .cond label { display: flex; flex-direction: column; gap: 4px; font-size: var(--fs-xs); color: var(--ink-2); }
.fpop .cond select, .fpop .cond input { height: 32px; font-size: var(--fs-md); }
.fpop footer { display: flex; align-items: center; gap: 8px; padding: 10px 14px; border-top: 1px solid var(--hair); background: var(--side); border-radius: 0 0 14px 14px; }
.fpop footer .cnt { margin-right: auto; font-size: var(--fs-xs); color: var(--ink-2); } .fpop footer .cnt b { color: var(--ink); } .fpop footer .cnt.zero b { color: var(--bad-text); }
.fpop footer .link { border: 0; background: none; color: var(--accent); font-size: var(--fs-sm); cursor: pointer; padding: 0 4px; }
.fpop footer .btn:disabled { opacity: .4; }
.fchip { display: inline-flex; align-items: center; gap: 4px; background: color-mix(in srgb, var(--accent) 12%, transparent); color: var(--accent); border-radius: var(--r-full); padding: 1px 3px 1px 10px; font-weight: 600; font-size: var(--fs-xs); }
.fchip button { border: 0; background: none; color: inherit; cursor: pointer; font-size: var(--fs-body); line-height: 1; padding: 0 5px; }

/* Le bouton de filtre ne doit jamais recouvrir le libellé (les règles de densité resserrent le padding) */
.sheet th.fl, body[data-density] .sheet th.fl { padding-right: 28px; }

/* Gantt masqué : le tableau prend toute la largeur */
.split-wrap.nogantt { grid-template-columns: 1fr; }
.split-wrap.nogantt .splitter, .split-wrap.nogantt #gp { display: none; }
.split-wrap.nogantt table.sheet { min-width: 100%; }
.ib.on { background: var(--fill); color: var(--accent); }
.pane { scroll-padding-top: var(--head, 56px); }

/* Vues */
.vpop { width: 390px; max-height: min(560px, calc(100vh - 24px)); overflow: auto; }
.vi { display: flex; align-items: center; gap: 8px; padding: 7px 10px; border-radius: var(--r-md); cursor: pointer; font-size: var(--fs-md); }
.vi:hover { background: var(--fill); } .vi .ck { width: 14px; color: var(--accent); font-weight: 700; flex: none; }
.vi .tx { flex: 1; min-width: 0; } .vi .tx small { display: block; color: var(--ink-3); font-size: var(--fs-xs); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vi .ia { display: none; gap: 2px; } .vi:hover .ia { display: flex; }
.vi .ia button { border: 0; background: none; border-radius: var(--r-sm); width: 26px; height: 26px; cursor: pointer; color: var(--ink-2); display: grid; place-items: center; padding: 0; } .vi .ia button:hover { background: var(--fill); color: var(--ink); }
.vi .ia .i { width: 14px; height: 14px; } .vi .star.on { color: #ff9f0a; }
.vtag { display: inline-block; border-radius: var(--r-full); padding: 0 8px; font-size: var(--fs-xs); font-weight: 600; background: var(--fill); color: var(--ink-2); } .vtag.sh { background: color-mix(in srgb, #30c04f 18%, transparent); color: var(--good-text); }
.vnote { display: inline-flex; align-items: center; gap: 5px; } .vnote .i { width: 13px; height: 13px; } .vnote em { font-style: normal; color: var(--warn-text); font-weight: 600; }
.vlink { color: var(--accent); font-weight: 600; text-decoration: none; }
.modal .recap { background: var(--side); border: 1px solid var(--hair); border-radius: var(--r-md); padding: 8px 12px; font-size: var(--fs-sm); display: grid; grid-template-columns: auto 1fr; gap: 3px 12px; } .modal .recap span:nth-child(odd) { color: var(--ink-3); }
.vis { display: flex; flex-direction: column; gap: 6px; } .vis label { display: flex; gap: 10px; align-items: flex-start; border: 1px solid var(--hair-strong); border-radius: var(--r-md); padding: 8px 10px; cursor: pointer; font-size: var(--fs-md); }
.vis label:has(input:checked) { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 7%, transparent); } .vis small { display: block; color: var(--ink-3); font-size: var(--fs-xs); }
.vis input { width: 17px; height: 17px; margin-top: 1px; padding: 0; flex: none; accent-color: var(--accent); }

/* Bandeau des filtres et de la vue, au-dessus du tableau : une seule ligne */
.fbar { display: flex; align-items: center; gap: 10px; margin: 10px 16px -2px; padding: 4px 2px; font-size: var(--fs-sm); color: var(--ink-2); flex: none; white-space: nowrap; overflow-x: auto; scrollbar-width: thin; }
.fbar > * { flex: none; }
/* Ligne gardée hors filtre */
.sheet tr.offf td { background-image: repeating-linear-gradient(135deg, color-mix(in srgb, var(--accent) 9%, transparent) 0 5px, transparent 5px 10px); }

/* Barre d'outils : le nom du planning ne disparaît jamais ; le dossier parent cède la place en premier */
.crumb { min-width: 150px; max-width: 340px; } .crumb a { overflow: hidden; text-overflow: ellipsis; flex: 0 3 auto; min-width: 0; } .crumb b { flex: 0 1 auto; min-width: 90px; white-space: nowrap; }
.morepop { width: 280px; } .morepop .vi .ck { width: 18px; color: var(--ink-2); display: grid; place-items: center; } .morepop .vi .i { width: 16px; height: 16px; } .morepop .vi.dis { opacity: .4; cursor: default; }
/* N° et Nom figés quand le tableau défile vers la droite */
.pane { scroll-padding-left: calc(var(--n-w, 40px) + var(--name-w, 240px)); }
.sheet td.n, .sheet th[data-key="rn"] { position: sticky; left: 0; z-index: 3; }
.sheet td.nm, .sheet th[data-key="name"] { position: sticky; left: var(--n-w, 40px); z-index: 3; box-shadow: inset -1px 0 0 var(--hair-strong); }
.sheet td.nm { background-color: var(--card); }
.sheet tr.sel td.nm { background-color: color-mix(in srgb, var(--accent) 8%, var(--card)); }
.sheet tr.g td.nm { background-color: color-mix(in srgb, var(--c) var(--tint), var(--card)); }
.sheet th[data-key="rn"], .sheet th[data-key="name"] { z-index: 7; }
/* Filtre toujours repérable ; sur écran tactile, les actions au survol restent affichées */
.sheet th .fb { opacity: .4; }
@media (hover: none) { tr.p .acts { opacity: 1; } .vi .ia { display: flex; } .sheet th .fb { opacity: 1; } }
.ctx.compact .lb { display: none; }
.ctx > .sp { flex: 1; }
.ctx.compact .pill:not(.ro):not(.mod) { font-size: 0; gap: 0; padding: 5px; } .ctx.compact .seg button { padding: 3px 8px; }

/* Lot repères */
.bar-t { border-color: var(--c); }                        /* tâche à 0 % : le contour porte la lisibilité */
.toast button { margin-left: 14px; border: 0; background: none; color: #7cc0ff; font: inherit; font-weight: 700; cursor: pointer; padding: 0; }
.dens-acts { display: flex; gap: 6px; margin: 2px 8px 8px; } .dens-acts .btn { flex: 1; justify-content: center; }
.status a.vlink { flex: none; }
.legend { width: 300px; }
.lg { display: flex; align-items: center; gap: 12px; padding: 5px 8px; font-size: var(--fs-md); }
.lg .smp { width: 52px; flex: none; display: grid; place-items: center; min-height: 20px; }
.lg .bar-t, .lg .bar-g { position: static; width: 46px; display: block; } .lg .bar-t { height: 13px; } .lg .bar-g { margin-bottom: 4px; }
.lg .dm { position: static; display: block; width: 12px; height: 12px; }
.lg .free { position: static; display: block; width: 46px; }
.lg-today { display: block; width: 2px; height: 18px; background: var(--accent); }
.lg-off { display: block; width: 46px; height: 16px; border-radius: var(--r-xs); background: var(--we); border: 1px solid var(--hair); }
.help { display: flex; flex-direction: column; gap: 4px; max-height: 62vh; overflow: auto; } .help .hg { margin: 10px 0 4px; font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); } .help .hg:first-child { margin-top: 0; }
.hl { display: grid; grid-template-columns: 170px 1fr; gap: 10px; font-size: var(--fs-md); align-items: baseline; }
.hl kbd { font: inherit; font-size: var(--fs-xs); background: var(--fill); border-radius: var(--r-sm); padding: 1px 7px; justify-self: start; }
.findbar { position: fixed; z-index: 80; display: flex; align-items: center; gap: 4px; width: 340px; padding: 5px 6px; background: var(--card); border: 1px solid var(--hair-strong); border-radius: var(--r-lg); box-shadow: 0 8px 28px rgba(0,0,0,.22); }
.findbar input { flex: 1; min-width: 0; height: 30px; font-size: var(--fs-md); } .findbar .cnt { font-size: var(--fs-xs); color: var(--ink-3); white-space: nowrap; padding: 0 4px; } .findbar .cnt.zero { color: var(--bad-text); }

/* Accessibilité */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.skip { position: fixed; left: 8px; top: -60px; z-index: 200; background: var(--accent); color: #fff; padding: 8px 14px; border-radius: var(--r-md); font-weight: 600; } .skip:focus { top: 8px; }
#main:focus { outline: none; }
/* État lisible sans la couleur : critique hachuré, contrainte en pointillés, valeur critique marquée */
.bar-t.crit, .bar-t.crit i, .dm.crit { background-image: repeating-linear-gradient(135deg, rgba(255,255,255,.38) 0 2px, transparent 2px 5px); }
.bar-t.con, .dm.con { outline-style: dashed; }
.bar-t.clate, .dm.clate { outline-width: 2px; }
.sheet .ccrit::after { content: " !"; }
/* Accueil */
.rec-t { margin: 4px 2px 8px; font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); font-weight: 600; }
.recs { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 10px; margin-bottom: 18px; }
.rec { display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px; border: 1px solid var(--hair-strong); border-radius: var(--r-lg); color: inherit; text-decoration: none; min-width: 0; } .rec:hover { background: var(--fill-2); }
.rec.on { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 6%, transparent); }
.rec .t { flex: 1; min-width: 0; } .rec b, .rec small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .rec small { color: var(--ink-3); font-size: var(--fs-xs); margin-bottom: 6px; } .rec .prog { width: 100%; margin: 0; display: block; }
.empty .btn { margin-top: 4px; }
/* Écran étroit : message d'orientation, en-tête compact */
.narrow-note { display: none; }
@media (max-width: 900px) {
  .narrow-note { display: flex; align-items: center; gap: 8px; margin: 8px 16px 0; padding: 6px 12px; border-radius: var(--r-md); font-size: var(--fs-md); color: var(--ink); background: color-mix(in srgb, var(--warn) 14%, var(--card)); flex: none; } .narrow-note span { flex: 1; }
}
@media (max-width: 640px) {
  .bar { padding: 0 8px; overflow-x: auto; scrollbar-width: none; } .logo .lt, .user > span, .user .av { display: none; } .logo { margin-right: 4px; } .nav { padding: 6px 7px; font-size: var(--fs-md); }
  .ctx { padding: 5px 8px; } .status { padding: 6px 10px; gap: 8px 12px; } .split-wrap { margin: 8px 8px 0; }
}
@media (max-width: 640px) { .status .sp + span { display: none; } }
@media (max-width: 640px) { .sheet td.nm, .sheet th[data-key="name"] { position: relative; left: auto; } }

/* Attributs personnalisés */
.sheet td input[data-bool] { width: 15px; height: 15px; vertical-align: middle; accent-color: var(--accent); padding: 0; }
.colpop label { align-items: center; } .colpop label .ib { margin-left: auto; width: 26px; height: 26px; } .colpop label .ib .i { width: 14px; height: 14px; }
.colpop .acts { flex-wrap: wrap; gap: 6px; }

/* Attributs : pastilles de liste, liens, valeurs calculées */
.apill { display: inline-block; padding: 0 7px; border-radius: 99px; font-size: 12px; font-weight: 600; line-height: 18px; margin-right: 3px; background: color-mix(in srgb, var(--c, #888) 18%, transparent); color: color-mix(in srgb, var(--c, #888) 72%, var(--ink)); }
.alink { color: var(--accent); text-decoration: none; } .alink:hover { text-decoration: underline; }
.sheet td.acalc { font-style: italic; color: var(--ink-2); }
.ctxmenu { max-height: 72vh; overflow: auto; }
.colpop { max-height: min(620px, calc(100vh - 24px)); overflow: auto; } .colpop .colq { width: calc(100% - 16px); margin: 4px 8px 2px; height: 30px; font-size: 13px; }
.colpop h4[hidden], .colpop label[hidden] { display: none; }
/* Fenêtre d'attribut */
.items { display: flex; flex-direction: column; gap: 4px; margin: 4px 0 6px; } .items .item { display: flex; gap: 4px; align-items: center; } .items input { flex: 1; height: 32px; }
/* Fiche de la tâche */
.tsheet { position: fixed; right: 16px; width: 380px; max-width: calc(100vw - 32px); z-index: 55; background: var(--card); border: 1px solid var(--hair-strong); border-radius: 14px; box-shadow: 0 16px 48px rgba(0,0,0,.24); display: flex; flex-direction: column; }
.tsheet header { display: flex; align-items: flex-start; gap: 8px; padding: 12px 14px 10px; border-bottom: 1px solid var(--hair); } .tsheet header b { flex: 1; font-size: 15px; }
.tsheet .bd { overflow: auto; padding: 2px 14px 14px; flex: 1; }
.tsheet h4 { margin: 14px 0 4px; font-size: 12px; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); }
.tsheet .sl { display: grid; grid-template-columns: 130px 1fr; gap: 8px; align-items: center; min-height: 32px; font-size: 13px; } .tsheet .sl > span:first-child { color: var(--ink-2); font-size: 12.5px; }
.tsheet .sl.wide { grid-template-columns: 1fr; align-items: start; } .tsheet .sl em { color: var(--ink-3); font-style: normal; }
.tsheet .sl input:not([type=checkbox]), .tsheet .sl select, .tsheet .sl textarea { height: 30px; font-size: 13px; padding: 0 8px; } .tsheet .sl textarea { height: auto; padding: 6px 8px; resize: vertical; }
.tsheet .sl input[type=checkbox] { width: 16px; height: 16px; } .tsheet .ro { color: var(--ink-2); font-style: italic; }
.tsheet .mchk { display: flex; flex-wrap: wrap; gap: 4px 10px; } .tsheet .mchk label { display: flex; align-items: center; gap: 4px; } .tsheet .mchk input { width: 15px !important; height: 15px !important; }
.tsheet .urlf { display: flex; gap: 4px; align-items: center; } .tsheet .urlf input { flex: 1; }

/* Attributs, lot 3 : bibliothèque */
.colpop .libbox h4 { margin-top: 10px; } .libitem { display: flex; align-items: center; gap: 8px; padding: 4px 8px; font-size: 13px; } .libitem span { flex: 1; min-width: 0; } .libitem small { display: block; color: var(--ink-3); font-size: 12px; }
.modal.wide { max-width: 720px; } .modal .alist { max-height: 50vh; overflow: auto; } .modal .alist table.list td { vertical-align: middle; }
.warnnote { color: var(--warn-text); }
table.list tr.dim td { color: var(--ink-3); }

/* Relations */
.achip { display: inline-block; padding: 0 7px; border-radius: 6px; font-size: 12px; line-height: 18px; margin-right: 3px; background: var(--fill); color: var(--ink); }

/* Version de référence : barre sous la barre de la tâche, repère dans le menu Versions, écart de fin */
.base { position: absolute; height: 4px; border-radius: 2px; background: var(--ink-3); opacity: .55; z-index: 1; pointer-events: none; }
.base.g { height: 3px; } .base.ms { height: 4px; }
.lg .base { position: static; display: block; width: 46px; }
.refpill { display: inline-block; padding: 0 6px; margin-left: 4px; border-radius: 99px; font-size: 11px; font-weight: 600; line-height: 16px; background: var(--fill-2); color: var(--ink-2); vertical-align: 1px; }
.gap-late { color: var(--bad-text); font-weight: 600; } .gap-early { color: var(--good-text); }

/* Journal des modifications */
.jcard { padding: 0; } .jpanel { display: flex; flex-direction: column; min-height: 0; }
.jfilters { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; padding: 12px 14px; border-bottom: 1px solid var(--hair); }
.jfilters label { display: flex; flex-direction: column; gap: 3px; font-size: var(--fs-xs); color: var(--ink-2); }
.jfilters select, .jfilters input[type=search], .jfilters input[type=date] { height: 32px; width: auto; min-width: 120px; font-size: var(--fs-md); padding: 0 8px; }
.jfilters input[type=search] { width: 170px; } .jfilters .chk { flex-direction: row; align-items: center; gap: 6px; } .jfilters .chk input { width: 16px; height: 16px; }
.jchips { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; padding: 6px 14px; min-height: 36px; font-size: var(--fs-sm); color: var(--ink-2); border-bottom: 1px solid var(--hair); }
.jbody { display: grid; grid-template-columns: 1fr; min-height: 0; } .jbody.withdetail { grid-template-columns: 1fr 360px; } .jlist { min-width: 0; }
.jtw { overflow: auto; } .jtable { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); }
.jtable th { position: sticky; top: 0; background: var(--card); text-align: left; font-size: var(--fs-xs); text-transform: uppercase; letter-spacing: .04em; color: var(--ink-3); font-weight: 600; padding: 8px; border-bottom: 1px solid var(--hair-strong); white-space: nowrap; }
.jtable td { padding: 6px 8px; border-bottom: 1px solid var(--hair); vertical-align: top; } .jtable .nw { white-space: nowrap; }
.jop { cursor: pointer; } .jop:hover td { background: var(--fill-2); } .jop.on td { background: color-mix(in srgb, var(--accent) 9%, var(--card)); } .jsub td { background: var(--side); }
.jtg { display: inline-grid; place-items: center; width: 18px; height: 18px; margin-right: 4px; border: 0; background: none; color: var(--ink-3); font-size: var(--fs-2xs); cursor: pointer; padding: 0; vertical-align: middle; }
.jtag { display: inline-block; border-radius: var(--r-full); padding: 0 8px; font-size: var(--fs-xs); font-weight: 600; background: var(--fill); color: var(--ink-2); white-space: nowrap; }
.jtag.add { color: var(--good-text); } .jtag.del { color: var(--bad-text); } .jtag.sys { color: var(--warn-text); }
.jold { color: var(--ink-3); text-decoration: line-through; } .jnew { font-weight: 600; } .jarr { color: var(--ink-3); margin: 0 5px; }
.jtask { color: var(--accent); cursor: pointer; } .jtask:hover { text-decoration: underline; }
.jmore { padding: 10px 14px; }
.jdetail { border-left: 1px solid var(--hair); padding: 12px 14px; font-size: var(--fs-sm); min-width: 0; } .jdetail > .ib { float: right; } .jdetail h3 { margin: 0 0 4px; font-size: var(--fs-body); } .jdetail h4 { margin: 12px 0 6px; font-size: var(--fs-md); }
.jdetail dl { display: grid; grid-template-columns: 96px 1fr; gap: 5px 10px; margin: 10px 0; } .jdetail dt { color: var(--ink-3); } .jdetail dd { margin: 0; word-break: break-word; } .jdetail code { font-size: var(--fs-2xs); background: var(--fill); padding: 1px 5px; border-radius: var(--r-xs); }
.jtl { list-style: none; margin: 0; padding: 0; } .jtl li { position: relative; padding: 0 0 10px 14px; border-left: 2px solid var(--hair-strong); margin-left: 4px; } .jtl li::before { content: ""; position: absolute; left: -5px; top: 4px; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); } .jtl small { display: block; color: var(--ink-3); }
.jdrawer { position: fixed; top: 0; right: 0; bottom: 0; width: min(760px, 100vw); z-index: 85; background: var(--card); border-left: 1px solid var(--hair-strong); box-shadow: -12px 0 40px rgba(0,0,0,.2); display: flex; flex-direction: column; animation: fade-in .14s ease-out; }
.jdrawer header { display: flex; align-items: center; gap: 8px; padding: 12px 14px; border-bottom: 1px solid var(--hair); } .jdrawer header h3 { margin: 0; flex: 1; font-size: var(--fs-lg); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.jdrawer .jd { flex: 1; min-height: 0; overflow: auto; }
@media (max-width: 900px) { .jbody.withdetail { grid-template-columns: 1fr; } .jdetail { border-left: 0; border-top: 1px solid var(--hair); } }

/* Fiche de la tâche : elle réserve sa place à droite (le Gantt reste visible), champs principaux modifiables */
.split-wrap.with-sheet { margin-right: calc(380px + 28px); grid-template-columns: minmax(320px, min(var(--tw, 660px), calc(100% - 300px))) 6px 1fr; }
.split-wrap.nogantt.with-sheet { grid-template-columns: 1fr; }
.tsheet .sl .ro[title=""] { font-style: normal; }
.tsheet [data-color] { display: inline-flex; align-items: center; gap: 6px; justify-self: start; } .tsheet [data-color] .swc { width: 14px; height: 14px; border-radius: 4px; background: var(--c); }
@media (max-width: 900px) { .split-wrap.with-sheet { margin-right: 16px; } }

/* Fiche : navigation et actions */
.tsheet header .ib { flex: none; width: 28px; height: 28px; }
.tsheet .sfoot { display: flex; align-items: center; gap: 6px; padding: 10px 14px; border-top: 1px solid var(--hair); background: var(--side); border-radius: 0 0 14px 14px; }
.tsheet .sfoot .sp { flex: 1; } .tsheet .sfoot .btn .i { width: 14px; height: 14px; }
.btn.ghost { background: transparent; border-color: transparent; color: var(--ink-2); } .btn.ghost:hover { background: var(--fill); color: var(--ink); }

/* Panneau « Colonnes » (même place que la fiche de la tâche) */
.cpanel .chead { padding: 10px 14px; border-bottom: 1px solid var(--hair); display: grid; gap: 9px; }
.cpanel .cwhere { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 12.5px; color: var(--ink-2); } .cpanel .cwhere b { color: var(--ink); }
.cpanel .seg { display: inline-flex; background: var(--fill); border-radius: 7px; padding: 2px; }
.cpanel .seg button { border: 0; background: none; padding: 2px 9px; border-radius: 5px; font: inherit; font-size: 12px; cursor: pointer; color: var(--ink-2); }
.cpanel .seg button.on { background: var(--card); color: var(--ink); font-weight: 600; box-shadow: 0 1px 2px rgba(0,0,0,.12); }
.cpanel .csearch { position: relative; } .cpanel .csearch .i { position: absolute; left: 9px; top: 8px; width: 16px; height: 16px; color: var(--ink-3); }
.cpanel .csearch input { width: 100%; height: 32px; padding-left: 32px; font-size: 13px; }
.cpanel .chips { display: flex; gap: 6px; flex-wrap: wrap; }
.cpanel .chip { border: 1px solid var(--hair-strong); background: none; border-radius: 99px; padding: 1px 9px; font: inherit; font-size: 12px; cursor: pointer; color: var(--ink-2); }
.cpanel .chip.on { background: var(--ink); color: var(--card); border-color: transparent; } .cpanel .chip .n { opacity: .65; margin-left: 4px; }
.cpanel .clist { padding: 2px 8px 10px; overflow-anchor: none; }
.cpanel .csec.top > h4 { margin: 14px 6px 4px; padding-top: 10px; border-top: 1px solid var(--hair); color: var(--ink); font-size: 12px; }
.cpanel .csec.top:first-child > h4 { border-top: 0; padding-top: 0; margin-top: 8px; }
.cpanel .csec h4 .cnt, .cpanel .csec h5 .cnt { font-weight: 500; color: var(--ink-3); margin-left: 2px; }
.cpanel .csec.grp > h5 { display: flex; align-items: center; gap: 6px; margin: 8px 6px 2px; font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-3); cursor: pointer; user-select: none; }
.cpanel .csec .car { display: inline-block; width: 10px; transition: transform .15s; } .cpanel .csec.fold .car { transform: rotate(-90deg); } .cpanel .csec.fold > .citems { display: none; }
.cpanel .it { display: flex; align-items: center; gap: 9px; padding: 4px 6px; border-radius: 8px; cursor: pointer; min-height: 38px; }
.cpanel .it:hover { background: var(--fill); } .cpanel .it.kb { outline: 2px solid var(--accent); outline-offset: -2px; }
.cpanel .it input { flex: none; width: 16px; height: 16px; margin: 0; accent-color: var(--accent); }
.cpanel .it.lock { cursor: default; } .cpanel .it.lock:hover { background: none; }
.ty { flex: none; width: 26px; height: 26px; border-radius: 7px; background: var(--fill); display: grid; place-items: center; font-size: 10.5px; font-weight: 700; color: var(--ink-2); }
.cpanel .it .nm { flex: 1; min-width: 0; line-height: 1.25; } .cpanel .it .nm b { display: block; font-weight: 500; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cpanel .it .nm small { color: var(--ink-3); font-size: 11.5px; } .cpanel .it mark { background: color-mix(in srgb, var(--accent) 22%, transparent); color: inherit; border-radius: 3px; }
.cpanel .it .st { font-size: 11.5px; color: var(--ink-3); white-space: nowrap; } .cpanel .it.on .st { color: var(--ok, #1f8a3b); }
.cpanel .it .ib { width: 26px; height: 26px; opacity: 0; } .cpanel .it:hover .ib, .cpanel .it .ib:focus { opacity: 1; }
.cpanel .cempty { padding: 24px 12px; text-align: center; color: var(--ink-2); font-size: 13px; } .cpanel .cempty .btn { margin-top: 10px; }
.cpanel .cform { display: grid; gap: 12px; align-content: start; padding-top: 12px; } .cpanel .cform .err { color: var(--bad, #c9302c); font-size: 12.5px; margin: 0; } .cpanel .cform .err:empty { display: none; }
th.cins.l { box-shadow: inset 3px 0 0 var(--accent); } th.cins.r { box-shadow: inset -3px 0 0 var(--accent); } th.cins { color: var(--accent); }
/* Formulaire d'attribut : types en boutons, options avancées regroupées */
.atypes { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; font-weight: 400; }
.atypes label { display: flex; align-items: center; gap: 6px; border: 1px solid var(--hair-strong); border-radius: 9px; padding: 5px 6px; cursor: pointer; font-size: 12px; color: var(--ink); line-height: 1.2; }
.atypes label .ty { width: 22px; height: 22px; font-size: 10px; } .atypes input { position: absolute; opacity: 0; pointer-events: none; }
.atypes label.on { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 9%, var(--card)); } .atypes label:focus-within { outline: 2px solid color-mix(in srgb, var(--accent) 45%, transparent); }
.aadv { border: 1px solid var(--hair); border-radius: 11px; padding: 10px 12px; display: grid; gap: 10px; background: var(--side); }
.aadv h5 { margin: 0; font-size: 12px; } .aadv h5 small { font-weight: 400; color: var(--ink-3); }
.modal.amodal { width: min(560px, calc(100vw - 32px)); }

/* En-têtes : libellé long si la colonne est assez large */
.sheet thead th .thl { display: inline-block; white-space: nowrap; vertical-align: middle; }
/* Gantt : poignées de liaison et d'avancement, liaison en cours */
/* Poignées du Gantt (lier, avancement) : hors des barres, taille selon la densité, zone de prise élargie par ::before.
   Apparition en fondu après 250 ms ; la disparition (250 ms après la sortie) est temporisée par planning.js. */
body { --lh: 10px; --lhb: 1.5px; --lhs: 0 0 0 2px color-mix(in srgb, var(--card) 70%, transparent); --phw: 10px; --phh: 7px; --phc: var(--ink-2); }
body[data-density="comfort"] { --lh: 14px; --lhb: 2px; --lhs: 0 1px 3px rgba(0,0,0,.25); --phw: 16px; --phh: 11px; }
body[data-density="dense"] { --lh: 8px; --lhb: 1.5px; --lhs: none; --phw: 8px; --phh: 5px; --phc: var(--ink-3); }
.lh, .ph { opacity: 0; pointer-events: none; transition: opacity .18s ease; z-index: 5; }
.lh.hv, .ph.hv { opacity: 1; pointer-events: auto; transition: opacity .18s ease .25s; }
.lh.on, .ph.on { opacity: 1; pointer-events: auto; transition: none; }
.lh { position: absolute; width: var(--lh); height: var(--lh); margin-top: calc(var(--lh) / -2); border-radius: 50%; background: var(--card); border: var(--lhb) solid var(--accent); box-shadow: var(--lhs); cursor: crosshair; }
.lh::before { content: ""; position: absolute; inset: calc((22px - var(--lh)) / -2); border-radius: 50%; }
.lh:hover, .lh.on { background: var(--accent); }
.ph { position: absolute; width: var(--phw); height: var(--phh); margin-left: calc(var(--phw) / -2); cursor: var(--cur-pct); }
.ph::before { content: ""; position: absolute; inset: -5px calc((22px - var(--phw)) / -2) -6px; }
.ph::after { content: ""; position: absolute; inset: 0; background: var(--phc); clip-path: polygon(50% 0, 100% 100%, 0 100%); }
.ph:hover::after, .ph.on::after { background: var(--accent); }
body.drag-link, body.drag-link * { cursor: crosshair !important; }
/* Avancement : curseur propre (double flèche marquée %), distinct du redimensionnement (↔) */
body { --cur-pct: url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='26' viewBox='0 0 26 26'%3E%3Cg fill='none' stroke='white' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 17h20M7 13l-4 4 4 4M19 13l4 4-4 4'/%3E%3C/g%3E%3Cg fill='none' stroke='black' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 17h20M7 13l-4 4 4 4M19 13l4 4-4 4'/%3E%3C/g%3E%3Ctext x='13' y='10' text-anchor='middle' font-family='Arial,sans-serif' font-size='10' font-weight='700' fill='black' stroke='white' stroke-width='2.4' paint-order='stroke'%3E%25%3C/text%3E%3C/svg%3E") 13 17, col-resize; }
body.drag-pct, body.drag-pct * { cursor: var(--cur-pct) !important; user-select: none !important; }
.gantt .lkdraw { position: absolute; left: 0; top: 0; pointer-events: none; overflow: visible; z-index: 4; }
.gantt .lkdraw line { stroke: var(--accent); stroke-width: 1.5; stroke-dasharray: 4 3; }
.bar-t.ltarget, .bar-g.ltarget, .dm.ltarget { outline: 2px solid var(--accent); outline-offset: 2px; }
.ib.on { background: color-mix(in srgb, var(--accent) 14%, transparent); color: var(--accent); }
/* Saisie des prédécesseurs : nom des tâches */
.picker.pred .opt .rn { flex: none; min-width: 26px; color: var(--ink-3); font-variant-numeric: tabular-nums; }
.picker.pred .linked { padding: 6px 10px; border-top: 1px solid var(--hair); font-size: 12px; color: var(--ink-2); }
.picker.pred .linked b { color: var(--ink); font-weight: 500; }
.tsheet .pnames { grid-column: 2; font-size: 11.5px; color: var(--ink-3); margin-top: -4px; }

/* Gantt : pas de sélection de texte (comme la liste des tâches) */
#gp, #gp * { user-select: none; -webkit-user-select: none; }

/* Pastille d'état du planning : bouton (ouvre le menu Versions), texte « Modifié depuis … » gardé même quand la barre est serrée */
button.pill { font: inherit; font-size: var(--fs-xs); cursor: pointer; } button.pill:hover { border-color: var(--accent); }
.pill .pt { max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Aide : deux colonnes, sans défilement sur un écran courant */
.modal.helpm { max-width: 900px; }
.helpm .help { display: grid; grid-template-columns: 1fr 1fr; gap: 0 32px; max-height: 72vh; }
.helpm .hgrp { display: flex; flex-direction: column; gap: 4px; } .helpm .hgrp .hg { margin-top: 10px; }
.helpm .hl { grid-template-columns: minmax(130px, 42%) 1fr; } .helpm .hl kbd { white-space: normal; }
@media (max-width: 760px) { .helpm .help { grid-template-columns: 1fr; } }
.pill .ps { display: none; } .ctx.compact .pill.mod .pt { display: none; } .ctx.compact .pill.mod .ps { display: inline; }   /* barre serrée : « Modifié » seul */

/* Ligne d'ajout en bas du tableau */
.sheet tr.addrow td { padding: 0; border-bottom: 0; background: transparent; }
.addbtn { display: inline-flex; align-items: center; gap: 6px; height: var(--row); padding: 0 10px; border: 0; background: none; font: inherit; font-size: var(--fs-sm); color: var(--ink-3); cursor: pointer; position: sticky; left: var(--n-w, 40px); z-index: 2; }
.addbtn .i { width: 14px; height: 14px; } .addbtn:hover { color: var(--accent); }
/* Tâches en retard : fin en rouge dans le tableau, bord droit rouge dans le Gantt, bouton dans la barre d'état */
.sheet tr.late td.dend { color: var(--bad-text); font-weight: 600; }
.bar-t.late::after { content: ""; position: absolute; right: 0; top: 0; bottom: 0; width: 3px; background: var(--bad); }
.dm.late { box-shadow: 0 0 0 2px var(--card), 0 0 0 4px var(--bad); }
.slate { display: inline-flex; align-items: center; gap: 5px; border: 1px solid color-mix(in srgb, var(--bad) 40%, transparent); background: color-mix(in srgb, var(--bad) 8%, transparent); color: var(--bad-text); border-radius: var(--r-full); padding: 1px 9px; font: inherit; font-size: var(--fs-xs); font-weight: 600; cursor: pointer; }
.slate .i { width: 13px; height: 13px; } .slate.on { background: var(--bad); border-color: var(--bad); color: #fff; }
.late-pill { display: inline-block; margin-left: 6px; padding: 0 6px; border-radius: var(--r-full); background: color-mix(in srgb, var(--bad) 16%, transparent); color: var(--bad-text); font-size: var(--fs-xs); font-weight: 600; }
/* Menus ouverts depuis la barre du planning (pastille, « ⋯ ») */
.fxdd { position: static; } .fxdd .menu { z-index: 70; }
.ctx .ib.pmenu { margin-left: -2px; }

/* Pictogrammes en icônes (au lieu de caractères et d'emoji) */
.ck .i, .picker .cb .i { width: 14px; height: 14px; } .menu h4 .i { width: 13px; height: 13px; vertical-align: -2px; margin-right: 2px; }
.cflag .i, .cbad .i, .cwarn .i { width: 12px; height: 12px; vertical-align: -2px; margin-right: 3px; } .cbad .i + .i, .cbad > .i:last-child { margin: 0 0 0 3px; }
.star .i { width: 14px; height: 14px; } .star.on .i { fill: currentColor; }
.bic .i { width: 15px; height: 15px; vertical-align: -3px; }
.btn > .i:first-child { width: 14px; height: 14px; }
/* Menu du compte */
.user .acct { display: inline-flex; align-items: center; gap: 8px; border: 0; background: none; font: inherit; font-size: var(--fs-sm); color: var(--ink-2); cursor: pointer; padding: 3px 6px 3px 8px; border-radius: var(--r-full); }
.user .acct:hover, .user .acct[aria-expanded="true"] { background: var(--fill); color: var(--ink); }
#m-account { right: 0; left: auto; min-width: 240px; }
#m-account .mi .i { width: 15px; height: 15px; }
/* Paramètres : bouton d'ajout dans l'en-tête de la carte */
.main-card .hd { display: flex; align-items: baseline; gap: 8px; } .main-card .hd .sp { flex: 1; } .main-card .hd .btn { align-self: center; }

/* Chargement : écran précédent estompé, squelette après 300 ms */
.stale { opacity: .55; transition: opacity .2s .1s; pointer-events: none; }
.skel { display: grid; gap: 12px; max-width: 900px; } .skel .sk { height: 18px; border-radius: var(--r-sm); background: linear-gradient(90deg, var(--fill) 25%, color-mix(in srgb, var(--fill) 40%, transparent) 50%, var(--fill) 75%); background-size: 200% 100%; animation: skel 1.2s linear infinite; }
.skel .w40 { width: 40%; height: 26px; } .skel .w70 { width: 70%; }
@keyframes skel { from { background-position: 200% 0; } to { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) { .skel .sk { animation: none; } }
/* Menu contextuel en sections */
.menu h5.msec { margin: 8px 9px 2px; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); }
/* Barre d'état : sélection */
.selinfo { color: var(--ink-2); }
/* Ligne du jour : fine, couleur d'accent, date dans l'en-tête */
.today { width: 1.5px; background: var(--accent); opacity: .85; }
.ghd .tdy { position: absolute; bottom: 3px; transform: translateX(-50%); background: var(--accent); color: #fff; font-size: 10px; font-weight: 600; line-height: 15px; padding: 0 6px; border-radius: var(--r-full); pointer-events: none; z-index: 4; white-space: nowrap; }
/* Densité confortable : texte du tableau plus grand */
body[data-density="comfort"] .sheet td { font-size: var(--fs-md); }
/* Accueil : fin prévue et avancement sur les cartes récentes */
.rec .rec-m { display: block; color: var(--ink-2); }
.legend .lgnote { margin: 8px 0 0; font-size: var(--fs-xs); color: var(--ink-3); max-width: 260px; }
/* En-tête du Gantt : chaque case garde exactement sa largeur (pas d'élargissement par le texte) ; jour courant surligné en zoom Jour */
.ghd .grow > div { flex: none; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: clip; box-sizing: border-box; }
.ghd .dcell.tday { background: var(--accent); color: #fff; border-radius: 6px; font-weight: 700; }
.ghd .dcell.tday span { opacity: 1 !important; }

/* Propriétés du planning : unité de saisie des durées */
.durseg { display: inline-flex; background: var(--fill); border-radius: 8px; padding: 2px; width: max-content; }
.durseg label { position: relative; } .durseg input { position: absolute; opacity: 0; pointer-events: none; }
.durseg span { display: inline-block; padding: 4px 12px; border-radius: 6px; font-size: var(--fs-sm); cursor: pointer; color: var(--ink-2); }
.durseg input:checked + span { background: var(--card); color: var(--ink); font-weight: 600; box-shadow: 0 1px 2px rgba(0,0,0,.12); }
.durseg input:focus-visible + span { outline: 2px solid var(--accent); }

/* Fiche de la tâche (v2) : étroite à droite ou agrandie (recouvre le Gantt), résumé, onglets, champs en grille */
.tsheet.wide { width: min(760px, calc(100vw - 32px)); }
.tsheet .shd { display: flex; align-items: flex-start; gap: 4px; padding: 12px 12px 4px 16px; border-bottom: 0; }
.tsheet .shd .tt { flex: 1; min-width: 0; } .tsheet .shd .crumb2 { display: block; font-size: 11.5px; color: var(--ink-3); }
.tsheet .shd b { font-size: 15px; line-height: 1.3; display: block; } .tsheet .shd b small { color: var(--ink-3); font-weight: 500; font-size: 13px; }
.tsheet .szb { color: var(--accent); font-size: 16px; }
.tsheet .ssum { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; padding: 0 16px 8px; font-size: 12.5px; color: var(--ink-2); } .tsheet .ssum b { color: var(--ink); }
.schip { display: inline-flex; border-radius: var(--r-full); padding: 0 8px; font-size: 11.5px; font-weight: 600; } .schip.bad, .schip.crit { background: color-mix(in srgb, var(--bad) 14%, transparent); color: var(--bad-text); }
.tsheet .stabs { display: flex; flex-wrap: wrap; gap: 0 2px; padding: 0 10px; border-bottom: 1px solid var(--hair); }
.tsheet .stabs button { border: 0; background: none; font: inherit; font-size: 12.5px; padding: 7px 8px; color: var(--ink-2); cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
.tsheet .stabs button.on { color: var(--ink); font-weight: 600; border-bottom-color: var(--accent); }
.tsheet .stabs .cnt { font-size: 10.5px; background: var(--fill); border-radius: var(--r-full); padding: 0 5px; margin-left: 4px; }
.tsheet .sgrid { display: grid; grid-template-columns: 1fr; gap: 10px 18px; padding-top: 12px; } .tsheet.wide .sgrid { grid-template-columns: 1fr 1fr; }
.tsheet .sf2 { display: grid; gap: 4px; min-width: 0; align-content: start; } .tsheet .sf2.full { grid-column: 1 / -1; }
.tsheet .sl2 { font-size: 11.5px; font-weight: 600; color: var(--ink-2); } .tsheet .sl2 em { font-style: normal; font-weight: 400; color: var(--ink-3); }
.tsheet .sf2 > input, .tsheet .sf2 > select, .tsheet .sf2 > textarea, .tsheet .sf2 .urlf input { height: 32px; font-size: 13px; padding: 0 9px; width: 100%; }
.tsheet .sf2 > textarea { height: auto; padding: 7px 9px; resize: vertical; }
.tsheet .sf2.trio { display: grid; grid-template-columns: 1fr 1fr 110px; gap: 8px; } .tsheet:not(.wide) .sf2.trio { grid-template-columns: 1fr 1fr; } .tsheet:not(.wide) .sf2.trio > .sf2:nth-child(3) { grid-column: 1 / -1; }
.tsheet .ro { display: flex; align-items: center; min-height: 32px; padding: 0 9px; border-radius: 8px; background: var(--side); color: var(--ink-2); font-size: 13px; font-style: normal; }
.tsheet .durf { display: flex; } .tsheet .durf input { flex: 1; min-width: 0; height: 32px; border-radius: 8px 0 0 8px; padding: 0 9px; } .tsheet .durf span { display: grid; place-items: center; padding: 0 9px; border: 1px solid var(--hair-strong); border-left: 0; border-radius: 0 8px 8px 0; background: var(--side); font-size: 12.5px; color: var(--ink-2); }
.tsheet .pstep { display: flex; align-items: center; gap: 6px; } .tsheet .pstep button { width: 32px; height: 32px; border: 1px solid var(--hair-strong); border-radius: 8px; background: var(--card); font-size: 16px; cursor: pointer; color: var(--ink); flex: none; }
.tsheet .pstep input { width: 72px; height: 32px; text-align: center; padding: 0 6px; flex: none; } .tsheet .pbar { flex: 1; min-width: 40px; height: 6px; background: var(--fill); border-radius: var(--r-full); overflow: hidden; } .tsheet .pbar i { display: block; height: 100%; background: var(--accent); }
.tsheet .pquick { display: flex; gap: 4px; flex-wrap: wrap; } .tsheet .pquick button { border: 1px solid var(--hair); background: none; border-radius: 6px; font: inherit; font-size: 11.5px; padding: 1px 7px; cursor: pointer; color: var(--ink-2); } .tsheet .pquick button.on { border-color: var(--accent); color: var(--accent); font-weight: 600; }
.tsheet .swt { display: flex; align-items: center; gap: 8px; min-height: 32px; font-size: 13px; } .tsheet .swt input { width: 16px; height: 16px; }
.tsheet .spills { display: flex; flex-wrap: wrap; gap: 5px; } .tsheet .spills .apill { border: 1px solid transparent; cursor: pointer; font: inherit; font-size: 12px; opacity: .55; } .tsheet .spills .apill.on { opacity: 1; border-color: currentColor; font-weight: 600; }
/* Pastilles + liste filtrable */
.chipf { position: relative; min-height: 34px; border: 1px solid var(--hair-strong); border-radius: 8px; padding: 3px 4px; display: flex; flex-wrap: wrap; gap: 4px; align-items: center; background: var(--card); cursor: text; }
.chipf:focus-within { outline: 2px solid color-mix(in srgb, var(--accent) 45%, transparent); border-color: var(--accent); }
.chipf .chip { display: inline-flex; align-items: center; gap: 4px; background: var(--fill); border-radius: 6px; padding: 2px 2px 2px 8px; font-size: 12.5px; max-width: 100%; }
.chipf .chip b { font-weight: 600; margin-right: 2px; } .chipf .chx { border: 0; background: none; cursor: pointer; color: var(--ink-3); font-size: 14px; line-height: 1; padding: 0 4px; border-radius: 4px; } .chipf .chx:hover { color: var(--bad-text); background: var(--card); }
.chipf .pchip select, .chipf .pchip input { height: 22px; font-size: 11.5px; border: 1px solid var(--hair); border-radius: 5px; background: var(--card); padding: 0 3px; color: var(--ink); } .chipf .pchip input { width: 38px; text-align: center; }
.chipf .chin { border: 0; outline: 0; background: none; font: inherit; font-size: 13px; flex: 1; min-width: 120px; height: 26px; padding: 0 4px; color: var(--ink); box-shadow: none; }
.chipf .chdd { position: absolute; left: -1px; right: -1px; top: calc(100% + 4px); z-index: 5; background: var(--card); border: 1px solid var(--hair-strong); border-radius: 10px; box-shadow: 0 12px 30px rgba(0,0,0,.18); max-height: 230px; overflow: auto; padding: 4px; }
.chipf .cho { display: flex; gap: 8px; align-items: center; padding: 5px 8px; border-radius: 7px; cursor: pointer; font-size: 13px; } .chipf .cho:hover, .chipf .cho.hi { background: var(--fill); }
.chipf .cho .k { min-width: 24px; color: var(--ink-3); font-variant-numeric: tabular-nums; } .chipf .cho.new { color: var(--accent); font-weight: 600; } .chipf .cho .i { width: 14px; height: 14px; }
.chipf .chh { font-size: 11.5px; color: var(--ink-3); padding: 4px 8px; }
.chipf .chip { white-space: nowrap; } .chipf .pchip .pl { max-width: 190px; overflow: hidden; text-overflow: ellipsis; } .tsheet.wide .chipf .pchip .pl { max-width: 300px; }
.tsheet .chipf .pchip select { width: auto; flex: none; padding: 0 2px; } .tsheet .chipf .pchip input { flex: none; }
/* Cellules non modifiables (calculées, verrouillées) : fond grisé, texte atténué, curseur neutre ; cases à cocher désactivées */
.sheet tr:not(.s):not(.proj) td.ro:not(.n) { color: var(--ink-3); cursor: default; }
.sheet td input[data-bool]:disabled { opacity: .45; cursor: default; }

/* En-tête du Gantt sur deux lignes (densité normale) : chaque ligne a sa hauteur, la somme fait celle de l'en-tête */
.ghd.tight .grow.a { height: 16px; } .ghd.tight .grow.b { height: calc(var(--head) - 16px); }
body[data-density="dense"] .ghd.tight .grow.a { height: 15px; } body[data-density="dense"] .ghd.tight .grow.b { height: calc(var(--head) - 15px); }
.ghd .dcell.tday { background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); border-radius: 0; }
/* Fiche : bouton-lien, unité de la durée, pied */
.linkbtn { border: 0; background: none; padding: 0; font: inherit; color: var(--accent); cursor: pointer; } .linkbtn:hover { text-decoration: underline; }
.tsheet .durf select { border: 1px solid var(--hair-strong); border-left: 0; border-radius: 0 8px 8px 0; background: var(--side); font: inherit; font-size: 12.5px; padding: 0 6px; height: 32px; width: auto; color: var(--ink); }
.tsheet .sfoot .autosave { font-size: 11px; color: var(--ink-3); text-align: right; line-height: 1.25; margin-right: 4px; }
.tsheet .sfoot .btn.ghost .i { width: 15px; height: 15px; }

/* Gantt : nom des tâches avant l'avancement ; marge libre en trait fin */
.glbl .tn { font-weight: 500; color: var(--ink); margin-right: 6px; } .glbl.g .tn { font-weight: inherit; }
.free { height: 2px; opacity: .55; background: repeating-linear-gradient(90deg, var(--ink-3) 0 2px, transparent 2px 5px); border-radius: 0; }
/* Fiche : prédécesseurs ligne à ligne (tâche · type en clair · décalage en jours) */
.chipf.predf { flex-direction: column; align-items: stretch; gap: 4px; padding: 4px; }
.chipf.predf .pchip { display: grid; grid-template-columns: minmax(0, 1fr) auto auto auto; align-items: center; gap: 6px; padding: 4px 4px 4px 8px; border-radius: 7px; white-space: normal; }
.chipf.predf .pchip .pl { max-width: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tsheet .chipf.predf .pchip select { height: 26px; font-size: 12px; }
.chipf .plag { display: inline-flex; align-items: center; gap: 3px; font-size: 12px; color: var(--ink-2); } .tsheet .chipf .plag input { width: 42px; height: 26px; text-align: center; font-size: 12px; }
.chipf.predf .chin { min-width: 0; width: 100%; padding: 0 6px; }
.tsheet:not(.wide) .chipf.predf .pchip { grid-template-columns: minmax(0, 1fr) auto auto; row-gap: 3px; }
.tsheet:not(.wide) .chipf.predf .pchip .pl { grid-column: 1 / -1; }
.tsheet:not(.wide) .chipf.predf .pchip select { justify-self: start; }

/* Impression : aperçu (options à gauche, pages à droite) et pages à taille réelle (voir print.js) */
.prt { position: fixed; inset: 0; z-index: 70; display: grid; grid-template-columns: 300px 1fr; background: var(--bg); animation: fade-in .14s ease-out; }
.prt-opts { display: flex; flex-direction: column; min-height: 0; background: var(--card); border-right: 1px solid var(--hair-strong); }
.prt-hd { padding: 16px 18px 10px; border-bottom: 1px solid var(--hair); } .prt-hd h2 { margin: 0; font-size: var(--fs-h3); } .prt-hd small { color: var(--ink-3); }
.prt-bd { flex: 1; overflow: auto; padding: 4px 18px 16px; }
.prt-bd h4 { margin: 16px 0 6px; font-size: var(--fs-2xs); text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); }
.prt-bd .seg { display: flex; } .prt-bd .seg button { flex: 1; }
.prt-two { display: grid; grid-template-columns: 1fr 1.4fr; gap: 8px; }
.prt-ck { display: flex; gap: 8px; align-items: center; margin: 6px 0; font-size: var(--fs-md); }
.prt-f { display: grid; gap: 4px; margin-top: 10px; font-size: var(--fs-xs); color: var(--ink-2); }
.prt-f input { height: 32px; border: 1px solid var(--hair-strong); border-radius: 8px; padding: 0 10px; font: inherit; font-size: var(--fs-md); background: var(--card); color: var(--ink); }
.prt-note { font-size: var(--fs-xs); color: var(--ink-3); line-height: 1.4; margin: 6px 0 0; }
.prt-ft { display: flex; gap: 8px; padding: 12px 18px; border-top: 1px solid var(--hair); } .prt-ft .sp { flex: 1; } .prt-ft .btn .i { width: 16px; height: 16px; }
.prt-pages { overflow: auto; padding: 18px 28px 40px; display: flex; flex-direction: column; align-items: center; gap: 26px; }
.prt-top { align-self: stretch; display: flex; align-items: center; gap: 12px; font-size: var(--fs-md); color: var(--ink-2); flex-wrap: wrap; } .prt-top .sp { flex: 1; } .prt-top small { color: var(--ink-3); }
.prt-warn { display: inline-flex; align-items: center; gap: 5px; color: var(--warn-text); font-weight: 500; } .prt-warn .i { width: 15px; height: 15px; }
.prt-pw { position: relative; flex: none; box-shadow: 0 1px 3px rgba(0,0,0,.18), 0 6px 24px rgba(0,0,0,.1); }
.prt-num { position: absolute; top: -19px; left: 0; font-size: var(--fs-2xs); color: var(--ink-3); }
.prt-sc { transform-origin: 0 0; }
.ppage { color-scheme: light; --bg: #fff; --card: #fff; --side: #f9f9fb; --ink: #1d1d1f; --ink-2: #56565b; --ink-3: #6b6b70; --hair: rgba(0,0,0,.1); --hair-strong: rgba(0,0,0,.2);
  --fill: rgba(118,118,128,.12); --fill-2: rgba(118,118,128,.07); --accent: #0071e3; --bad-text: #c9302c; --we: rgba(118,118,128,.08); --sum: #1d1d1f; --vl: rgba(0,0,0,.09); --tint: 9%;
  background: #fff; color: #1d1d1f; display: flex; flex-direction: column; overflow: hidden; box-sizing: border-box; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.pph { display: flex; align-items: center; gap: 10px; font-size: 12px; color: #56565b; border-bottom: 1.5px solid #1d1d1f; margin-bottom: 6px; flex: none; }
.pph b { font-size: 15px; color: #1d1d1f; } .pph .sp { flex: 1; } .pph-l { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ppb { overflow: hidden; flex: none; border: 1px solid #c7c7cc; }
.ppz { transform-origin: 0 0; display: flex; align-items: flex-start; }
.ptb { border-collapse: collapse; table-layout: fixed; flex: none; font-size: 12px; border-right: 1px solid #c7c7cc; }
.ptb th { text-align: left; font-size: 10.5px; text-transform: uppercase; letter-spacing: .03em; color: #6b6b70; font-weight: 600; padding: 0 6px; border-bottom: 1px solid #c7c7cc; background: #f5f5f7; white-space: nowrap; overflow: hidden; }
.ptb td { font-weight: 400; padding: 0 6px; border-bottom: 1px solid #e5e5ea; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ptb .r { text-align: right; } .ptb td.n { color: #6b6b70; font-size: 11px; }
.ptb tr.g td { font-weight: 600; } .ptb tr.g0 td { background: #f5f5f7; } .ptb tr.proj td { background: #ececf0; font-weight: 600; }
.ptb tr.late td .pn { color: #c9302c; } .ptb .pn { display: inline-block; }
.pgn { position: relative; overflow: hidden; flex: none; height: 100%; }
.pgn .ghd { position: relative; }
.ppf { display: flex; justify-content: space-between; align-items: flex-end; gap: 10px; font-size: 10.5px; color: #6b6b70; flex: none; margin-top: auto; }
#print-root { display: none; }
@media print {
  body.printing > :not(#print-root) { display: none !important; }
  body.printing #print-root { display: block; }
  #print-root .ppage { break-after: page; page-break-after: always; }
  #print-root .ppage:last-child { break-after: auto; page-break-after: auto; }
}
/* Impression, lot 2 : période, pages en largeur, colonnes, options du Gantt, légende, nuances de gris */
.prt-sel, .prt-dates input { width: 100%; height: 32px; border: 1px solid var(--hair-strong); border-radius: 8px; padding: 0 8px; font: inherit; font-size: var(--fs-md); background: var(--card); color: var(--ink); }
.prt-dates { margin-top: 8px; } .prt-dates[hidden] { display: none; }
.prt-lb { display: block; font-size: var(--fs-xs); color: var(--ink-2); margin-bottom: 4px; }
.prt-ind { margin: -2px 0 4px 24px; } .prt-gap { margin-top: 10px; }
.prt-bd h4 { display: flex; align-items: baseline; gap: 8px; } .prt-rs { margin-left: auto; font-size: var(--fs-xs); text-transform: none; letter-spacing: 0; font-weight: 500; }
.prt-bd [hidden] { display: none !important; }
.ppb.notb { border-left: 0; }
.ptb tr.cont td .pn { font-style: italic; color: #56565b; }
.plg { display: flex; align-items: center; gap: 16px; flex: none; font-size: 10.5px; color: #56565b; padding-top: 4px; }
.plg-i { display: inline-flex; align-items: center; gap: 6px; } .plg-s { display: inline-grid; place-items: center; width: 30px; height: 14px; }
.plg .bar-t, .plg .bar-g { position: static; display: block; width: 28px; } .plg .bar-t { height: 10px; } .plg .bar-g { height: 9px; margin-bottom: 3px; } .plg .bar-g .pt { top: 3px; height: 2px; }
.plg .dm { position: static; display: block; width: 9px; height: 9px; box-shadow: none; }
.plg .free, .plg .base { position: static; display: block; width: 28px; }
.plg-today { display: block; width: 2px; height: 14px; background: color-mix(in srgb, #1d1d1f 62%, transparent); }
.ppage.gray .ppb, .ppage.gray .plg { filter: grayscale(1); }
.ppage.gray .bar-t.late { border: 2px solid #000; } .ppage.gray .bar-t.late::after { background: #000; }
/* Impression, lot 3 : quatre contenus, tableau seul, synthèse du projet */
.prt-bd [data-seg=content] { display: grid; grid-template-columns: 1fr 1fr; }
.psy { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; gap: 16px; font-size: 12px; color: #1d1d1f; padding-top: 6px; }
.psy h3 { margin: 0 0 6px; font-size: 13px; }
.psy-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; }
.psy-k { border: 1px solid #d1d1d6; border-radius: 8px; padding: 8px 10px; display: flex; flex-direction: column; gap: 2px; } .psy-k span { font-size: 10.5px; color: #6b6b70; text-transform: uppercase; letter-spacing: .03em; } .psy-k b { font-size: 18px; }
.psy-k.bad b { color: #c9302c; }
.psy-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; } .psy.narrow .psy-cols { grid-template-columns: 1fr; }
.psy-t { width: 100%; border-collapse: collapse; table-layout: fixed; } .psy-t th { text-align: left; font-size: 10.5px; color: #6b6b70; font-weight: 600; text-transform: uppercase; letter-spacing: .03em; border-bottom: 1px solid #c7c7cc; padding: 4px 6px; }
.psy-t td { padding: 4px 6px; border-bottom: 1px solid #e5e5ea; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .psy-t th:first-child { width: 44%; }
.psy-t .st-late { color: #c9302c; font-weight: 600; } .psy-t .st-done { color: #1a7f37; } .psy-none { color: #6b6b70; font-style: italic; }
.psy-more { margin: 4px 0 0; font-size: 11px; color: #6b6b70; }
.psy-bar { display: inline-block; width: 60px; height: 5px; border-radius: 3px; background: #e5e5ea; margin-right: 8px; vertical-align: middle; overflow: hidden; } .psy-bar i { display: block; height: 100%; background: #0071e3; }
.ppage.gray .psy { filter: grayscale(1); }
/* Légendes : les échantillons de barres sont statiques ; leur marque « en retard » (::after, absolue) doit rester dans la barre */
.lg .bar-t, .lg .bar-g, .plg .bar-t, .plg .bar-g { position: relative; }
/* Organisation : mot de passe initial affiché une fois ; état des comptes */
.pwbox { display: flex; align-items: center; gap: 10px; } .pwbox code { font-size: 16px; letter-spacing: .03em; background: var(--fill); padding: 6px 12px; border-radius: 8px; user-select: all; }
.tag.ok { background: color-mix(in srgb, var(--good) 16%, transparent); color: var(--good-text); } .tag.warn { background: color-mix(in srgb, var(--warn) 18%, transparent); color: var(--warn-text); }
/* Ressources (lot B) : annuaire et fiche */
.page.wide .layout { grid-template-columns: 220px 1fr; }
.rdir { padding-bottom: 0; }
.rfilters { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 4px 0 10px; } .rfilters .in { height: 30px; border: 1px solid var(--hair-strong); border-radius: 8px; padding: 0 9px; font: inherit; font-size: var(--fs-md); background: var(--card); color: var(--ink); width: 240px; }
.rfilters select { height: 30px; border: 1px solid var(--hair-strong); border-radius: 8px; padding: 0 6px; font: inherit; font-size: var(--fs-md); background: var(--card); color: var(--ink); }
.rgrid { display: grid; grid-template-columns: minmax(0, 1fr) 400px; border-top: 1px solid var(--hair); margin: 0 -18px; min-height: 480px; }
.rlist { overflow: auto; border-right: 1px solid var(--hair-strong); } .rlist table.list { margin: 0; } .rlist tr.on td { background: color-mix(in srgb, var(--accent) 9%, transparent); } .rlist tr.arch td { opacity: .55; }
.rnm { display: flex; align-items: center; gap: 8px; } .rnm small { display: block; color: var(--ink-3); font-size: var(--fs-2xs); }
.rav { border-radius: 50%; display: inline-grid; place-items: center; color: #fff; font-weight: 700; flex: none; }
.rsheet { min-width: 0; display: flex; flex-direction: column; }
.rsh { display: flex; align-items: center; gap: 12px; padding: 14px 16px 8px; } .rsh h3 { margin: 0; font-size: var(--fs-h3); } .rsh .sp { flex: 1; }
.rtabs { display: flex; gap: 2px; padding: 0 12px; border-bottom: 1px solid var(--hair); } .rtabs button { border: 0; background: none; font: inherit; font-size: var(--fs-sm); padding: 7px 10px; color: var(--ink-2); cursor: pointer; border-bottom: 2px solid transparent; } .rtabs button.on { color: var(--ink); font-weight: 600; border-bottom-color: var(--accent); }
.rbody { padding: 14px 16px 18px; } .rbody h4 { margin: 16px 0 8px; font-size: var(--fs-2xs); text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); }
.rbody .g2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 12px; } .rbody .full { grid-column: 1 / -1; } .rbody .f em, .rbody .fl em { font-style: normal; font-weight: 400; color: var(--ink-3); }
.rbody .fl { font-size: var(--fs-xs); font-weight: 600; color: var(--ink-2); display: block; margin-bottom: 4px; }
.tagin { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; border: 1px solid var(--hair-strong); border-radius: 8px; padding: 4px 6px; min-height: 34px; background: var(--card); }
.tagin .tag button { border: 0; background: none; color: var(--ink-3); cursor: pointer; padding: 0 0 0 4px; font: inherit; } .tagin input { border: 0; outline: 0; font: inherit; font-size: var(--fs-md); flex: 1; min-width: 90px; background: none; color: var(--ink); height: 24px; padding: 0; }
.rall { display: flex; gap: 10px; align-items: flex-start; padding: 8px 10px; border: 1px solid var(--hair); border-radius: 9px; background: var(--side); } .rall small { display: block; color: var(--ink-3); font-size: var(--fs-2xs); }
.rteams { display: grid; gap: 4px; } .rteam { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 6px 8px; border: 1px solid var(--hair); border-radius: 8px; font-size: var(--fs-md); } .rteam .dim { opacity: .45; }
/* Planning : équipe du projet, sélecteur équipe / hors équipe */
.picker .grp { padding: 6px 10px 2px; font-size: var(--fs-2xs); text-transform: uppercase; letter-spacing: .05em; color: var(--ink-3); }
.tmlist { display: grid; gap: 4px; } .tmrow { display: grid; grid-template-columns: 1fr auto auto; gap: 10px; align-items: center; padding: 6px 8px; border: 1px solid var(--hair); border-radius: 8px; font-size: var(--fs-md); } .tmrow small { color: var(--ink-3); }
.rfilters select { width: auto; } .rfilters input[type=checkbox] { width: auto; height: auto; } .rfilters label { display: inline-flex; align-items: center; gap: 6px; }
.rbody .rall input, .rbody .rteam input { width: auto; height: auto; }
/* Lot C : disponibilité (fiche ressource) et affectations (fiche de la tâche) */
.rweek { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; } .rweek label { display: grid; gap: 3px; text-align: center; font-size: var(--fs-xs); color: var(--ink-2); }
.rweek input { width: 100%; height: 30px; text-align: center; border: 1px solid var(--hair-strong); border-radius: 7px; font: inherit; font-size: var(--fs-sm); background: var(--card); color: var(--ink); }
.rmh { display: flex; align-items: center; gap: 4px; } .rmh .sp { flex: 1; } .rmh b { text-transform: none; letter-spacing: 0; color: var(--ink); font-size: var(--fs-sm); min-width: 110px; text-align: center; }
.rcal { display: grid; grid-template-columns: repeat(7, 1fr); gap: 3px; font-size: var(--fs-xs); text-align: center; }
.rcal .ch { color: var(--ink-3); font-size: var(--fs-2xs); } .rcal .cd { height: 26px; border-radius: 6px; display: grid; place-items: center; background: var(--fill-2); }
.rcal .cd.o { background: none; } .rcal .cd.we { background: none; color: var(--ink-3); } .rcal .cd.td { outline: 1.5px solid var(--accent); }
.rcal .cd.ab { background: color-mix(in srgb, var(--warn) 24%, transparent); color: var(--warn-text); font-weight: 600; }
.rcal .cd.half { background: linear-gradient(135deg, color-mix(in srgb, var(--warn) 24%, transparent) 50%, var(--fill-2) 50%); }
.rabs { display: grid; gap: 4px; margin-top: 10px; } .rab { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 5px 8px; border: 1px solid var(--hair); border-radius: 8px; font-size: var(--fs-sm); } .rab small { color: var(--ink-3); }
.rabsf { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 10px; } .rabsf input, .rabsf select { height: 30px; border: 1px solid var(--hair-strong); border-radius: 7px; padding: 0 8px; font: inherit; font-size: var(--fs-sm); background: var(--card); color: var(--ink); width: 100%; }
.rabsf input[name=comment] { grid-column: 1 / -1; } .rabsf button { grid-column: 1 / -1; justify-self: start; }
.asg { display: grid; gap: 5px; } .asr { display: grid; grid-template-columns: minmax(0, 1fr) 84px 14px 92px; gap: 6px; align-items: center; } .asr .an { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--fs-md); }
.asr .lk { color: var(--ink-3); text-align: center; } .asr .durf input { text-align: right; }
.ast { display: flex; justify-content: space-between; font-size: var(--fs-sm); color: var(--ink-2); border-top: 1px solid var(--hair); padding-top: 5px; }
.asr .durf { min-width: 0; } .asr .durf input { min-width: 0; width: 100%; }
/* Plan de charge (lot D) */
.wlpage { display: flex; flex-direction: column; } .wlcard { padding: 0; overflow: hidden; display: flex; flex-direction: column; min-height: 0; flex: 1; }
.wlscroll { overflow: auto; flex: 1; min-height: 0; }
table.wl { border-collapse: separate; border-spacing: 0; width: 100%; font-size: var(--fs-sm); }
table.wl th, table.wl td { border-bottom: 1px solid var(--hair); padding: 0; height: 36px; }
table.wl th { font-size: var(--fs-2xs); font-weight: 600; color: var(--ink-3); text-align: center; position: sticky; top: 0; background: var(--card); z-index: 2; border-bottom: 1px solid var(--hair-strong); padding: 4px 2px; min-width: 64px; }
table.wl th small { display: block; font-weight: 400; } table.wl th.now { color: var(--accent); }
table.wl .nm { position: sticky; left: 0; background: var(--card); z-index: 1; text-align: left; padding: 0 12px; min-width: 260px; border-right: 1px solid var(--hair-strong); } table.wl th.nm { z-index: 3; }
table.wl tr.wlp { cursor: pointer; } table.wl tr.wlp .nm { display: flex; align-items: center; gap: 8px; height: 36px; } table.wl .tw { width: 12px; color: var(--ink-3); font-size: 11px; }
table.wl .rav { width: 24px; height: 24px; font-size: 10px; } table.wl .pn small { display: block; color: var(--ink-3); font-size: var(--fs-2xs); line-height: 1.2; }
table.wl tr.wlgrp td { background: var(--fill-2); height: 30px; } table.wl tr.wlgrp .nm { font-weight: 600; background: color-mix(in srgb, var(--ink) 4%, var(--card)); } table.wl tr.wlgrp small { color: var(--ink-3); font-weight: 400; }
table.wl tr.wlt td { height: 28px; } table.wl tr.wlt .nm { padding-left: 52px; font-size: var(--fs-xs); } table.wl tr.wlt .nm a { color: var(--ink); text-decoration: none; } table.wl tr.wlt .nm a:hover { text-decoration: underline; } table.wl tr.wlt .nm small { color: var(--ink-3); margin-left: 6px; }
.wlleg { display: flex; gap: 14px; flex-wrap: wrap; padding: 8px 14px; font-size: var(--fs-xs); color: var(--ink-2); border-top: 1px solid var(--hair); }
.wlleg span { display: inline-flex; gap: 6px; align-items: center; } .wlleg i { width: 20px; height: 11px; border-radius: 3px; display: inline-block; }
.wlg { display: inline-flex; align-items: center; gap: 5px; } .wlp .mi input { margin: 0 6px 0 0; }
/* Lot E : taux (fiche ressource) et coûts du projet */
.rcur { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; } .rcur div { border: 1px solid var(--hair); border-radius: 9px; padding: 6px 9px; } .rcur span { display: block; font-size: var(--fs-2xs); color: var(--ink-3); text-transform: uppercase; letter-spacing: .03em; } .rcur b { font-size: var(--fs-lg); } .rcur small { color: var(--ink-3); margin-left: 4px; }
.rtbl td, .rtbl th { padding: 5px 6px; } .rtbl tr.cur td { font-weight: 600; } .rtbl tr.fut td { color: var(--ink-2); } .rtbl small { color: var(--ink-3); }
.rratef { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 10px; } .rratef .full { grid-column: 1 / -1; }
.costs .ckpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 10px; margin-bottom: 12px; }
.costs .ck { border: 1px solid var(--hair); border-radius: 12px; padding: 10px 12px; } .costs .ck span { display: block; font-size: var(--fs-2xs); text-transform: uppercase; letter-spacing: .04em; color: var(--ink-3); } .costs .ck b { font-size: 20px; } .costs .ck small { display: block; color: var(--ink-3); font-size: var(--fs-xs); }
.costs .ck.bad b { color: var(--bad-text); } .costs .ck.ok b { color: var(--good-text); }
.ctbl { width: 100%; border-collapse: collapse; font-size: var(--fs-md); } .ctbl th { font-size: var(--fs-2xs); color: var(--ink-3); font-weight: 600; text-transform: uppercase; letter-spacing: .03em; padding: 8px 10px; border-bottom: 1px solid var(--hair-strong); text-align: right; }
.ctbl td { padding: 7px 10px; border-bottom: 1px solid var(--hair); text-align: right; white-space: nowrap; } .ctbl .l { text-align: left; } .ctbl td.l small { color: var(--ink-3); margin-left: 8px; font-size: var(--fs-xs); }
.ctbl tr.g td { font-weight: 600; background: var(--fill-2); } .ctbl tfoot td { font-weight: 700; border-top: 1.5px solid var(--hair-strong); } .ctbl .bad { color: var(--bad-text); } .ctbl .ok { color: var(--good-text); }
.msg.warn { color: var(--warn-text); display: flex; align-items: center; gap: 6px; }
.rbody table.rtbl { width: 100%; min-width: 0; table-layout: fixed; font-size: var(--fs-sm); } .rbody .rtbl td:first-child { white-space: normal; } .rbody .rtbl th:last-child, .rbody .rtbl td:last-child { width: 34px; } .rsheet { overflow: hidden; }
/* Lot F : feuilles de temps et validation ; réel dans les coûts */
.tmwk { font-size: var(--fs-md); min-width: 230px; text-align: center; }
.tm .hd .sub { margin-left: 8px; }
.tmt { width: 100%; border-collapse: collapse; font-size: var(--fs-md); margin-top: 6px; }
.tmt th { font-size: var(--fs-2xs); color: var(--ink-3); font-weight: 600; text-transform: uppercase; letter-spacing: .03em; padding: 6px 4px; border-bottom: 1px solid var(--hair-strong); text-align: center; } .tmt th small { display: block; text-transform: none; letter-spacing: 0; font-weight: 400; }
.tmt th.now { color: var(--accent); } .tmt .l { text-align: left; padding-left: 10px; } .tmt td { padding: 5px 4px; border-bottom: 1px solid var(--hair); text-align: center; }
.tmt td.l small { display: block; color: var(--ink-3); font-size: var(--fs-xs); } .tmt .we { background: var(--fill-2); } .tmt td.off { background: repeating-linear-gradient(135deg, var(--fill-2) 0 4px, transparent 4px 8px); }
.tmt input { width: 58px; height: 30px; text-align: center; border: 1px solid var(--hair-strong); border-radius: 7px; font: inherit; font-size: var(--fs-md); background: var(--card); color: var(--ink); } .tmt input:focus { outline: 2px solid color-mix(in srgb, var(--accent) 45%, transparent); }
.tmt .ro { color: var(--ink-2); } .tmt tr.tot td { font-weight: 600; border-top: 1px solid var(--hair-strong); border-bottom: 0; } .tmt tr.tot small { display: block; font-weight: 400; color: var(--ink-3); font-size: var(--fs-2xs); } .tmt .over { color: var(--warn-text); }
.tmt.sm td { padding: 4px; } .tag.bad { background: color-mix(in srgb, var(--bad) 14%, transparent); color: var(--bad-text); }
.tmfoot { display: flex; align-items: center; gap: 10px; padding: 12px 0 4px; } .tmfoot .sp { flex: 1; }
.tmrej { display: flex; gap: 8px; align-items: flex-start; padding: 8px 12px; border-radius: 10px; background: color-mix(in srgb, var(--bad) 9%, transparent); margin: 6px 0; font-size: var(--fs-md); } .tmrej .i { width: 16px; height: 16px; flex: none; color: var(--bad-text); }
.tmq { display: grid; gap: 12px; } .tmg .hd h3 { margin: 0; font-size: var(--fs-lg); } .tmg .hd .sp { flex: 1; } .tmg .hd { display: flex; align-items: center; gap: 8px; }
.ctbl td small { display: block; color: var(--ink-3); font-size: var(--fs-2xs); } .cbar { display: block; height: 4px; border-radius: 2px; background: var(--fill); margin-top: 3px; overflow: hidden; } .cbar i { display: block; height: 100%; background: var(--accent); }
#tmwho { width: auto; max-width: 200px; height: 30px; border: 1px solid var(--hair-strong); border-radius: 8px; padding: 0 6px; font: inherit; font-size: var(--fs-md); background: var(--card); color: var(--ink); }
/* Type de tâche (durée fixe / travail fixe) */
.ttype { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .ttype .seg button { padding: 4px 12px; }
.ttw { display: inline-flex; align-items: center; gap: 6px; font-size: var(--fs-sm); color: var(--ink-2); } .ttw .durf input { width: 80px; text-align: right; }
.ttef { display: inline-flex; align-items: center; gap: 6px; } .ttef input { width: auto; height: auto; } .tth { margin: 4px 0 0; }
/* Type de tâche, lot 2 : colonnes, repère de surutilisation, aide */
.ttag { display: inline-block; border-radius: 99px; padding: 0 8px; font-size: var(--fs-2xs); background: var(--fill); color: var(--ink-2); } .ttag.work { background: color-mix(in srgb, var(--accent) 14%, transparent); color: var(--accent); }
.ttc { margin-left: 4px; color: var(--accent); font-style: italic; font-size: var(--fs-xs); }
.ovl { display: inline-flex; margin-left: 6px; color: var(--bad-text); flex: none; } .ovl .i { width: 14px; height: 14px; }
.ovlbox { display: flex; gap: 8px; align-items: flex-start; margin-top: 8px; padding: 8px 10px; border-radius: 9px; background: color-mix(in srgb, var(--bad) 9%, transparent); font-size: var(--fs-sm); }
.ovlbox .i { width: 16px; height: 16px; color: var(--bad-text); flex: none; } .ovlbox span { flex: 1; } .ovlbox a { white-space: nowrap; }
.tthelp h4 { margin: 14px 0 4px; } .tthelp p { margin: 4px 0; } .tthelp table { margin-top: 10px; font-size: var(--fs-sm); }
.tthelp table { width: 100%; table-layout: fixed; min-width: 0; } .tthelp td, .tthelp th { white-space: normal; vertical-align: top; }
/* 2026-11-09 : fiche (prévu / réalisé / projection), Gantt (phase fine, entonnoir), plan de charge (colonnes serrées, repères) */
.fcg { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; } .fcc { border: 1px solid var(--hair); border-radius: 9px; padding: 6px 8px; } .fcc span { display: block; font-size: var(--fs-2xs); color: var(--ink-3); text-transform: uppercase; letter-spacing: .03em; }
.fcc b { display: block; font-size: var(--fs-md); } .fcc small { color: var(--ink-2); font-size: var(--fs-xs); } .fcc.bad b, .fcc.bad small { color: var(--bad-text); } .fcc.ok b, .fcc.ok small { color: var(--good-text); }
.fcp { grid-column: 1 / -1; order: 9; } .tsheet:not(.wide) .fcg { grid-template-columns: 1fr 1fr; }
.bar-g { height: 10px; border-radius: 4px 4px 2px 2px; } .bar-g:before, .bar-g:after { bottom: -4px; width: 6px; height: 6px; } .bar-g .pt { top: 3.5px; height: 2.5px; }
.sheet th .fb { z-index: 2; background: var(--card); box-shadow: -4px 0 4px var(--card); }
table.wl th { min-width: 42px; padding: 4px 1px; }
table.wl th.brk, table.wl td.brk { border-left: 2px solid var(--hair-strong); }
/* Gantt et grille v2 : chaîne de dépendances, écart à la référence, ligne d'état, surcharges, indicateurs */
.gantt.chain .bar-t:not(.on), .gantt.chain .bar-g:not(.on), .gantt.chain .dm:not(.on) { opacity: .18; }
.gantt.chain .glbl:not(.on) { opacity: .25; } .gantt.chain g.lk:not(.on) { opacity: .12; } .gantt.chain g.lk.on .v { stroke: var(--accent); stroke-width: 2.2; } .gantt.chain g.lk.on .v.h { fill: var(--accent); }
.gantt .bar-t, .gantt .bar-g, .gantt .dm, .gantt .glbl, .gantt g.lk { transition: opacity .15s; }
.sheet.chain tbody tr[data-id]:not(.on) td { color: var(--ink-3); }
@media (prefers-reduced-motion: reduce) { .gantt .bar-t, .gantt .bar-g, .gantt .dm, .gantt .glbl, .gantt g.lk { transition: none; } }
.gapx { font-weight: 700; margin-left: 6px; font-size: .95em; } .gapx.bad { color: var(--bad-text); } .gapx.ok { color: var(--good-text); }
svg.stline { position: absolute; left: 0; top: var(--head, 56px); pointer-events: none; z-index: 4; overflow: visible; } svg.stline polyline { fill: none; stroke: var(--bad); stroke-width: 1.8; stroke-linejoin: round; } svg.stline circle { fill: var(--bad); }
.bar-t.ovld, .dm.ovld { outline: 2px solid var(--bad); outline-offset: 1px; }
.indc { display: inline-grid; place-items: center; width: 16px; height: 16px; border-radius: 4px; font-size: 10px; font-weight: 700; margin-right: 2px; vertical-align: middle; cursor: default; }
.indc.late, .indc.ovl, .indc.clate { background: color-mix(in srgb, var(--bad) 16%, transparent); color: var(--bad-text); }
.indc.con { background: color-mix(in srgb, var(--warn) 18%, transparent); color: var(--warn-text); } .indc.note { background: var(--fill); color: var(--ink-2); } .indc.pend { background: color-mix(in srgb, var(--accent) 14%, transparent); color: var(--accent); }
/* Plan de charge v2 (maquettes/plan-de-charge-v2.html) : jauges, bandeau « À surveiller », bloc d'une personne dépliée, volet de détail */
.wltools { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 8px 14px; border-bottom: 1px solid var(--hair); }
.wltools .wlq { width: 220px; height: 30px; }
.wlwatch { display: flex; gap: 8px; flex-wrap: wrap; padding: 8px 14px; border-bottom: 1px solid var(--hair); background: var(--fill-2); }
.wlwatch:empty { display: none; }
.wlwatch .wi { display: flex; align-items: center; gap: 8px; border: 1px solid var(--hair); background: var(--card); border-radius: 10px; padding: 5px 10px; font-size: var(--fs-sm); text-align: left; color: var(--ink); cursor: pointer; }
.wlwatch .wi:hover { border-color: var(--hair-strong); } .wlwatch .wi.on { outline: 2px solid var(--accent); outline-offset: -1px; }
.wlwatch .wi b { font-size: var(--fs-lg); } .wlwatch .wi small { display: block; color: var(--ink-3); font-size: var(--fs-2xs); }
.wlwatch .dot { width: 9px; height: 9px; border-radius: 50%; flex: none; } .wlwatch .dot.ov { background: var(--bad); } .wlwatch .dot.cf { background: var(--warn); } .wlwatch .dot.fr { background: var(--good); }
.wllay { display: grid; grid-template-columns: minmax(0, 1fr) 0; flex: 1; min-height: 0; }
.wllay.open { grid-template-columns: minmax(0, 1fr) 340px; }
.wllay .wlscroll { min-width: 0; }
.wlside { border-left: 1px solid var(--hair-strong); overflow: auto; min-height: 0; background: var(--card); }
.wllay:not(.open) .wlside { display: none; }
.wllay.open .wlside { animation: wlslide .2s cubic-bezier(.2, .8, .2, 1); }
@keyframes wlslide { from { opacity: 0; transform: translateX(24px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .wllay.open .wlside { animation: none; } }
@media (max-width: 900px) { .wllay.open { grid-template-columns: minmax(0, 1fr) 0; } .wllay.open .wlside { display: block; position: fixed; right: 0; top: 0; bottom: 0; width: min(340px, 92vw); z-index: 60; box-shadow: -10px 0 30px rgba(0,0,0,.2); } }
/* grille */
table.wl2 thead tr.mo th { height: 22px; top: 0; text-align: left; padding: 3px 6px; font-size: var(--fs-2xs); color: var(--ink-2); border-bottom: 0; }
table.wl2 thead tr.pe th { top: 22px; }
table.wl2 thead th.nm { text-align: left; } table.wl2 thead tr.pe th.nm { display: table-cell; } table.wl2 thead .tth { float: right; font-weight: 400; }
table.wl2 td { height: auto; }
table.wl2 td.now { background: color-mix(in srgb, var(--accent) 5%, transparent); }
table.wl2.g-d th { min-width: 30px; } table.wl2.g-w th { min-width: 42px; } table.wl2.g-m th { min-width: 54px; }
table.wl2 tr.wlp .nm { display: table-cell; height: auto; padding: 0 10px; }
.wlpn { display: flex; align-items: center; gap: 8px; height: 60px; }
.wlpn .chev { width: 10px; font-size: 9px; color: var(--ink-3); transition: transform .15s; flex: none; } tr.wlp.open .wlpn .chev { transform: rotate(90deg); }
.wlpn .t { flex: 1; min-width: 0; } .wlpn .t b { display: block; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.wlpn .t small { display: block; color: var(--ink-3); font-size: var(--fs-2xs); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.wlpn .tot { text-align: right; font-size: var(--fs-2xs); color: var(--ink-2); white-space: nowrap; } .wlpn .tot b { display: block; font-size: var(--fs-md); color: var(--ink); } .wlpn .tot b.over { color: var(--bad-text); }
table.wl2 tr.wlp:hover td { background: color-mix(in srgb, var(--accent) 4%, var(--card)); }
/* une personne dépliée forme un bloc : filet à sa couleur, fond teinté, pas de trait entre l'entête et ses tâches, trait franc en fin de bloc */
table.wl2 tr.wlp.open td, table.wl2 tr.wlt td { background: color-mix(in srgb, var(--pc) 5%, var(--card)); border-bottom-color: transparent; }
table.wl2 tr.wlp.open td.now, table.wl2 tr.wlt td.now { background: color-mix(in srgb, var(--accent) 9%, var(--card)); }
table.wl2 tr.wlp.open .nm, table.wl2 tr.wlt .nm { box-shadow: inset 3px 0 0 var(--pc); }
table.wl2 tr.wlt.last td { border-bottom: 1px solid var(--hair-strong); }
table.wl2 tr.wlt td { height: 26px; } table.wl2 tr.wlt .nm { padding-left: 46px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 300px; }
table.wl2 tr.wlt .nm small { color: var(--ink-3); margin-left: 6px; }
.pdot { display: inline-block; width: 8px; height: 8px; border-radius: 2px; margin-right: 6px; flex: none; }
.wl2 .tb { height: 12px; margin: 0 1px; border-radius: 2px; opacity: .85; } .wl2 .tb.s { margin-left: 3px; border-top-left-radius: 6px; border-bottom-left-radius: 6px; } .wl2 .tb.e { margin-right: 3px; border-top-right-radius: 6px; border-bottom-right-radius: 6px; }
.wl2 .gv { display: block; text-align: center; font-size: 10px; font-weight: 600; white-space: nowrap; } .wl2 .gv.lo { color: var(--good-text); } .wl2 .gv.fu { color: var(--accent); } .wl2 .gv.ov { color: var(--bad-text); } .wl2 .gv.z { color: var(--ink-3); font-weight: 400; }
/* la jauge : 12 px en bas pour la valeur, 30 px pour 100 % de la disponibilité, 9 px au plus pour le dépassement ; rien ne déborde */
.wg { position: relative; height: 60px; margin: 0 2px; overflow: hidden; border-radius: 4px; cursor: pointer; }
.wg.off { cursor: default; background: var(--fill-2); margin: 6px 2px 14px; height: 40px; }
.wg i { position: absolute; left: 3px; right: 3px; bottom: 12px; border-radius: 3px 3px 0 0; display: block; }
.wg .cap { background: var(--fill); }
.wg .ld { background: color-mix(in srgb, var(--accent) 55%, var(--card)); } .wg .ld.full { background: var(--accent); }
.wg .ov { background: var(--bad); }
.wg .abs { background: repeating-linear-gradient(135deg, var(--fill) 0 3px, transparent 3px 6px); }
.wg .line { left: 0; right: 0; bottom: auto; height: 0; border-radius: 0; border-top: 1.5px dashed color-mix(in srgb, var(--ink) 30%, transparent); }
.wg .cf { position: absolute; top: 1px; right: 3px; width: 7px; height: 7px; border-radius: 50%; background: var(--warn); }
.wg .v { position: absolute; left: 0; right: 0; bottom: 0; height: 12px; line-height: 12px; font-size: 10px; text-align: center; color: var(--ink-3); white-space: nowrap; opacity: 0; }
tr.wlp:hover .wg .v, .wl2.vals .wg .v, .wg.sel .v { opacity: 1; }
.wg.wfree .ld { background: var(--good); }
.wg.sel { box-shadow: inset 0 0 0 2px var(--accent); }
.wg:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.wlempty { padding: 16px !important; }
/* légende */
.wlleg i { width: 14px; height: 12px; border-radius: 2px; display: inline-block; }
.wlleg i.cap { background: var(--fill); } .wlleg i.lo { background: color-mix(in srgb, var(--accent) 55%, var(--card)); } .wlleg i.fu { background: var(--accent); } .wlleg i.ov { background: var(--bad); }
.wlleg i.ab { background: repeating-linear-gradient(135deg, var(--fill) 0 3px, transparent 3px 6px); border: 1px solid var(--hair); }
/* volet de détail */
.wlside .wlhd { display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--hair); }
.wlside .wlhd .tt { flex: 1; min-width: 0; } .wlside h3 { margin: 0; font-size: var(--fs-lg); } .wlside .wlhd small { color: var(--ink-3); font-size: var(--fs-xs); }
.wlside .wlhd .ib { font-size: 20px; line-height: 1; }
.wlside .wlnav { display: flex; align-items: center; gap: 4px; padding: 6px 14px; border-bottom: 1px solid var(--hair); font-size: var(--fs-xs); color: var(--ink-3); }
.wlside .wlnav .btn { height: 26px; min-width: 28px; padding: 0 7px; justify-content: center; } .wlside .wlnav span:not(.sp) { margin: 0 4px; }
.wlside .bd { padding: 12px 14px; font-size: var(--fs-md); }
.wlside .meter { height: 10px; border-radius: 5px; background: var(--fill); overflow: hidden; display: flex; margin: 2px 0 8px; } .wlside .meter i { display: block; height: 100%; }
.wlside .row { display: flex; justify-content: space-between; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--hair); } .wlside .row span { color: var(--ink-2); }
.wlside b.bad { color: var(--bad-text); } .wlside b.good { color: var(--good-text); }
.wlside .cfx { color: var(--warn-text); font-weight: 600; margin-top: 8px; font-size: var(--fs-sm); }
.wlside .wlhint { margin: 10px 0 0; color: var(--ink-2); font-size: var(--fs-sm); }
.wlside .tl { display: grid; gap: 6px; margin-top: 12px; }
.wlside .ti { display: grid; grid-template-columns: 8px 1fr auto; gap: 8px; align-items: center; padding: 7px 8px; border: 1px solid var(--hair); border-radius: 9px; }
.wlside .ti > i { width: 8px; height: 28px; border-radius: 2px; } .wlside .ti a { color: var(--ink); font-weight: 500; } .wlside .ti small { display: block; color: var(--ink-3); font-size: var(--fs-2xs); }
.wlside .ti .btn.sm { height: 26px; font-size: var(--fs-xs); }
.wlside .cands { grid-column: 1 / -1; display: grid; gap: 2px; margin-top: 4px; padding-top: 6px; border-top: 1px dashed var(--hair-strong); }
.wlside .cands p { margin: 0 0 4px; font-size: var(--fs-xs); color: var(--ink-2); }
.wlside .cd { display: grid; grid-template-columns: 22px 1fr auto; gap: 8px; align-items: center; padding: 4px 6px; border-radius: 7px; } .wlside .cd:hover { background: var(--fill-2); }
.wlside .cd b { font-weight: 600; } .wlside .cd small { display: block; color: var(--ink-3); font-size: var(--fs-2xs); }
.wlside .tag { font-size: 10.5px; font-weight: 600; padding: 0 6px; margin-left: 6px; border-radius: 5px; }
.wlside .tag.ok { background: color-mix(in srgb, var(--good) 15%, transparent); color: var(--good-text); } .wlside .tag.part { background: color-mix(in srgb, var(--warn) 15%, transparent); color: var(--warn-text); }
.wlside .kbd { margin-top: 14px; font-size: var(--fs-2xs); color: var(--ink-3); }
/* Phases en ardoise (gris bleuté, plus clair en thème sombre ; maquettes/phases-couleur.html, variante A) : la couleur reste aux tâches */
:root { --phase: #5a6779; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --phase: #8b97a8; } }
:root[data-theme="dark"] { --phase: #8b97a8; }
.bar-g, .bar-g:before, .bar-g:after { background: var(--phase); }
/* Modèles de plannings (maquettes/modeles.html) : bibliothèque, bandeau, fenêtres */
.tpllib { display: grid; gap: 20px; }
.tpllib h3 { margin: 0 0 10px; font-size: var(--fs-sm); text-transform: uppercase; letter-spacing: .04em; color: var(--ink-3); } .tpllib h3 small { text-transform: none; letter-spacing: 0; font-weight: 400; }
.tcards { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 10px; }
.tcard { border: 1px solid var(--hair); border-radius: 12px; padding: 12px 13px; display: flex; flex-direction: column; gap: 8px; background: var(--card); transition: border-color .15s, box-shadow .15s; text-align: left; }
.tcard:hover { border-color: var(--hair-strong); box-shadow: 0 4px 14px rgba(0,0,0,.06); }
.tcard .top { display: flex; gap: 10px; align-items: flex-start; } .tcard .tt { flex: 1; min-width: 0; } .tcard .tt b { display: block; font-size: var(--fs-body); } .tcard .tt p { margin: 2px 0 0; color: var(--ink-2); font-size: var(--fs-sm); }
.tcard .tic { width: 34px; height: 34px; border-radius: 9px; display: grid; place-items: center; color: #fff; font-weight: 700; font-size: 12px; flex: none; }
.tcard .vis { font-size: 10.5px; font-weight: 600; padding: 1px 6px; border-radius: 5px; background: var(--fill); color: var(--ink-2); white-space: nowrap; } .tcard .vis.sh { background: color-mix(in srgb, var(--good) 15%, transparent); color: var(--good-text); }
.tcard .st { display: flex; gap: 10px; flex-wrap: wrap; font-size: var(--fs-2xs); color: var(--ink-3); }
.tcard .chips { display: flex; gap: 4px; flex-wrap: wrap; } .tcard .chip { font-size: var(--fs-2xs); padding: 1px 7px; border-radius: 99px; background: color-mix(in srgb, var(--accent) 11%, transparent); color: var(--accent); white-space: nowrap; } .tcard .chip.more { background: var(--fill); color: var(--ink-2); }
.tcard .ft { display: flex; gap: 6px; align-items: center; margin-top: auto; padding-top: 6px; border-top: 1px solid var(--hair); } .tcard .ft .sp { flex: 1; }
.tcard.new { border-style: dashed; align-items: center; justify-content: center; color: var(--ink-2); cursor: pointer; min-height: 150px; text-align: center; font: inherit; }
.tcard.new small { color: var(--ink-3); font-size: var(--fs-xs); }
.pill.tplpill .dot { background: var(--accent); }
.banner.tplband { background: color-mix(in srgb, var(--accent) 7%, var(--card)); border-color: color-mix(in srgb, var(--accent) 22%, transparent); } .banner.tplband .sp { flex: 1; }
.modal.tplwiz { width: min(680px, 96vw); max-width: 680px; max-height: 84vh; display: flex; flex-direction: column; } .modal.tplwiz .mb { overflow: auto; min-height: 0; } .modal.tplwiz .mh small { display: block; font-weight: 400; }
.modal.tplwiz .mf .sp { flex: 1; }
.modal .steps { display: flex; gap: 6px; padding: 0 18px 4px; } .modal .steps span { flex: 1; font-size: var(--fs-xs); color: var(--ink-3); padding-top: 6px; border-top: 3px solid var(--fill); } .modal .steps span.on { color: var(--ink); font-weight: 600; border-top-color: var(--accent); } .modal .steps span.done { border-top-color: color-mix(in srgb, var(--accent) 45%, transparent); }
.modal .two { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } @media (max-width: 640px) { .modal .two { grid-template-columns: 1fr; } }
.modal .calc { border: 1px solid var(--hair); border-radius: 10px; padding: 10px 12px; display: grid; grid-template-columns: auto 1fr; gap: 4px 14px; font-size: var(--fs-md); background: var(--fill-2); } .modal .calc span { color: var(--ink-2); } .modal .calc.one { grid-template-columns: 1fr; font-size: var(--fs-sm); }
.modal .chk { display: flex; gap: 8px; align-items: flex-start; font-size: var(--fs-md); } .modal .chk input { margin-top: 3px; } .modal .chk small { display: block; color: var(--ink-3); }
.modal .rr { display: grid; grid-template-columns: 190px 1fr; gap: 12px; align-items: start; padding: 10px 0; border-bottom: 1px solid var(--hair); } @media (max-width: 640px) { .modal .rr { grid-template-columns: 1fr; } }
.modal .rr .rn b { display: block; } .modal .rr .rn small { display: block; color: var(--ink-3); font-size: var(--fs-2xs); } .modal .rr .rn small.warn { color: var(--warn-text); }
.modal .pick { display: grid; gap: 4px; }
.modal .pp { display: grid; grid-template-columns: 16px 22px 1fr auto; gap: 8px; align-items: center; padding: 4px 8px; border: 1px solid var(--hair); border-radius: 8px; cursor: pointer; font-size: var(--fs-sm); }
.modal .pp:hover { background: var(--fill-2); } .modal .pp.on { border-color: var(--accent); background: color-mix(in srgb, var(--accent) 6%, var(--card)); } .modal .pp input { margin: 0; }
.modal .pp .pn small { color: var(--ink-3); font-size: var(--fs-2xs); } .modal .pp .match { font-size: 10.5px; font-weight: 600; color: var(--accent); }
.modal .linkbtn { border: 0; background: none; color: var(--accent); font: inherit; font-size: var(--fs-xs); text-align: left; padding: 2px 8px; cursor: pointer; }
.modal .p2r { display: grid; gap: 2px; margin-top: 4px; }
.modal .pr { display: grid; grid-template-columns: 22px 160px 18px 1fr; gap: 8px; align-items: center; padding: 4px 0; font-size: var(--fs-md); font-weight: 400; color: var(--ink); } .modal .pr .ar { color: var(--ink-3); text-align: center; }
.modal .pr.w input { border-color: var(--warn); } .modal .pr .wt { grid-column: 2 / -1; color: var(--warn-text); font-size: var(--fs-2xs); }
.modal .calc .warn { grid-column: 1 / -1; color: var(--warn-text); font-size: var(--fs-xs); }
.modal .anchor { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; font-weight: 400; } .modal .anchor small { font-size: var(--fs-xs); }
.modal .pload { font-size: 10.5px; font-weight: 600; padding: 1px 6px; border-radius: 5px; white-space: nowrap; }
.modal .pload.lo { background: color-mix(in srgb, var(--good) 15%, transparent); color: var(--good-text); } .modal .pload.fu { background: color-mix(in srgb, var(--accent) 13%, transparent); color: var(--accent); } .modal .pload.ov { background: color-mix(in srgb, var(--bad) 14%, transparent); color: var(--bad-text); }
.tcard.prov .tic { opacity: .9; }
/* Fiche v2 (maquettes/fiche-v2b.html) : une colonne, rubriques en cartes à la suite, barre d'ancres, en-tête à repères séparés */
.tsheet.v2 { width: 440px; --sheetbg: #eef0f3; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .tsheet.v2 { --sheetbg: #0b0b0d; } }
:root[data-theme="dark"] .tsheet.v2 { --sheetbg: #0b0b0d; }
.tsheet.v2.wide { width: min(760px, calc(100vw - 32px)); }
.tsheet.v2 .shd2 { display: block; padding: 10px 12px 10px 18px; border-bottom: 1px solid var(--hair); box-shadow: inset 5px 0 0 var(--c, var(--accent)); border-radius: 14px 0 0 0; }
.tsheet.v2 .sbar1 { display: flex; align-items: center; gap: 2px; }
.tsheet.v2 .scrumb { flex: 1; min-width: 0; font-size: 12px; color: var(--ink-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tsheet.v2 .scrumb .linkbtn { font-size: 12px; padding: 0; } .tsheet.v2 .scrumb .wbs { font-variant-numeric: tabular-nums; color: var(--ink-2); font-weight: 600; }
.tsheet.v2 .sbar1 .ib { flex: none; width: 28px; height: 28px; }
.tsheet.v2 .sname { display: flex; align-items: baseline; gap: 8px; margin: 4px 0 8px; }
.tsheet.v2 .sname small { color: var(--ink-3); font-size: 16px; font-weight: 500; }
.tsheet.v2 .sname .tname { flex: 1; min-width: 0; font-size: 19px; font-weight: 650; letter-spacing: -.01em; border: 1px solid transparent; background: none; border-radius: 7px; padding: 2px 6px; margin-left: -6px; height: auto; }
.tsheet.v2 .sname .tname:hover { background: var(--fill-2); } .tsheet.v2 .sname .tname:focus { border-color: var(--accent); background: var(--card); outline: none; }
.tsheet.v2 .sname b { font-size: 19px; font-weight: 650; }
.tsheet.v2 .hline { display: flex; flex-wrap: wrap; align-items: center; row-gap: 6px; font-size: 13px; } .tsheet.v2.wide .hline { font-size: 13.5px; } .tsheet.v2 .hk { gap: 5px; }
.tsheet.v2 .hk { display: inline-flex; align-items: center; gap: 6px; border: 0; background: none; font: inherit; color: var(--ink); height: 22px; padding: 0 7px; border-left: 1px solid var(--hair-strong); cursor: pointer; white-space: nowrap; }
.tsheet.v2 .hk:first-child { padding-left: 0; border-left: 0; } .tsheet.v2 .hk:hover:not([disabled]) { color: var(--accent); } .tsheet.v2 .hk[disabled] { cursor: default; }
.tsheet.v2 .hk .car { font-size: 9px; color: var(--ink-3); }
.tsheet.v2 .mic { width: 15px; height: 15px; color: var(--ink-3); flex: none; } .tsheet.v2 .nic { width: 14px; height: 14px; flex: none; }
.tsheet.v2 .n-task, .tsheet.v2 .n-ms { color: var(--accent); } .tsheet.v2 .n-phase { color: var(--phase, #5a6779); }
.tsheet.v2 .hmini { display: inline-block; width: 36px; height: 6px; border-radius: 3px; background: var(--fill); overflow: hidden; } .tsheet.v2 .hmini i { display: block; height: 100%; background: var(--good); border-radius: 3px; }
.tsheet.v2 .hpct { font-weight: 600; font-variant-numeric: tabular-nums; }
.tsheet.v2:not(.wide) .hk .plab { display: none; }
.tsheet.v2 .ssig { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 9px; }
.tsheet.v2 .sg { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600; padding: 2px 9px; border-radius: 99px; }
.tsheet.v2 .sg svg { width: 13px; height: 13px; }
.tsheet.v2 .sg.late { background: color-mix(in srgb, var(--bad) 10%, transparent); color: var(--bad-text); }
.tsheet.v2 .sg.ovl { background: color-mix(in srgb, #ffcc00 24%, transparent); color: #8a6a00; }
.tsheet.v2 .sg.crit { background: var(--bad); color: #fff; } .tsheet.v2 .sg.info { background: var(--fill); color: var(--ink-2); }
@media (prefers-color-scheme: dark) { .tsheet.v2 .sg.ovl { color: #ffd60a; } }
.tsheet.v2 .mlate { display: inline-block; width: 16px; height: 8px; border-radius: 2px; background: color-mix(in srgb, var(--accent) 45%, var(--card)); box-shadow: inset -3px 0 0 var(--bad); }
.tsheet.v2 .mcrit { display: inline-block; width: 16px; height: 8px; border-radius: 2px; background: #fff; background-image: repeating-linear-gradient(135deg, rgba(255,59,48,.55) 0 2px, transparent 2px 5px); }
/* barre d'ancres */
.tsheet.v2 .sanc { position: relative; padding: 6px 0; border-bottom: 1px solid var(--hair); background: var(--card); }
.tsheet.v2 .strack { display: flex; gap: 2px; overflow-x: auto; scrollbar-width: none; padding: 0 10px; } .tsheet.v2 .strack::-webkit-scrollbar { display: none; }
.tsheet.v2 .strack a { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--ink-2); padding: 4px 9px; border-radius: 8px; white-space: nowrap; cursor: pointer; text-decoration: none; }
.tsheet.v2 .strack a:hover { background: var(--fill); } .tsheet.v2 .strack a.on { background: color-mix(in srgb, var(--accent) 12%, transparent); color: var(--accent); font-weight: 600; }
.tsheet.v2 .strack a i { font-style: normal; font-size: 10.5px; color: var(--ink-3); } .tsheet.v2 .strack a.on i { color: var(--accent); }
.tsheet.v2 .sico { width: 15px; height: 15px; flex: none; }
.tsheet.v2 .strack .sico { color: var(--ink-3); width: 14px; height: 14px; } .tsheet.v2 .strack a.on .sico { color: var(--accent); }
.tsheet.v2 .sarr { position: absolute; top: 0; bottom: 0; width: 32px; border: 0; z-index: 2; cursor: pointer; color: var(--ink-2); font-size: 19px; display: none; place-items: center; padding: 0; }
.tsheet.v2 .sarr.l { left: 0; background: linear-gradient(90deg, var(--card) 60%, transparent); } .tsheet.v2 .sarr.r { right: 0; background: linear-gradient(270deg, var(--card) 60%, transparent); }
.tsheet.v2 .sarr.on { display: grid; } .tsheet.v2 .sarr:hover { color: var(--accent); }
/* rubriques en cartes */
.tsheet.v2 .sbody { background: var(--sheetbg); padding: 0 10px 12px; }
.tsheet.v2 .ssec { background: var(--card); border: 1px solid var(--hair); border-radius: 13px; box-shadow: 0 1px 3px rgba(0,0,0,.05); padding: 12px 14px 14px; margin-top: 10px; scroll-margin-top: 8px; }
.tsheet.v2.wide .ssec { max-width: 640px; margin-left: auto; margin-right: auto; }
.tsheet.v2 .ssec h3 { display: flex; align-items: center; gap: 8px; margin: 0 0 6px; padding-bottom: 8px; border-bottom: 1px solid var(--hair); font-size: 14.5px; font-weight: 650; }
.tsheet.v2 .ssec h3 .sico { width: 20px; height: 20px; color: color-mix(in srgb, var(--accent) 70%, var(--ink-3)); } .tsheet.v2 .ssec h3 .n { font-size: 12px; font-weight: 500; color: var(--ink-3); }
/* lignes libellé / valeur */
.tsheet.v2 .sf2 { grid-template-columns: 118px minmax(0, 1fr); align-items: center; gap: 10px; min-height: 40px; padding: 4px 0; border-top: 1px solid var(--hair); }
.tsheet.v2 .ssec h3 + .sf2, .tsheet.v2 .sadvc > .sf2:first-child { border-top: 0; }
.tsheet.v2 .sf2.full { grid-template-columns: 1fr; gap: 6px; padding: 8px 0; }
.tsheet.v2 .sl2 { font-size: 12.5px; font-weight: 500; color: var(--ink-2); } .tsheet.v2 .sl2 em { display: block; font-size: 11px; }
.tsheet.v2 .sf2 > input, .tsheet.v2 .sf2 > select { height: 32px; font-size: 13.5px; }
.tsheet.v2 .ro { font-size: 13.5px; }
.tsheet.v2 .shint { font-size: 12.5px; color: var(--ink-3); margin: 8px 0 0; }
.tsheet.v2 .sadv { margin-top: 6px; } .tsheet.v2 .sadv summary { cursor: pointer; color: var(--accent); font-size: 13px; padding: 6px 0 2px; list-style: none; }
.tsheet.v2 .sadv summary::before { content: "▶"; font-size: 9px; margin-right: 7px; display: inline-block; transition: transform .15s; } .tsheet.v2 .sadv[open] summary::before { transform: rotate(90deg); }
.tsheet.v2 .sadv summary::-webkit-details-marker { display: none; }
.tsheet.v2 .sadvc { margin-top: 6px; padding: 2px 12px; background: var(--side); border-radius: 10px; }
/* avancement : barre à curseur */
.tsheet.v2 .sprog { display: flex; align-items: center; gap: 6px; }
.tsheet.v2 .sprog .pbar { flex: 1; height: 8px; overflow: visible; position: relative; background: var(--fill); border-radius: 4px; margin-right: 8px; }
.tsheet.v2 .sprog .pbar i { display: block; height: 100%; border-radius: 4px; background: var(--good); transition: width .15s; }
.tsheet.v2 .sprog.can .pbar { cursor: pointer; touch-action: none; }
.tsheet.v2 .sprog .thumb { position: absolute; top: 50%; width: 18px; height: 18px; margin: -9px 0 0 -9px; border-radius: 50%; background: var(--card); border: 2.5px solid var(--good); box-shadow: 0 1px 4px rgba(0,0,0,.25); cursor: grab; transition: transform .12s; }
.tsheet.v2 .sprog .pbar:hover .thumb, .tsheet.v2 .sprog .pbar:focus-visible .thumb { transform: scale(1.15); } .tsheet.v2 .sprog .pbar.drag .thumb { cursor: grabbing; transform: scale(1.2); }
.tsheet.v2 .sprog .pbar.drag i, .tsheet.v2 .sprog .pbar.drag .thumb { transition: none; } .tsheet.v2 .sprog .pbar:focus-visible { outline: none; }
.tsheet.v2 .sprog .bub { position: absolute; bottom: 22px; left: 50%; transform: translateX(-50%); background: var(--ink); color: var(--bg); font-size: 11.5px; font-weight: 600; padding: 2px 6px; border-radius: 6px; white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity .12s; }
.tsheet.v2 .sprog .pbar.drag .bub { opacity: 1; }
.tsheet.v2 .sprog button { width: 28px; height: 28px; border: 1px solid var(--hair-strong); border-radius: 7px; background: var(--card); cursor: pointer; color: var(--ink-2); flex: none; }
.tsheet.v2 .sprog input { width: 58px; height: 28px; text-align: center; padding: 0 4px; flex: none; font-weight: 600; } .tsheet.v2 .sprog .pv { font-variant-numeric: tabular-nums; }
/* sous-tâches, ajouts */
.tsheet.v2 .ssub { display: grid; grid-template-columns: 1fr 70px 42px; gap: 10px; align-items: center; width: 100%; border: 0; border-top: 1px solid var(--hair); background: none; font: inherit; font-size: 13.5px; text-align: left; padding: 9px 0; cursor: pointer; color: var(--ink); }
.tsheet.v2 .ssub:hover span:first-child { color: var(--accent); } .tsheet.v2 .ssub .mini { height: 5px; border-radius: 3px; background: var(--fill); overflow: hidden; } .tsheet.v2 .ssub .mini i { display: block; height: 100%; background: var(--good); }
.tsheet.v2 .ssub small { text-align: right; color: var(--ink-3); }
.tsheet.v2 .sadd { border: 0; background: none; color: var(--accent); font: inherit; font-size: 13.5px; padding: 8px 0 2px; cursor: pointer; }
/* dépendances */
.tsheet.v2 .dgrp { border: 1px solid var(--hair); border-radius: 11px; padding: 9px 11px 8px; margin-top: 8px; background: color-mix(in srgb, var(--accent) 4%, var(--card)); }
.tsheet.v2 .dgrp h4 { display: flex; align-items: center; gap: 7px; margin: 0 0 7px; font-size: 13.5px; font-weight: 650; text-transform: none; letter-spacing: 0; color: var(--ink); }
.tsheet.v2 .darr { width: 22px; height: 9px; color: var(--ink-3); opacity: .8; flex: none; }
.tsheet.v2 .dcard { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border: 1px solid var(--hair); border-radius: 9px; margin-bottom: 5px; background: var(--card); cursor: pointer; }
.tsheet.v2 .dcard:hover { border-color: var(--hair-strong); } .tsheet.v2 .dcard .t { flex: 1; min-width: 0; } .tsheet.v2 .dcard b { display: block; font-weight: 500; font-size: 13.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tsheet.v2 .dcard small { color: var(--ink-3); font-size: 12px; } .tsheet.v2 .dcard .badge { font-size: 11px; background: var(--fill); color: var(--ink-2); border-radius: 5px; padding: 1px 6px; white-space: nowrap; }
.tsheet.v2 .dcard .chx { border: 0; background: none; color: var(--ink-3); font-size: 16px; cursor: pointer; padding: 0 2px; } .tsheet.v2 .dcard .chx:hover { color: var(--bad-text); }
.tsheet.v2 .dadd .dq { width: 100%; height: 32px; font-size: 13px; border-style: dashed; background: var(--card); }
/* prévu / réel : tuiles 2 × 2 */
.tsheet.v2 .fcg { grid-template-columns: 1fr 1fr; gap: 8px; } .tsheet.v2 .fcc { border-radius: 11px; padding: 9px 12px; } .tsheet.v2 .fcc b { font-size: 18px; }
/* menu (nature, priorité) */
.tsheet .smenu { position: absolute; z-index: 6; width: 280px; background: var(--card); border: 1px solid var(--hair-strong); border-radius: 12px; box-shadow: 0 12px 34px rgba(0,0,0,.2); padding: 6px; }
.tsheet .smenu h5 { margin: 4px 8px 6px; font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--ink-3); }
.tsheet .smenu button { display: flex; align-items: center; gap: 10px; width: 100%; border: 0; background: none; text-align: left; padding: 7px 8px; border-radius: 8px; cursor: pointer; font: inherit; color: var(--ink); }
.tsheet .smenu button:hover { background: var(--fill); } .tsheet .smenu button.on { background: color-mix(in srgb, var(--accent) 9%, transparent); }
.tsheet .smenu button span { flex: 1; } .tsheet .smenu b { display: block; font-size: 13.5px; } .tsheet .smenu small { color: var(--ink-3); font-size: 12px; }
.tsheet .smenu .nic { width: 15px; height: 15px; }
/* densité « dense » (option du Gantt) : mêmes informations, resserrées */
.tsheet.v2.dense .shd2 { padding: 8px 10px 8px 16px; } .tsheet.v2.dense .sname .tname, .tsheet.v2.dense .sname b { font-size: 17px; } .tsheet.v2.dense .hline { font-size: 13px; }
.tsheet.v2.dense .ssec { padding: 9px 12px 11px; margin-top: 7px; border-radius: 11px; } .tsheet.v2.dense .ssec h3 { font-size: 13.5px; padding-bottom: 6px; } .tsheet.v2.dense .ssec h3 .sico { width: 17px; height: 17px; }
.tsheet.v2.dense .sf2 { min-height: 33px; padding: 2px 0; } .tsheet.v2.dense .sf2 > input, .tsheet.v2.dense .sf2 > select { height: 28px; font-size: 13px; }
.tsheet.v2.dense .dcard { padding: 6px 9px; } .tsheet.v2.dense .ssub { padding: 6px 0; }
/* Fiche v2 : champs au plus près de la maquette (valeurs « texte » qui s'encadrent au survol et à la saisie, listes déroulantes) */
.tsheet.v2 .sval { width: 100%; min-width: 0; height: 34px; font-size: 14px; border: 1px solid transparent; border-radius: 8px; padding: 0 9px; margin-left: -9px; width: calc(100% + 9px); background: none; color: var(--ink); box-shadow: none; }
.tsheet.v2 select.sval { cursor: pointer; padding-right: 4px; }
.tsheet.v2 .sval:hover { background: var(--fill-2); } .tsheet.v2 .sval:focus { outline: none; border-color: var(--accent); background: var(--card); }
.tsheet.v2 .sval.ro2 { display: flex; align-items: center; color: var(--ink-2); cursor: default; } .tsheet.v2 .sval.ro2:hover { background: none; } .tsheet.v2 .sval.ro2 small { color: var(--ink-3); font-size: 12.5px; margin-left: 6px; }
.tsheet.v2 .schk { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; cursor: pointer; min-height: 34px; } .tsheet.v2 .schk input { width: 16px; height: 16px; margin: 0; }
.tsheet.v2 .sres { display: flex; align-items: center; gap: 4px; min-width: 0; } .tsheet.v2 .sres .sval { margin-left: 0; width: 100%; padding-left: 4px; }
.tsheet.v2 .sav { width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; color: #fff; font-size: 10px; font-weight: 700; flex: none; }
.tsheet.v2 .scons { display: flex; gap: 6px; } .tsheet.v2 .scons .sval { margin-left: 0; } .tsheet.v2 .scons select.sval { flex: 1.3; } .tsheet.v2 .scons input.sval { flex: 1; border-color: var(--hair-strong); }
.tsheet.v2 .stype { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 4px 0; } .tsheet.v2 .stype .schk { font-size: 13px; gap: 6px; min-height: 0; white-space: nowrap; }
.tsheet.v2 .stw { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; white-space: nowrap; } .tsheet.v2 .stw .sval { width: 64px; margin: 0; border-color: var(--hair-strong); text-align: right; }
.tsheet.v2 .sperson { display: grid; grid-template-columns: 32px 1fr auto auto; gap: 10px; align-items: center; padding: 9px 0; border-top: 1px solid var(--hair); }
.tsheet.v2 .ssec h3 + .sperson { border-top: 0; } .tsheet.v2 .sperson .sav { width: 32px; height: 32px; font-size: 12px; }
.tsheet.v2 .sperson .pn b { display: block; font-weight: 600; font-size: 14px; } .tsheet.v2 .sperson .pn small { color: var(--ink-3); font-size: 12.5px; }
.tsheet.v2 .sshare { display: flex; align-items: center; gap: 4px; } .tsheet.v2 .sshare input { width: 60px; height: 32px; border: 1px solid var(--hair-strong); border-radius: 8px; text-align: right; padding: 0 8px; font-size: 14px; } .tsheet.v2 .sshare span { color: var(--ink-3); font-size: 13px; }
.tsheet.v2 .sperson .chx { border: 0; background: none; color: var(--ink-3); font-size: 17px; cursor: pointer; padding: 0 2px; } .tsheet.v2 .sperson .chx:hover { color: var(--bad-text); }
.tsheet.v2 .sadd2 { border: 0; background: none; color: var(--accent); font: inherit; font-size: 13.5px; padding: 8px 0 2px; cursor: pointer; appearance: none; -webkit-appearance: none; }
.tsheet.v2 .stotal { display: flex; justify-content: space-between; align-items: baseline; padding-top: 10px; margin-top: 6px; border-top: 1px solid var(--hair-strong); font-size: 14px; } .tsheet.v2 .stotal b { font-size: 16px; }
.tsheet.v2 .snotes { border-top: 1px solid var(--hair); padding-top: 10px; } .tsheet.v2 .snotes textarea { width: 100%; min-height: 100px; border: 1px solid var(--hair-strong); border-radius: 10px; padding: 9px 11px; font-size: 14px; line-height: 1.5; resize: vertical; }
.tsheet.v2 .sf2 .chipf { min-height: 34px; }
.tsheet.v2.dense .sval { height: 28px; font-size: 13px; } .tsheet.v2.dense .sperson { padding: 6px 0; } .tsheet.v2.dense .sperson .sav { width: 26px; height: 26px; font-size: 10px; }
.tsheet.v2 .stype { flex-wrap: nowrap; gap: 8px; } .tsheet.v2 .stype .seg button { padding: 3px 9px; font-size: 12.5px; } .tsheet.v2 .stype .schk { font-size: 12.5px; }
.tsheet.v2 .sperson .pn { display: block; min-width: 0; } .tsheet.v2 .stype .seg button { white-space: nowrap; }
