:root{--bg:#f5f6f8;--card:#fff;--ink:#1f2633;--sub:#6b7385;--line:#e4e7ee;--soft:#f0f2f6;--blue:#2f6fed;--blue-d:#1f57c9;--navy:#14254a;--radius:12px;--shadow:0 1px 2px #1018280f,0 1px 3px #10182814;--shadow-h:0 4px 14px #1018281f;--st-todo:#8a93a6;--st-doing:#f08c00;--st-review:#7950f2;--st-done:#12a150;--st-blocked:#e03150;--gl:240px}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);margin:0;font-family:Hiragino Kaku Gothic ProN,Hiragino Sans,Noto Sans JP,Yu Gothic UI,system-ui,sans-serif;font-size:14px;line-height:1.5}button,select,input,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.topbar{color:#fff;background:linear-gradient(100deg,#0f1c3a,#1d3a6e 70%,#24508f);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;padding:14px 24px;display:flex}.brand{align-items:center;gap:12px;min-width:0;display:flex}.logo{font-size:32px;line-height:1}.brand h1{letter-spacing:.01em;margin:0;font-size:20px}.brand h1 span{opacity:.85;margin-left:4px;font-size:15px;font-weight:400}.brand p{opacity:.72;margin:2px 0 0;font-size:12px}.top-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.countdown{text-align:center;background:#ffffff1f;border:1px solid #ffffff24;border-radius:10px;margin-right:4px;padding:5px 14px}.countdown span{font-size:22px;font-weight:800;line-height:1.1;display:block}.countdown small{opacity:.8;font-size:10px}.btn{border:1px solid var(--line);color:var(--ink);cursor:pointer;white-space:nowrap;background:#fff;border-radius:8px;padding:8px 14px;font-size:13px;transition:background .15s,border-color .15s,box-shadow .15s}.btn:disabled{opacity:.5;cursor:default}.btn:hover:not(:disabled){background:#f8f9fb;border-color:#c9cfdb}.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:700}.btn.primary:hover{background:var(--blue-d);border-color:var(--blue-d)}.btn.ghost{color:#fff;background:#ffffff14;border-color:#ffffff47}.btn.ghost:hover{background:#ffffff2e}.btn.danger{color:#c62f45;background:#fff0f2;border-color:#f5c2cb}.btn.danger:hover{background:#ffe1e6}.btn.small{padding:4px 10px;font-size:12px}.file-btn{display:inline-block}.tabs{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:12px 24px 0;display:flex}.tab-list{background:#e6e9f0;border-radius:10px;gap:4px;max-width:100%;padding:4px;display:flex;overflow-x:auto}.tab{color:var(--sub);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:7px;padding:7px 16px;font-size:14px;font-weight:600}.tab:hover{color:var(--ink)}.tab.active{color:var(--blue);box-shadow:var(--shadow);background:#fff}.filters{gap:8px;display:flex}.filter{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 10px;font-size:13px}.app[data-view=dashboard] .filters{visibility:hidden}main{padding:14px 24px}.view{display:none}.view.active{display:block}.hint{color:var(--sub);margin:0 0 10px;font-size:12px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:14px;padding:16px 18px}.card h2{margin:0 0 12px;font-size:15px}.chip{--c:#888;color:var(--c);background:color-mix(in srgb,var(--c) 12%,#fff);white-space:nowrap;border-radius:99px;align-items:center;gap:5px;padding:2px 9px;font-size:11px;font-weight:600;display:inline-flex}.chip:before{content:"";background:var(--c);border-radius:50%;width:7px;height:7px}.status{text-align:center;color:#fff;white-space:nowrap;border-radius:6px;min-width:64px;padding:3px 10px;font-size:11.5px;font-weight:700;display:inline-block}.s-todo{--st:var(--st-todo)}.s-doing{--st:var(--st-doing)}.s-review{--st:var(--st-review)}.s-done{--st:var(--st-done)}.s-blocked{--st:var(--st-blocked)}.status{background:var(--st)}.prio{white-space:nowrap;border-radius:5px;padding:1px 7px;font-size:11px;font-weight:700}.prio.p-0{color:#c4243d;background:#ffe8ea}.prio.p-1{color:#a86300;background:#fff3db}.prio.p-2{color:#5c6577;background:#eef1f6}.avatar{color:#fff;background:#3d5afe;border-radius:50%;flex:none;place-items:center;width:24px;height:24px;font-size:11.5px;font-weight:700;display:inline-grid}.avatar.empty{color:#8a93a6;background:#e3e7ef}.due{color:var(--sub);white-space:nowrap;font-size:12px}.due.over{color:#d92d4a;font-weight:700}.spacer{flex:1}.mini-bar,.bar{background:var(--soft);border-radius:99px;height:6px;overflow:hidden}.mini-bar i,.bar i{background:var(--st-done);border-radius:99px;height:100%;display:block}.cards{grid-template-columns:280px 1fr 1fr;gap:14px;display:grid}.cards .card{margin-bottom:0}.cards+.card{margin-top:14px}@media (width<=1000px){.cards{grid-template-columns:1fr 1fr}.donut-card{grid-column:1/-1}}@media (width<=680px){.cards{grid-template-columns:1fr}}.donut-wrap{width:170px;margin:4px auto 10px;position:relative}.donut{width:170px;height:170px;display:block;transform:rotate(-90deg)}.donut circle{fill:none;stroke-width:13px}.donut-bg{stroke:#e9edf4}.donut-fg{stroke:var(--st-done);stroke-linecap:round;stroke-dasharray:326.7;stroke-dashoffset:326.7px;transition:stroke-dashoffset .6s}.donut-center{flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.donut-center span{font-size:34px;font-weight:800;line-height:1.1}.donut-center small{color:var(--sub);font-size:12px}.status-legend{grid-template-columns:1fr 1fr;gap:6px 10px;margin:0;padding:0;list-style:none;display:grid}.status-legend li{align-items:center;gap:6px;font-size:13px;display:flex}.status-legend .status{min-width:62px}.freeze{text-align:center;color:#9a3b00;background:#fff4e5;border-radius:8px;margin:12px 0 0;padding:6px;font-size:12.5px;font-weight:700}.bar-row{grid-template-columns:118px 1fr 40px;align-items:center;gap:10px;margin:12px 0;font-size:13px;display:grid}.bar-name{white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:7px;display:flex;overflow:hidden}.bar-name i{border-radius:3px;flex:none;width:10px;height:10px}.bar-row .bar{height:10px}.bar-pct{text-align:right;font-variant-numeric:tabular-nums;font-weight:700}.alerts ul{max-height:260px;margin:0 0 8px;padding:0;font-size:13px;list-style:none;overflow:auto}.alerts li{border-left:4px solid var(--st-todo);background:var(--soft);cursor:pointer;border-radius:8px;margin:0 0 6px;padding:7px 10px}.alerts li:hover{filter:brightness(.97)}.alerts li button{all:unset;cursor:pointer;width:100%;display:block}.alerts li button:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.alerts li.a-over{border-color:var(--st-blocked);background:#fff0f2}.alerts li.a-block{background:#ffe5e9;border-color:#b0172f}.alerts li.a-stale{border-color:var(--st-doing);background:#fff6e8}.alerts li.a-none{border-color:var(--st-done);cursor:default;background:#ebf8f0}.phases{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;display:grid}.phase{border:1px solid var(--line);border-top:4px solid #c3cad8;border-radius:10px;flex-direction:column;gap:5px;padding:10px 12px;display:flex}.phase b{font-size:14px}.phase small{color:var(--sub);font-size:12px}.phase.current{border-top-color:var(--blue);background:#f3f7ff}.phase.past{opacity:.7}.phase .bar i{background:var(--blue)}.next-item{border:none;border-bottom:1px solid var(--line);text-align:left;width:100%;font:inherit;color:inherit;border-bottom:1px solid var(--line);cursor:pointer;background:0 0;border-radius:6px;align-items:center;gap:10px;padding:9px 4px;font-size:14px;display:flex}.next-item:hover{background:#f7f9fc}.next-item:last-child{border-bottom:none}.next-title{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}@media (width<=680px){.next-item{flex-wrap:wrap;row-gap:4px}.next-title{white-space:normal;flex-basis:100%;order:-1}}.scroll-x{-webkit-overflow-scrolling:touch;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:#fff;overflow-x:auto}.gantt{min-width:900px;padding:0 0 10px;font-size:12.5px}.g-head,.g-row,.g-group{grid-template-columns:var(--gl) 1fr;align-items:center;column-gap:12px;display:grid}.g-label{z-index:4;text-overflow:ellipsis;white-space:nowrap;background:#fff;align-self:stretch;align-items:center;gap:7px;padding:0 6px 0 14px;display:flex;position:sticky;left:0;overflow:hidden}.g-label i{border-radius:2px;flex:none;align-self:stretch;width:4px;margin:5px 0}.g-head{z-index:5;border-bottom:1px solid var(--line);background:#fff;padding-top:8px;position:sticky;top:0}.g-head .g-label{color:var(--sub);font-size:11.5px;font-weight:700}.g-timeline{margin-right:14px;position:relative}.g-months{height:18px;color:var(--sub);font-size:11.5px;font-weight:700;position:relative}.g-months span{border-left:1px solid #d5dae4;padding-left:4px;position:absolute}.g-phases{height:28px;margin-top:2px;position:relative}.g-phase{color:#34518c;background:#eaf0fd;border-radius:5px;align-items:center;height:22px;padding:0 12px 0 6px;font-size:10.5px;display:flex;position:absolute;top:2px;overflow:visible}.g-phase.alt{background:#dfe8fb}.g-phase span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.g-diamond{color:#e8590c;z-index:1;font-size:13px;font-style:normal;line-height:1;position:absolute;top:50%;right:-6px;transform:translateY(-50%)}.g-flag{font-size:15px;font-style:normal;position:absolute;top:2px;transform:translate(-50%)}.g-body{padding-top:4px;position:relative}.g-overlay{top:0;bottom:0;left:calc(var(--gl) + 12px);pointer-events:none;z-index:1;position:absolute;right:14px}.g-grid{border-left:1px dashed #dde2ec;width:0;position:absolute;top:0;bottom:0}.g-grid.phase-end{border-left:1px dotted #f3b58a}.g-today{z-index:3;background:#e5484d;width:2px;margin-left:-1px;position:absolute;top:0;bottom:0}.g-today b{color:#fff;white-space:nowrap;background:#e5484d;border-radius:4px;padding:0 5px;font-size:10px;position:absolute;top:-2px;left:50%;transform:translate(-50%)}.g-group{color:var(--navy);margin-top:10px;font-size:12.5px;font-weight:700}.g-group .g-label small{color:var(--sub);background:var(--soft);border-radius:99px;padding:0 7px;font-weight:400}.g-row{min-height:28px;margin:3px 0}.g-row:hover .g-label{color:var(--blue)}.g-track{height:24px;margin-right:14px;position:relative}.g-row:hover .g-track{background:#f6f8fc;border-radius:6px}.g-bar{--c:#888;cursor:pointer;z-index:2;background:color-mix(in srgb,var(--c) 38%,#fff);min-width:6px;height:18px;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c) 55%,transparent);border:none;border-radius:6px;padding:0;transition:transform .1s,box-shadow .1s;position:absolute;top:3px;overflow:hidden}.g-bar i{background:var(--c);height:100%;display:block}.g-bar:hover{transform:translateY(-1px);box-shadow:0 3px 8px #10182833}.g-bar.s-done{opacity:.55}.g-bar.s-blocked{box-shadow:inset 0 0 0 2px var(--st-blocked)}.g-empty{padding:16px}.board-hint{margin-bottom:10px}.board{grid-template-columns:repeat(5,minmax(220px,1fr));align-items:start;gap:12px;padding-bottom:6px;display:grid;overflow-x:auto}.col{background:#eceff4;border-radius:12px;min-height:220px;padding:0 0 8px;transition:background .15s,box-shadow .15s}.col.over{box-shadow:inset 0 0 0 2px var(--blue);background:#e1e9fb}.col h3{color:#fff;background:var(--st);border-radius:12px 12px 0 0;justify-content:space-between;align-items:center;margin:0 0 10px;padding:9px 12px;font-size:14px;display:flex}.col h3 span{background:#ffffff40;border-radius:99px;padding:0 9px;font-size:12px}.col-body{overscroll-behavior:contain;min-height:160px;max-height:max(360px,100vh - 250px);padding:0 8px;overflow-y:auto}.col-empty{color:#9aa3b5;text-align:center;border:1.5px dashed #cdd3df;border-radius:10px;margin:0;padding:20px 0;font-size:12px}.tcard{--c:#999;border:1px solid var(--line);border-left:5px solid var(--c);cursor:grab;box-shadow:var(--shadow);background:#fff;border-radius:10px;margin-bottom:8px;padding:10px 11px;font-size:13px;transition:box-shadow .15s,transform .15s}.tcard:hover{box-shadow:var(--shadow-h);transform:translateY(-1px)}.tcard.dragging{opacity:.45;cursor:grabbing}.tcard-top{justify-content:space-between;align-items:center;gap:6px;margin-bottom:6px;display:flex}.tcard b{margin-bottom:8px;line-height:1.45;display:block}.tcard .mini-bar{margin-bottom:8px}.tcard .mini-bar i{background:var(--c)}.tcard-foot{align-items:center;gap:6px;display:flex}.tcard-foot .who{color:var(--sub);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}@media (width<=760px){.board{scroll-snap-type:x mandatory;grid-template-columns:none;grid-auto-columns:82%;grid-auto-flow:column;margin:0 -16px;padding:0 16px 6px;scroll-padding:0 16px}.col{scroll-snap-align:start}}.list-table{border-collapse:collapse;width:100%;min-width:880px;font-size:13px}.list-table th,.list-table td{border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;padding:8px 10px}.list-table th{color:var(--sub);background:#f3f5f9;font-size:12px;font-weight:700;position:sticky;top:0}.list-table tbody tr[data-id]{cursor:pointer}.list-table tbody tr[data-id]:hover{background:#f7f9fc}.list-table tbody tr[data-id] td:first-child{box-shadow:inset 4px 0 0 var(--c)}.l-group td{color:var(--navy);background:#fafbfd;padding-top:12px;font-weight:700}.l-group small{color:var(--sub);margin-left:6px;font-weight:400}.l-title{max-width:320px}.l-title span{display:block}.l-title small{color:var(--sub);font-size:11px;display:block}.l-status .status{display:block}.who-cell{white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.list-table .mini-bar{vertical-align:middle;width:70px;margin-right:6px;display:inline-block}.list-table td small{color:var(--sub)}dialog{border:none;border-radius:16px;width:min(560px,94vw);max-height:92vh;padding:22px;box-shadow:0 20px 60px #0a14284d}dialog::backdrop{background:#0a142873}dialog h2{margin:0 0 6px;font-size:18px}#taskForm label{color:#3d4556;margin:10px 0;font-size:13px;font-weight:600;display:block}#taskForm input,#taskForm select,#taskForm textarea{border:1px solid var(--line);background:#fff;border-radius:8px;width:100%;margin-top:4px;padding:9px;font-size:14px;font-weight:400}#taskForm input:focus,#taskForm select:focus,#taskForm textarea:focus{border-color:var(--blue);outline:none;box-shadow:0 0 0 3px #2f6fed2e}.grid2{grid-template-columns:1fr 1fr;gap:0 12px;display:grid}@media (width<=480px){.grid2{grid-template-columns:1fr}}.dialog-actions{align-items:center;gap:8px;margin-top:14px;display:flex}#fUpdated{margin:0}.toast{color:#fff;opacity:0;pointer-events:none;z-index:50;background:#1f2633;border-radius:10px;max-width:90vw;padding:10px 16px;font-size:13px;transition:opacity .2s,transform .2s;position:fixed;bottom:24px;left:50%;transform:translate(-50%,20px)}.toast.show{opacity:1;transform:translate(-50%)}footer{color:var(--sub);padding:4px 24px 24px;font-size:12px}.mode-note{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.mode-badge{vertical-align:middle;letter-spacing:.05em;color:#14254a;background:#ffd43b;border-radius:5px;margin-left:6px;padding:1px 7px;font-size:11px;font-style:normal;font-weight:800;display:inline-block}@media (width<=760px){:root{--gl:150px}.topbar{padding:12px 16px}.brand p{display:none}.brand h1{font-size:17px}.brand h1 span{margin:0;font-size:13px;display:inline-block}.brand h1 span:first-child{display:block}.logo{font-size:26px}.top-actions{width:100%}.countdown{align-items:baseline;gap:6px;margin-right:auto;padding:5px 10px;display:flex}.countdown span{font-size:18px}.tabs{padding:10px 16px 0}.tab-list{width:100%}.tab{flex:1;padding:7px 8px}.filters{width:100%}.filter{flex:1;min-width:0}.app[data-view=dashboard] .filters{display:none}main{padding:12px 16px}footer{padding:4px 16px 20px}.gantt{min-width:720px;font-size:12px}.g-label{padding-left:8px}}@media (width<=400px){.top-actions .btn{padding:7px 10px;font-size:12px}}.gate{background:linear-gradient(140deg,#0f1c3a,#1d3a6e 65%,#24508f);place-items:center;min-height:100dvh;padding:24px 16px;display:grid}.gate[hidden]{display:none}.gate-card{text-align:center;background:#fff;border-radius:16px;flex-direction:column;gap:10px;width:min(380px,100%);padding:28px 24px 24px;display:flex;box-shadow:0 20px 60px #00000059}.gate-logo{font-size:40px;line-height:1}.gate-card h1{margin:0 0 8px;font-size:20px}.gate-card h1 span{color:var(--sub);font-size:13px;font-weight:400;display:block}.gate-card label{text-align:left;font-size:15px;font-weight:700}.gate-card input{border:1px solid var(--line);border-radius:9px;width:100%;padding:11px 12px;font-size:16px}.gate-card input:focus{border-color:var(--blue);outline:none;box-shadow:0 0 0 3px #2f6fed2e}.gate-card .btn{padding:11px;font-size:15px}.gate-error{color:#c62f45;text-align:left;margin:0;font-size:13px;font-weight:700}.shake{animation:.3s shake}@keyframes shake{25%{transform:translate(-6px)}50%{transform:translate(6px)}75%{transform:translate(-3px)}}:root{--safe-b:env(safe-area-inset-bottom,0px)}.ms{color:#e8590c;margin-right:4px;font-size:.9em}.g-ms{color:#e8590c;z-index:3;pointer-events:none;text-shadow:0 0 2px #fff;font-size:14px;font-style:normal;line-height:1;position:absolute;top:50%;transform:translate(-50%,-50%)}.live{opacity:.9;white-space:nowrap;align-items:center;gap:6px;font-size:11.5px;display:inline-flex}.live i{background:#ffd43b;border-radius:50%;width:8px;height:8px}.live-live i{background:#40c057;box-shadow:0 0 0 3px #40c05740}.live-offline i{background:#fa5252}.live-offline{color:#ffc9c9;font-weight:700}.state-box{color:var(--sub);text-align:center;flex-direction:column;align-items:center;gap:12px;padding:56px 16px;display:flex}.state-box.error{border-radius:var(--radius);color:var(--ink);background:#fff;border:1px solid #f5c2cb}.state-box.error p{color:var(--sub);word-break:break-word;margin:0}.spinner{border:3px solid #dbe2ef;border-top-color:var(--blue);border-radius:50%;width:28px;height:28px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.setup-error{border-radius:var(--radius);max-width:560px;box-shadow:var(--shadow);background:#fff;border:1px solid #f5c2cb;margin:15vh auto;padding:24px}.setup-error h1{margin:0 0 8px;font-size:18px}.update-banner{left:50%;bottom:calc(16px + var(--safe-b));z-index:60;color:#fff;background:#14254a;border-radius:12px;align-items:center;gap:10px;max-width:calc(100vw - 24px);padding:10px 12px 10px 16px;font-size:13.5px;font-weight:700;display:flex;position:fixed;transform:translate(-50%);box-shadow:0 10px 30px #0000004d}.toast{bottom:calc(24px + var(--safe-b))}#taskForm label.check{align-items:center;gap:8px;font-weight:600;display:flex}#taskForm label.check input{width:auto;margin:0}.field{margin:10px 0}.field-label{color:#3d4556;margin-bottom:4px;font-size:13px;font-weight:600;display:block}.deps{flex-wrap:wrap;gap:6px;margin:0 0 6px;padding:0;list-style:none;display:flex}.deps li{color:#23418a;background:#eef3ff;border-radius:99px;align-items:center;gap:4px;max-width:100%;padding:2px 4px 2px 10px;font-size:12px;display:inline-flex}.deps button{color:inherit;cursor:pointer;background:0 0;border:none;border-radius:99px;padding:2px 6px;font-size:14px;line-height:1}.deps button:hover{background:#d7e3ff}
