:root{font-family:Bahnschrift,"Malgun Gothic",sans-serif;font-size:16px;letter-spacing:0;color:#263639;background:#f3f6f5;--teal:#087d72;--muted:#647679;--line:#dce5e3}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{min-height:48px;border:1px solid var(--line);border-radius:6px;background:white;color:inherit;padding:10px 14px;cursor:pointer;touch-action:manipulation}button:hover{background:#eaf3ef}button:disabled{opacity:.5;cursor:wait}:focus-visible{outline:3px solid #c59d36;outline-offset:3px}header{height:72px;display:flex;align-items:center;justify-content:space-between;background:white;border-bottom:1px solid var(--line);padding:0 max(20px,calc((100vw - 1040px)/2))}.brand{display:flex;align-items:center;gap:12px;font-weight:700}.brand small{font-weight:400;color:var(--muted)}.mark{background:var(--teal);color:white;font-size:22px;width:38px;height:38px;display:grid;place-items:center;border-radius:6px}.local{font-size:11px;color:var(--muted);border:1px solid var(--line);padding:5px 8px}main{max-width:1040px;margin:auto;padding:32px 24px}.heading{display:flex;justify-content:space-between;align-items:center;gap:12px}.eyebrow{font-size:12px;color:var(--teal);font-weight:700;margin:0 0 8px}h1{font-size:30px;margin:0 0 10px}h2{font-size:20px;margin:0}.subtitle{color:var(--muted);font-size:14px;margin:0}.metrics{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-top:28px;padding:20px 0}.metrics>div{font-size:13px;color:var(--muted);padding-left:24px;border-left:1px solid var(--line)}.metrics>div:first-child{border:0;padding:0}.metrics strong{display:block;font-size:32px;color:#263639;margin-top:8px;font-variant-numeric:tabular-nums}#done{color:#287547}#running{color:var(--teal)}#late{color:#b74443}.progress{display:flex;align-items:center;gap:12px;font-size:12px;margin:14px 0 22px}progress{height:5px;flex:1;min-width:0;accent-color:var(--teal)}progress::-webkit-progress-bar{background:var(--line)}progress::-webkit-progress-value{background:var(--teal)}.notice{border-left:3px solid #c8a04a;background:#fbf7e9;color:#86611f;font-size:12px;line-height:1.7;padding:10px 12px}.search{margin:20px 0 0}input,select,textarea{display:block;width:100%;min-width:0;max-width:100%;margin-top:6px;min-height:48px;border:1px solid #c8d5d2;border-radius:6px;padding:10px 12px;color:#263639;background:white}textarea{resize:vertical}.toolbar{display:flex;align-items:center;justify-content:space-between;margin:16px 0 12px;gap:6px}.filters{display:flex;border-bottom:1px solid var(--line)}.filters button{border:0;border-radius:0;background:none;font-size:14px;color:var(--muted);padding:10px 14px}.filters button[aria-pressed=true]{color:var(--teal);font-weight:700;box-shadow:inset 0 -3px var(--teal)}.text{background:none;border:0;color:var(--muted);font-size:13px;padding:8px}.phase{background:white;border-bottom:1px solid var(--line)}.phase:first-child{border-top:1px solid var(--line)}summary{list-style:none;cursor:pointer;touch-action:manipulation}summary::-webkit-details-marker{display:none}.phase>summary{display:grid;grid-template-columns:16px 40px minmax(0,1fr) auto;gap:12px;align-items:center;padding:18px 20px;min-height:96px}.chevron{width:8px;height:8px;border-right:2px solid #879895;border-bottom:2px solid #879895;transform:rotate(-45deg)}details[open]>summary>.chevron{transform:rotate(45deg)}.phase[open]>summary{background:#ebf4f0}.code{color:var(--teal);font-size:20px;font-weight:700}.phase-title{font-weight:700;font-size:17px;overflow-wrap:anywhere}.schedule{font-weight:400;color:var(--muted);font-size:12px;margin-top:6px;line-height:1.5}.count{text-align:right;font-size:11px;color:var(--muted);line-height:1.8}.count b{font-size:16px;color:#263639}.tasks{padding:0 20px 8px 48px}.task{border-bottom:1px solid var(--line)}.task:last-child{border:0}.task>summary{display:grid;grid-template-columns:10px 48px minmax(0,1fr) auto;gap:10px;align-items:center;min-height:76px;padding:14px 0}.task-code{font-size:13px;color:var(--muted)}.task-name{font-size:15px;line-height:1.6;overflow-wrap:anywhere}.badge{font-size:11px;padding:4px 7px;border-radius:4px;background:#eef1f0;color:var(--muted);white-space:nowrap}.badge.running{background:#d9efe6;color:var(--teal)}.badge.done{background:#e4f1e4;color:#287547}.badge.late{background:#fbe5e3;color:#b74443}.body{padding:0 0 22px 20px}.people{display:flex;gap:10px 24px;flex-wrap:wrap;font-size:14px;margin:8px 0 18px}.people span{color:var(--muted);margin-right:8px}.times{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;padding:16px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}dt{font-size:12px;color:var(--muted);margin-bottom:8px}dd{margin:0;font-size:14px;font-variant-numeric:tabular-nums}.source{font-size:12px;color:#9a701f;line-height:1.7}.body pre{font:inherit;font-size:13px;color:var(--muted);white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.8}.actions{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:16px}.primary{background:var(--teal);color:white;border-color:var(--teal);min-width:120px;font-weight:600}.primary:hover{background:#066358}.finish{background:#294548;border-color:#294548}.reset{color:#a6443d}.empty{padding:30px;text-align:center;color:var(--muted)}footer{display:flex;gap:10px;align-items:center;margin-top:24px;font-size:12px;color:var(--muted)}footer span{margin-right:auto}#error,#edit-error,#document-error{color:#a6443d;font-size:14px}dialog{border:1px solid var(--line);border-radius:8px;width:calc(100% - 24px);max-width:680px;max-height:90dvh;padding:24px;box-shadow:0 24px 70px #19382a33}dialog::backdrop{background:#143b3755}.dialog-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.close{font-size:26px;padding:4px;width:48px;border:0;background:none}label{display:block;color:var(--muted);font-size:13px;margin-bottom:16px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}.dialog-actions{display:flex;justify-content:flex-end;gap:10px}.check{display:flex;align-items:center;gap:10px}.check input{width:20px;min-height:20px;margin:0;accent-color:var(--teal)}#document-dialog{max-width:1100px}#document-image{display:block;width:100%;margin-top:16px}a{color:var(--teal)}#toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#244039;color:white;padding:14px 20px;max-width:90%;border-radius:6px;font-size:14px;z-index:20}
@media(max-width:600px){header{height:64px;padding:0 16px}.brand small{display:none}main{padding:24px 16px}.heading{align-items:flex-start}h1{font-size:24px}.heading button{font-size:13px;padding:8px 10px}.metrics{padding:16px 0;margin-top:22px}.metrics>div{padding-left:12px}.metrics strong{font-size:28px}.filters button{padding:10px;font-size:13px}.text{font-size:12px}.phase>summary{grid-template-columns:10px 30px minmax(0,1fr) auto;gap:8px;padding:16px 12px}.phase-title{font-size:15px}.code{font-size:18px}.count{max-width:52px}.count b{font-size:14px}.tasks{padding:0 12px 8px 16px}.task>summary{grid-template-columns:8px 42px minmax(0,1fr) auto;gap:8px}.task-name{font-size:14px}.badge{font-size:10px;padding:4px}.body{padding-left:0}.times{grid-template-columns:1fr 1fr;gap:20px 10px}.people{font-size:13px}.actions{flex-wrap:wrap}.source{font-size:11px}.form-grid{grid-template-columns:1fr}dialog{padding:18px}footer{gap:4px;flex-wrap:wrap}}

body{background:linear-gradient(180deg,#f0f5f2 0,#fafbf9 480px)}
main{max-width:960px;padding-top:16px}
header{background:#ffffffed}
h1{font-size:28px;font-weight:700}
.subtitle{font-size:13px}
.metrics{border-top:0;margin-top:0}
.metrics strong{font-weight:600}
.phase{background:transparent}
.phase>summary{padding:22px 16px;background:transparent}
.phase[open]>summary{background:transparent}
.code{display:grid;place-items:center;width:40px;height:40px;border:1px solid #bfd2c9;border-radius:6px;font-size:16px;background:#f6faf7}
.phase[open] .code{background:#166e60;color:white;border-color:#166e60}
.phase>summary{border-left:4px solid transparent}
.phase.phase-done>summary{background:#e3f1e7;border-left-color:#267548}
.phase.phase-done .code{background:#267548;color:white;border-color:#267548}
.phase.phase-done .phase-title{color:#215e39}
.phase.phase-done .chevron{border-color:#267548}
.phase.phase-waiting .code{background:#f5f7f6;color:#66736d;border-color:#d4dcd7}
.phase.phase-running>summary{background:#fff7e1;border-left-color:#c08a1e}
.phase.phase-running .code{background:#f6e8bc;color:#765719;border-color:#dfc875}
.phase-status{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:58px;padding:3px 7px;font-size:12px;font-weight:700;border-radius:4px;background:#e9eeeb;color:#68776d}
.phase-done .phase-status{background:#267548;color:white}
.phase-running .phase-status{background:#eed896;color:#6c5011}
.phase .count{min-width:58px;max-width:none}
.phase .count b{font-size:12px;font-weight:500;color:#66776c}
.phase-title{font-size:16px}
.tasks{padding:0 12px 8px 34px}
.task{position:relative;display:grid;grid-template-columns:66px minmax(0,1fr);gap:16px;border:0;padding:0}
.timeline-rail{position:relative;padding-top:18px;text-align:center}
.timeline-rail:after{content:"";position:absolute;left:50%;top:32px;bottom:0;width:2px;background:#d6e2da}
.task:last-child .timeline-rail:after{bottom:24px}
.timeline-dot{position:relative;z-index:1;display:block;margin:0 auto;width:12px;height:12px;border:2px solid #b6c9be;background:#fafbf9;border-radius:50%}
.timeline-time{position:relative;z-index:1;display:block;background:#f9fbf8;margin-top:10px;padding:6px 0;font-size:12px;color:#64786c;font-variant-numeric:tabular-nums}
.task.running .timeline-dot{border-color:#087d72;background:#087d72;box-shadow:0 0 0 5px #dceee5}
.task.done .timeline-dot{border-color:#287547;background:#287547}
.task-content{padding:16px 16px 24px;border-bottom:1px solid #dde6df}
.task:last-child .task-content{border-bottom:0}
.task-heading{display:flex;align-items:center;gap:10px}
.task-code{font-size:12px;font-weight:700;color:#337264}
.task-name{font-size:16px;font-weight:600;margin:9px 0 12px;line-height:1.6}
.body{padding:0}
.people{font-size:13px;margin:0 0 14px;gap:8px 24px}
.people span{font-size:12px}
.times{border:0;background:#eaf0eb80;padding:12px 16px;gap:14px;margin:0;border-radius:4px}
.times dd{font-size:13px}
.times dt{font-size:11px;margin-bottom:6px}
.actions{margin-top:12px}
.primary{min-width:108px;min-height:48px;font-size:14px;border-radius:4px}
.text{font-size:13px}
.badge{font-size:11px;background:transparent;border:1px solid #d6e1db}
.badge.running{border-color:#c4e2d5}
.badge.done{border-color:#cfe1cc}
.badge.late{border-color:#efcbc4}
@media(max-width:600px){main{padding:26px 16px}h1{font-size:25px}.phase>summary{padding:20px 12px;grid-template-columns:10px 36px minmax(0,1fr) auto;gap:9px}.code{width:34px;height:34px;font-size:14px}.phase-title{font-size:15px}.tasks{padding:0 0 4px}.task{grid-template-columns:38px minmax(0,1fr);gap:12px}.timeline-time{font-size:10px}.task-name{font-size:15px}.times{padding:12px;gap:14px 8px}.times dd{font-size:12px}.people{gap:6px 16px}.metrics strong{font-size:27px}.task-content{padding:16px 12px 24px}}

.people{font-size:14px;color:#263639}
.people span,.times dt{color:#586c65}
.times{background:#eff2f0}
.times dd{font-size:14px}
.task.done,.task.running{background:transparent}
.task.running .task-content{background:#fffaf0;border-bottom-color:#d9c898}
.task.done .task-content{background:#f0f7f2;border-bottom-color:#bdd7c5}
@media(max-width:600px){.task{grid-template-columns:44px minmax(0,1fr)}.timeline-time{font-size:12px}.times dd{font-size:13px}.people{font-size:14px;line-height:1.7}.people span{margin-right:6px}.task-name{font-size:16px}.badge{font-size:12px}}
@media(max-width:600px){main{padding-top:16px}.metrics{margin-top:0}}
.login-main{max-width:380px;padding-top:64px}.login-main form{display:grid;gap:16px}.login-main h1{margin:0}.login-main input{width:100%;min-height:52px;padding:12px;border:1px solid var(--line);border-radius:4px;background:white;font-size:24px;text-align:center}.login-main .primary{width:100%}#login-error{color:#a33333;font-size:14px;margin:0;min-height:20px}
.brand{min-width:0}.mark{flex-shrink:0}.refresh-icon{display:grid;place-items:center;flex:0 0 44px;width:44px;height:48px;padding:0;border-color:transparent;background:transparent}.refresh-icon img{display:block}.refresh-icon[aria-busy="true"] img{animation:refresh-spin 1s linear infinite}@keyframes refresh-spin{to{transform:rotate(360deg)}}@media(max-width:400px){.brand{gap:8px}}@media(prefers-reduced-motion:reduce){.refresh-icon[aria-busy="true"] img{animation:none}}