html,body{height:100%;overflow:hidden}
.app{height:100vh;min-height:520px}
button{font:inherit;color:inherit;cursor:pointer}
[data-act],[data-menu],[data-tip]{cursor:pointer}
.ib:hover,.btn:not(.primary):hover{background:var(--surface-2)}.ib.ghost:hover{background:var(--surface-3)}
.btn.primary:hover{background:#000}.seg>span:hover{color:var(--text)}
.ib.on,.btn.on{background:var(--surface-3);border-color:var(--border-strong)}
.r1 .tab:hover{background:var(--surface-2)}
/* compact timeline header: 38px total */
.gantt{overflow:hidden;position:relative}
.gl .gh{height:38px;align-items:center}
.gl .gh .c{display:flex;align-items:center;height:100%}
.gt{overflow-x:auto;overflow-y:hidden;position:relative}
.gt .inner{position:relative}
.th2{height:38px;border-bottom:1px solid var(--border);position:relative;background:var(--surface)}
.th2 .top{position:absolute;left:0;right:0;top:0;height:16px}
.th2 .bot{position:absolute;left:0;right:0;top:16px;height:22px;border-top:1px solid var(--divider)}
.th2 .tc{position:absolute;top:0;height:16px;display:flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:600;color:var(--text-2);border-left:1px solid var(--border);letter-spacing:.02em;white-space:nowrap;overflow:hidden}
.th2 .bc{position:absolute;top:0;height:21px;display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--text-3);border-left:1px solid var(--divider);white-space:nowrap;overflow:hidden}
.th2 .bc.cur{color:var(--today);font-weight:600}
.tbody{position:relative}
.tbody .vl{position:absolute;top:0;bottom:0;width:1px;background:var(--divider)}
.tbody .vl.vy{background:var(--border)}
.tbody .wk{position:absolute;top:0;bottom:0;background:var(--gantt-off)}
.tr .gb{cursor:grab}.tr .gb:hover{filter:brightness(.95);box-shadow:0 0 0 2px var(--focus-soft)}
.gr:hover,.gr.hl{background:var(--surface-2)}
.gl{overflow:hidden}
/* tooltip, menus, toast */
.ftip{position:fixed;z-index:50;background:var(--accent);color:var(--on-accent);font-size:12px;font-weight:500;padding:5px 8px;border-radius:6px;white-space:nowrap;pointer-events:none;box-shadow:var(--shadow-pop);max-width:640px}
.ftip kbd{background:rgba(255,255,255,.15);color:inherit;border:0;margin-left:6px}
.fmenu{position:fixed;z-index:40;width:auto;min-width:210px}
.fmenu .mi{cursor:pointer;background:none}.fmenu .mi:hover{background:var(--surface-2)}
.fmenu .mi .ck{width:16px;height:16px;border:1.5px solid var(--border-strong);border-radius:4px;display:grid;place-items:center;flex:none}
.fmenu .mi .ck.on{background:var(--accent);border-color:var(--accent)}.fmenu .mi .ck.on .i{color:var(--on-accent);width:12px;height:12px}
.fmenu .mi .av{width:22px;height:22px;font-size:9px}
.fmenu .mi kbd{margin-left:auto}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--accent);color:var(--on-accent);padding:9px 14px;border-radius:9px;font-size:13px;z-index:60;box-shadow:var(--shadow-pop)}
/* switcher */
.sw{position:fixed;right:14px;bottom:14px;z-index:70;background:var(--surface);border-radius:12px;box-shadow:var(--shadow-pop);padding:8px;display:flex;flex-direction:column;gap:6px;font-size:12px}
.sw .t{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-4);font-weight:600;padding:0 2px}
.sw .seg>span{cursor:pointer;padding:0 10px}
.sw .x{position:absolute;top:4px;right:6px;color:var(--text-4);cursor:pointer;font-size:14px}
.swmin{position:fixed;right:14px;bottom:14px;z-index:70}
/* M3 rail behaviour */
.railslot{transition:width .18s var(--ease)}
.railslot.pinned{width:208px}
.railslot .rail2{transition:width .18s var(--ease),box-shadow .18s}
.railslot:not(.pinned) .rail2:hover,.railslot.pinned .rail2{width:208px}
.railslot:not(.pinned) .rail2:hover{position:absolute;top:0;bottom:0;left:0;box-shadow:var(--shadow-pop)}
.rail2.w56:hover .ri .lab,.railslot.pinned .ri .lab,.rail2.w56:hover .ri kbd,.railslot.pinned .ri kbd{display:inline}
.rail2.w56 .ri kbd{margin-left:auto;margin-right:8px}
.rail2.w56 .ri{white-space:nowrap;overflow:hidden;cursor:pointer}.rail2 .ri:hover{background:var(--surface-3)}.rail2 .ri.primary:hover{background:#000}
.rail2 .rt,.rail2 .pin{display:none;white-space:nowrap}
.rail2.w56:hover .rt,.railslot.pinned .rt{display:block;text-align:left;padding-left:12px}
.rail2.w56:hover .pin,.railslot.pinned .pin{display:flex;cursor:pointer}
.rail2 .pin:hover{color:var(--text)}
.rail2 .pin .pinbox{width:14px;height:14px;border:1.5px solid var(--border-strong);border-radius:4px;display:grid;place-items:center}
.railslot.pinned .pin .pinbox{background:var(--accent);border-color:var(--accent)}.railslot.pinned .pin .pinbox .i{color:var(--on-accent);width:10px;height:10px}
.rail2.w56{width:56px}
.rail2 .ri.hover{background:none}
.hol{animation:slide .16s var(--ease)}@keyframes slide{from{opacity:0;transform:translateY(-4px)}}
.pt b{cursor:default}
.fmenu .mi:first-of-type{background:none}.fmenu .mi:hover{background:var(--surface-2)}
.M1{gap:10px}.M1 .grp{gap:4px}.vdd{gap:3px;padding:0 6px}
@media(max-width:1100px){.M1{gap:5px;padding:0 8px}.M1 .grp{gap:2px}.M1 .seg.txt>span{padding:0 6px}.M1 .dv{display:none}.vdd{display:inline-flex}}
.M3{gap:14px}.M3 .grp{gap:6px}@media(max-width:1100px){.M3{gap:8px}.M3 .grp{gap:4px}}
.gr .c.nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gl{width:400px}.c.d{width:80px}.c.n{width:48px}
.nmt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
