:root{--ink:#1f2933;--ink-2:#5f6b7a;--ink-3:#98a2b0;--line:#e1e5eb;--line-2:#eef1f4;--panel:#eef1f5;--surface:#fff;--surface-2:#f7f8fa;--bg:#f3f5f8;--hover:#f1f4f7;--sel:#e6ecf3;--accent:#3e5368;--accent-ink:#2c3e50;--accent-soft:#e5ecf3;--on-accent:#fff;--summary:#4a5d72;--bar:#8596a9;--bar-done:#c9d3de;--crit:#d0574e;--crit-soft:#fbe7e5;--ok:#3f8a5a;--warn:#c98a2b;--link:#9aa7b6;--nonwork:#f6f7f9;--today:#d0574e;--shadow:0 10px 30px #1f29331a;--shadow-sm:0 1px 2px #1f29330f;--radius:10px;--radius-sm:8px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--ink:#e6eaef;--ink-2:#a6b0bc;--ink-3:#74808e;--line:#2f3742;--line-2:#262d36;--panel:#252c35;--surface:#1b2129;--surface-2:#20272f;--bg:#151a20;--hover:#242b34;--sel:#2a3440;--accent:#8fa8c2;--on-accent:#12202e;--accent-ink:#d5e1ee;--accent-soft:#273443;--summary:#a9bccf;--bar:#6f8399;--bar-done:#3b4756;--crit:#ef7d74;--crit-soft:#3d2423;--ok:#74c08f;--warn:#e2ae5c;--link:#6d7c8c;--nonwork:#1e242c;--today:#ef7d74;--shadow:0 10px 30px #00000073;--shadow-sm:0 1px 2px #0000004d;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--ink:#e6eaef;--ink-2:#a6b0bc;--ink-3:#74808e;--line:#2f3742;--line-2:#262d36;--panel:#252c35;--surface:#1b2129;--surface-2:#20272f;--bg:#151a20;--hover:#242b34;--sel:#2a3440;--accent:#8fa8c2;--on-accent:#12202e;--accent-ink:#d5e1ee;--accent-soft:#273443;--summary:#a9bccf;--bar:#6f8399;--bar-done:#3b4756;--crit:#ef7d74;--crit-soft:#3d2423;--ok:#74c08f;--warn:#e2ae5c;--link:#6d7c8c;--nonwork:#1e242c;--today:#ef7d74;--shadow:0 10px 30px #00000073;--shadow-sm:0 1px 2px #0000004d;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Segoe UI,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:13.5px;line-height:1.4}button,input,select,textarea{font:inherit;color:inherit}h1,h2,h3{letter-spacing:-.01em;margin:0;font-weight:600}h1{font-size:18px}h2{font-size:14px}h3{font-size:13px}.muted{color:var(--ink-2)}.small{font-size:11px}.num{font-variant-numeric:tabular-nums}.shell{grid-template-columns:208px 1fr;height:100%;display:grid}.side{background:var(--surface);border-right:1px solid var(--line);flex-direction:column;min-height:0;display:flex}.logo-panel{border-bottom:1px solid var(--line);background:#fff;padding:16px 16px 12px}.logo-panel img{width:150px;display:block}.logo-panel .tag{color:#555;letter-spacing:.08em;text-transform:uppercase;margin-top:6px;font-size:10px}.nav{flex-direction:column;flex:1;gap:1px;padding:8px;display:flex;overflow:auto}.nav button{text-align:left;border-radius:var(--radius-sm);cursor:pointer;color:var(--ink-2);background:0 0;border:0;align-items:center;gap:10px;padding:9px 12px;display:flex}.nav button:hover{background:var(--hover);color:var(--ink)}.nav button.on{background:var(--accent-soft);color:var(--accent-ink);font-weight:600}.nav .sep{background:var(--line);height:1px;margin:8px 4px}.nav svg{flex:none;width:15px;height:15px}.side-foot{border-top:1px solid var(--line);padding:10px 12px;font-size:12px}.main{flex-direction:column;min-width:0;min-height:0;display:flex}.topbar{background:var(--surface);border-bottom:1px solid var(--line);flex:none;align-items:center;gap:10px;height:52px;padding:0 16px;display:flex}.topbar .grow{flex:1}.content{flex:1;min-height:0;overflow:auto}.main .topbar{background:var(--surface)}.pad{padding:16px}.demo-banner{background:var(--accent-soft);color:var(--accent-ink);border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:6px 16px;font-size:12px;display:flex}.demo-banner button{background:var(--surface);border:1px solid var(--line);color:inherit;cursor:pointer;border-radius:999px;padding:2px 8px}.btn{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);cursor:pointer;white-space:nowrap;align-items:center;gap:6px;padding:7px 14px;transition:background .15s,border-color .15s;display:inline-flex}.btn:hover{background:var(--hover)}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:600}.btn.primary:hover{opacity:.88}.btn.danger{color:var(--crit)}.btn.sm{padding:3px 8px;font-size:12px}.btn:disabled{opacity:.45;cursor:default}.seg{background:var(--panel);border-radius:var(--radius-sm);gap:2px;padding:3px;display:inline-flex}.seg button{cursor:pointer;color:var(--ink-2);background:0 0;border:0;border-radius:6px;padding:4px 11px}.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm);font-weight:600}input.in,select.in,textarea.in{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius-sm);min-width:0;padding:7px 10px}input.in:focus,select.in:focus,textarea.in:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}textarea.in{resize:vertical;width:100%;min-height:70px}label.f{color:var(--ink-2);text-transform:uppercase;letter-spacing:.04em;flex-direction:column;gap:4px;font-size:11px;display:flex}label.f>.in{text-transform:none;letter-spacing:0;width:100%;color:var(--ink);font-size:13px}.row{align-items:center;gap:10px;display:flex}.grid2{grid-template-columns:1fr 1fr;gap:12px;display:grid}.grid3{grid-template-columns:1fr 1fr 1fr;gap:12px;display:grid}.card{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-sm);border-radius:14px}.card-h{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:12px 14px;display:flex}.card-b{padding:14px}.section-title{border-bottom:1px solid var(--line);color:var(--ink);margin:20px 0 10px;padding-bottom:8px;font-size:13px;font-weight:600}table.tbl{border-collapse:separate;border-spacing:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);width:100%;overflow:hidden}table.tbl th{background:var(--surface-2);color:var(--ink-2);text-align:left;white-space:nowrap;border-bottom:1px solid var(--line);text-transform:uppercase;letter-spacing:.04em;padding:9px 12px;font-size:11.5px;font-weight:600}table.tbl td{border-bottom:1px solid var(--line-2);vertical-align:middle;padding:8px 12px}table.tbl tr:last-child td{border-bottom:0}table.tbl tr:hover td{background:var(--surface-2)}.avatar{color:#fff;letter-spacing:.02em;border-radius:50%;flex:none;place-items:center;width:22px;height:22px;font-size:10px;font-weight:700;display:inline-grid}.chip{background:var(--panel);white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:3px 9px;font-size:11px;display:inline-flex}.dot{border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.pill-role{text-transform:uppercase;letter-spacing:.06em;background:var(--panel);color:var(--ink-2);border-radius:999px;padding:2px 8px;font-size:10px}.toast{background:var(--accent);color:var(--on-accent);box-shadow:var(--shadow);z-index:100;border-radius:999px;padding:10px 18px;font-size:12px;position:fixed;bottom:18px;left:50%;transform:translate(-50%)}.empty{text-align:center;color:var(--ink-2);padding:48px 16px}.drawer-bg{z-index:40;background:#1f29332e;position:fixed;inset:0}.drawer{background:var(--surface);z-index:41;width:min(520px,100vw - 16px);box-shadow:var(--shadow);border-radius:16px;flex-direction:column;display:flex;position:fixed;top:8px;bottom:8px;right:8px;overflow:hidden}.drawer-h{border-bottom:1px solid var(--line);align-items:flex-start;gap:10px;padding:14px 16px;display:flex}.drawer-b{flex-direction:column;flex:1;gap:14px;padding:16px;display:flex;overflow:auto}.drawer-f{border-top:1px solid var(--line);gap:8px;padding:12px 16px;display:flex}.title-in{border-radius:var(--radius);background:0 0;border:1px solid #0000;width:100%;padding:4px 6px;font-size:16px;font-weight:700}.title-in:hover,.title-in:focus{border-color:var(--line);outline:none}.modal-bg{z-index:60;background:#0000004d;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);box-shadow:var(--shadow);border-radius:16px;width:min(460px,100%);overflow:hidden}.gantt{grid-template-columns:var(--gw,560px) 1fr;background:var(--surface);height:100%;min-height:0;display:grid}.g-left{border-right:1px solid var(--line);flex-direction:column;min-width:0;display:flex;overflow:hidden}.g-right{position:relative;overflow:auto}.g-head{border-bottom:1px solid var(--line);background:var(--surface-2);flex:none;height:44px}html{--gnum:64px}.g-cols{grid-template-columns:var(--gnum) 1fr 96px 46px 66px 66px 44px;align-items:center;display:grid}.g-compact .g-cols{grid-template-columns:var(--gnum) 1fr}.g-compact .g-cols>div:nth-child(n+3){display:none}.g-cols>div{text-overflow:ellipsis;white-space:nowrap;padding:0 6px;overflow:hidden}.g-head.g-cols>div{color:var(--ink-2);text-transform:uppercase;letter-spacing:.04em;font-size:11px}.g-rows{flex:1;overflow:hidden}.g-row{border-bottom:1px solid var(--line-2);cursor:default;height:30px}.g-row:hover{background:var(--surface-2)}.g-row.sel{background:var(--sel)}.g-row.summary{font-weight:600}.g-row.project{background:var(--panel);font-weight:600}.g-row .name{align-items:center;gap:6px;display:flex}.g-row.dragging{opacity:.45}.g-wbs{align-items:center;gap:3px;display:flex;padding-left:2px!important}.g-grip{cursor:grab;touch-action:none;width:12px;height:22px;color:var(--ink-3);fill:currentColor;opacity:.35;border-radius:4px;flex:none;justify-content:center;align-items:center;display:inline-flex}.g-row:hover .g-grip,.g-grip:active{opacity:1;color:var(--ink-2)}.g-grip:active{cursor:grabbing;background:var(--surface-2)}.g-drop{background:var(--accent);z-index:3;pointer-events:none;height:2px;box-shadow:0 0 0 2px color-mix(in srgb, var(--accent) 20%, transparent);border-radius:2px;position:absolute;right:0}.g-drop:before{content:"";background:var(--accent);border-radius:50%;width:8px;height:8px;position:absolute;top:-3px;left:-4px}.g-row .tog{cursor:pointer;width:14px;height:14px;color:var(--ink-2);background:0 0;border:0;flex:none;padding:0}.g-row input.cell{background:0 0;border:1px solid #0000;border-radius:3px;width:100%;padding:3px 4px}.g-row input.cell:hover{border-color:var(--line)}.g-row input.cell:focus{border-color:var(--accent);background:var(--surface);outline:none}.g-svg text{font-family:Arial,Helvetica,sans-serif}.bar{cursor:grab}.bar:active{cursor:grabbing}.handle{cursor:ew-resize}.linkdot{cursor:crosshair;opacity:0}.bar-g:hover .linkdot{opacity:1}.dep{cursor:pointer}.dep:hover path{stroke:var(--ink);stroke-width:2.2px}.board{align-items:flex-start;gap:10px;min-height:100%;padding:14px 16px;display:flex}.col{background:var(--panel);border:0;border-radius:14px;flex-direction:column;flex:none;width:276px;max-height:calc(100vh - 140px);display:flex}.col.over{outline:2px dashed var(--accent);outline-offset:-2px}.col-h{align-items:center;gap:8px;padding:12px 14px 6px;font-size:12.5px;font-weight:600;display:flex}.col-b{flex-direction:column;gap:8px;min-height:60px;padding:8px;display:flex;overflow:auto}.lane-h{color:var(--ink-2);text-transform:uppercase;letter-spacing:.05em;padding:6px 2px 2px;font-size:11px}.kcard{background:var(--surface);box-shadow:var(--shadow-sm);cursor:grab;border:1px solid #0000;border-radius:12px;flex-direction:column;gap:6px;padding:11px 12px;display:flex}.kcard:hover{border-color:var(--ink-3)}.kcard.drag{opacity:.4}.kcard .t{font-weight:600;line-height:1.3}.kcard .meta{color:var(--ink-2);align-items:center;gap:8px;font-size:11px;display:flex}.kcard .bar-p{background:var(--line);border-radius:2px;height:3px;overflow:hidden}.kcard .bar-p>div{background:var(--accent);height:100%}.overdue{color:var(--crit);font-weight:700}.wl td.cell{text-align:center;font-variant-numeric:tabular-nums;min-width:64px}.wl .heat{border-radius:3px;padding:4px 0}.tree-client{margin-bottom:14px}.tree-proj{border-top:1px solid var(--line-2);grid-template-columns:1fr auto;align-items:center;gap:10px;padding:10px 14px;display:grid}.progress{background:var(--line);border-radius:3px;width:120px;height:6px;overflow:hidden}.progress>div{background:var(--accent);height:100%}.login{place-items:center;min-height:100%;padding:16px;display:grid}.login .card{width:min(380px,100%)}@media (width<=760px){body{font-size:14px}.shell{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}.side,.main{min-width:0;max-width:100vw}.side{border-right:0;border-bottom:1px solid var(--line);flex-direction:column;min-height:auto}.logo-panel{display:none}.nav{scrollbar-width:none;flex-direction:row;flex:none;gap:4px;padding:6px 8px;overflow-x:auto}.nav::-webkit-scrollbar{display:none}.nav .sep{display:none}.nav button{white-space:nowrap;border-radius:999px;flex:none;padding:8px 12px}.side-foot{border-top:1px solid var(--line-2);align-items:center;padding:6px 12px;flex-direction:row!important}.side-foot>.row:first-child{display:none}.side-foot label.f{flex-direction:row;flex:1;align-items:center;gap:8px}.side-foot label.f>.in{flex:1}.topbar{flex-wrap:wrap;gap:8px;height:auto;min-height:52px;padding:8px 12px}.topbar h1{font-size:17px}.topbar .grow{flex-basis:0}.pad{padding:12px}.demo-banner{flex-wrap:wrap;gap:6px 10px;padding:6px 12px;font-size:11.5px}table.tbl{white-space:nowrap;display:block;overflow-x:auto}table.tbl td{white-space:normal;min-width:70px}.tree-proj{grid-template-columns:1fr}.tree-proj>.row{flex-wrap:wrap}.board{padding:12px}.col{width:82vw;max-height:none}.kcard{padding:12px 14px}.btn{padding:9px 14px}.btn.sm{padding:7px 10px}.drawer{border-radius:0;width:100vw;top:0;bottom:0;right:0}.modal{max-height:92vh}.gantt{--gw:220px!important}.g-wbs-n{display:none}.g-grip{opacity:.7;width:20px;height:28px}html{--gnum:26px}.g-cols{grid-template-columns:var(--gnum) 1fr}.g-cols>div:nth-child(n+3){display:none}.grid2,.grid3{grid-template-columns:minmax(0,1fr)}.topbar>select.in,.topbar>.seg,.topbar>input.in{flex:150px;min-width:0;max-width:100%}.pad>*,.card,.card-b{min-width:0;max-width:100%}select.in{max-width:100%}}.theme-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.theme-opt{text-align:left;border:2px solid var(--line);background:var(--surface);cursor:pointer;border-radius:14px;flex-direction:column;align-items:flex-start;gap:6px;padding:12px;display:flex}.theme-opt:hover{border-color:var(--ink-3)}.theme-opt.on{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.theme-swatch{border:1px solid var(--line);border-radius:10px;grid-template-rows:16px 1fr;grid-template-columns:28% 1fr;gap:5px;width:100%;height:64px;padding:6px;display:grid}.theme-swatch i{border-radius:4px;display:block}.theme-swatch i:first-child{grid-row:1/3}.theme-swatch.light{background:#f3f5f8}.theme-swatch.light i{background:#fff}.theme-swatch.light i:last-child{background:#e5ecf3}.theme-swatch.dark{background:#151a20}.theme-swatch.dark i{background:#1b2129}.theme-swatch.dark i:last-child{background:#273443}.theme-swatch.system{background:linear-gradient(135deg,#f3f5f8 50%,#151a20 50%)}.theme-swatch.system i{background:#7f8c9b59}@media (width<=760px){.theme-grid{grid-template-columns:1fr}}.ts-form{grid-template-columns:150px minmax(0,1.4fr) minmax(0,1.4fr) 110px;gap:12px;display:grid}.ts-form2{grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:12px;display:grid}.ts-week{grid-template-columns:repeat(8,minmax(0,1fr));gap:8px;display:grid}.ts-day{background:var(--surface-2);border:1px solid var(--line);cursor:pointer;text-align:left;border-radius:12px;flex-direction:column;align-items:flex-start;gap:4px;padding:10px 12px;display:flex}.ts-day:hover{border-color:var(--ink-3)}.ts-day.today{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.ts-day.total{background:var(--accent-soft);cursor:default;border-color:#0000}@media (width<=900px){.ts-form,.ts-form2{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.ts-week{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (width<=760px){.ts-form,.ts-form2{grid-template-columns:minmax(0,1fr)}.ts-day{padding:8px 10px}}.kpis{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.kpi{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-sm);border-radius:14px;flex-direction:column;gap:4px;padding:14px 16px;display:flex}.kpi .v{font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:22px;font-weight:600}.kpi .l{color:var(--ink-2);text-transform:uppercase;letter-spacing:.04em;font-size:11.5px}.bullet{background:var(--panel);border-radius:6px;height:22px;position:relative;overflow:hidden}.bullet>.fill{background:var(--accent);border-radius:6px 0 0 6px;position:absolute;top:0;bottom:0;left:0}.bullet>.pend{background:repeating-linear-gradient(135deg, var(--accent) 0 3px, transparent 3px 7px);opacity:.55;position:absolute;top:0;bottom:0}.bullet>.over{background:var(--crit);position:absolute;top:0;bottom:0}.bullet>.mark{background:var(--ink);width:2px;position:absolute;top:-3px;bottom:-3px}.ov-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;display:grid}@media (width<=900px){.kpis{grid-template-columns:1fr 1fr}.ov-grid{grid-template-columns:1fr}}.stub{color:#000;border:1px solid var(--line);background:#fff;border-radius:14px;max-width:820px;padding:32px 36px;font-family:Arial,Helvetica,sans-serif}.stub h3{border-bottom:1px solid #000;margin:18px 0 8px;padding-bottom:4px;font-size:13px;font-weight:700}.stub table{border-collapse:collapse;width:100%;font-size:12px}.stub th{color:#fff;text-align:left;background:#000;padding:6px 8px;font-weight:700}.stub td{border-bottom:1px solid #ddd;padding:6px 8px}.stub .gray{color:#555}.stub .r{text-align:right;font-variant-numeric:tabular-nums}@media print{body *{visibility:hidden!important}.stub,.stub *{visibility:visible!important}.stub{border:0;border-radius:0;width:100%;max-width:none;padding:0;position:absolute;top:0;left:0}.no-print{display:none!important}}
