*{box-sizing:border-box} :root{--green:#236956;--green-dark:#174e3f;--ink:#25372f;--muted:#768078;--line:#e2e7e2;--row-h:23px;--grid-font:12px;font-family:'Segoe UI','Malgun Gothic',sans-serif;color:var(--ink);background:#f5f7f4}body{margin:0}button,input,select{font:inherit}button,a,label{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{opacity:.35;cursor:default}button:focus-visible,a:focus-visible,select:focus-visible{outline:2px solid #31846a;outline-offset:3px}button{border:0;background:transparent;color:inherit}input{min-width:0}a{color:inherit;text-decoration:none}[hidden]{display:none!important}.header-spacer{flex:1}.brand-mark{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;color:white;background:var(--green);border-radius:8px;font-size:24px;font-weight:400}.login-page{min-height:100dvh;background:#f7f8f3;display:flex;flex-direction:column}.login-brand{padding:36px 5vw;display:flex;align-items:center;gap:10px;font-size:18px;font-weight:700}.prototype{font-size:10px;font-weight:600;letter-spacing:1.4px;color:#848e84;margin-left:9px;border-left:1px solid #d6ddd3;padding-left:16px}.login-layout{display:grid;grid-template-columns:1fr 420px;align-items:center;gap:9vw;max-width:1190px;width:100%;margin:auto;padding:30px 40px 70px}.eyebrow{font-size:10px;letter-spacing:2px;font-weight:700;color:#75877b}.intro h1{font-size:clamp(35px,4vw,54px);letter-spacing:-2.6px;line-height:1.28;margin:20px 0;color:#1d392c}.intro>p{font-size:15px;line-height:1.9;color:#6b786d}.preview-card{margin-top:34px;background:#fff;border:1px solid #dbe3d8;border-radius:12px;box-shadow:0 20px 44px #30492c09;transform:rotate(-1.5deg);overflow:hidden;max-width:520px}.preview-title{display:flex;gap:7px;align-items:center;padding:16px;font-size:11px;border-bottom:1px solid #e8ece6;font-weight:600}.preview-title>span:last-child{margin-left:auto;font-weight:400;color:#8e978f}.preview-dot{width:7px;height:7px;border-radius:50%;background:#628a63}.preview-grid{display:grid;grid-template-columns:145px 1fr;padding:10px 0}.mini-names>*{height:27px;display:flex;align-items:center;padding-left:16px;font-size:10px;border-bottom:1px solid #f0f3ee}.mini-timeline{padding-top:2px;background:repeating-linear-gradient(to right,transparent 0,transparent 46px,#e8eee6 46px,#e8eee6 47px);position:relative}.mini-bar{height:10px;background:#81a68b;position:relative;margin:8px 0 17px;border-radius:2px}.mini-bar.group{height:5px;background:#2e644b;top:2px;margin-bottom:22px}.preview-foot{display:flex;justify-content:space-between;background:#f7faf5;padding:14px 16px;font-size:10px;color:#73816e}.intro-bottom{display:flex;gap:22px;margin-top:29px;color:#85907e;font-size:11px}.intro-bottom span:before{content:'✓';margin-right:6px;color:#628a63}.login-card{background:white;padding:36px;border:1px solid #e1e6dc;border-radius:16px;box-shadow:0 12px 44px #2a3c2810}.test-label{display:flex;align-items:center;gap:6px;font-size:11px;color:#67806b}.test-label span{width:6px;height:6px;border-radius:50%;background:#7e9d7c}.login-card h2{font-size:27px;line-height:1.4;letter-spacing:-1px;margin:20px 0 12px}.login-description{font-size:12px;color:#7e857c;line-height:1.7;margin:0 0 28px}#login-form label{display:block;font-size:12px;font-weight:600;margin:19px 0 8px}#login-form input{width:100%;height:45px;border:1px solid #dbe1d7;border-radius:6px;padding:0 12px;font-size:13px;background:#fdfefa;color:#24382c}#login-form input:focus{outline:2px solid #c4dbcc;border-color:#4b8463}#login-form input::placeholder{color:#a0a69c}.password-wrap{position:relative}.password-wrap input{padding-right:52px!important}.password-wrap button{position:absolute;right:6px;top:5px;height:35px;width:42px;font-size:11px;color:#788675}.login-submit{display:flex;align-items:center;justify-content:space-between;width:100%;background:var(--green);color:white;border-radius:6px;margin:26px 0 23px;padding:14px 17px;font-size:13px;font-weight:600}.login-submit:hover,.primary:hover{background:var(--green-dark)}.login-error{font-size:12px;line-height:1.6;color:#b54c39;margin:12px 0 -8px}.demo-account{background:#f3f6ef;border-radius:6px;padding:13px 15px;font-size:11px;color:#7b8573}.demo-account>span{font-size:10px;display:block;margin-bottom:7px;font-weight:600}.demo-account code{font-family:Consolas,monospace;font-size:12px;font-weight:600;color:#405a43;margin-left:4px}.account-separator{padding:0 9px;color:#b3bbaa}.demo-note{font-size:10px;line-height:1.8;color:#92998b;margin:14px 0 0}.login-footer{display:flex;justify-content:space-between;padding:18px 5vw;font-size:10px;color:#8d9787;border-top:1px solid #e9ede3}.app-header{height:62px;background:white;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:0 28px;font-size:12px}.app-brand{display:flex;gap:9px;align-items:center;font-weight:700;font-size:16px}.app-brand .brand-mark{width:28px;height:28px;font-size:21px}.app-divider{height:20px;border-left:1px solid #e2e6e0;margin:0 8px}.app-context{color:#8a938a}.test-pill{color:#8a917f;background:#f2f4ed;border-radius:4px;padding:5px 9px;font-size:10px;margin-right:9px}.user-avatar{background:#e9eee4;border:1px solid #d7e1d2;border-radius:50%;display:flex;align-items:center;justify-content:center;width:28px;height:28px;font-weight:700;color:#6b805e}.quiet{font-size:11px;color:#8d968c;padding:8px}.app-main{padding:25px 26px 18px;max-width:1920px;margin:auto}.project-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:23px}.project-heading h1{font-size:24px;letter-spacing:-.8px;margin:7px 0}.project-heading h1 input{font-size:inherit;font-weight:600;color:inherit;background:transparent;border:0;width:min(600px,43vw);padding:0;outline:none}.project-heading h1 input:focus{box-shadow:0 1px var(--green)}.project-heading p{font-size:11px;color:#8b948b;margin:8px 0 0}.project-actions{display:flex;align-items:center;gap:8px}.saved-state{font-size:10px;color:#8b9689;margin-right:8px}.secondary,.primary{border:1px solid #dbe2d7;background:white;padding:9px 13px;border-radius:5px;font-size:11px;white-space:nowrap}.primary{background:var(--green);color:white;border-color:var(--green);font-weight:600;padding:9px 19px}.file-label{cursor:pointer}.sheet-panel{background:white;border:1px solid #dce3da;border-radius:8px;overflow:hidden;box-shadow:0 3px 8px #34493303}.sheet-tabs{height:43px;display:flex;align-items:center;padding:0 14px;border-bottom:1px solid var(--line);gap:17px}.sheet-tabs button{height:43px;font-size:12px;padding:0 10px;font-weight:600}.sheet-tabs .active{border-bottom:2px solid var(--green);color:var(--green)}#task-count{font-size:10px;color:#939b90}.apply-state{font-size:10px;color:#759173}.apply-state.pending{color:#ad8644}.sheet-toolbar{display:flex;gap:8px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line);min-height:42px;flex-wrap:wrap}.toolgroup{display:flex;border-right:1px solid #e4e9e0;padding-right:8px;gap:2px}.sheet-toolbar button{font-size:11px;padding:5px 7px;border-radius:3px;white-space:nowrap}.sheet-toolbar button:hover{background:#edf3e9}.help-button{border:1px solid #e1e5dc!important;border-radius:50%!important;width:23px;height:23px;padding:0!important;color:#83907a}.view-toolbar{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;gap:12px;font-size:11px}.view-name,.view-options{display:flex;align-items:center;gap:8px}.view-dot{width:6px;height:6px;background:#7f9875;border-radius:50%}.text-button{font-size:10px;color:#8e9988;padding:4px}.text-button:first-of-type{margin-left:8px}.segmented{display:flex;background:#f0f3ed;padding:3px;border-radius:5px}.segmented button{font-size:11px;padding:4px 11px;border-radius:3px;color:#84917c}.segmented button.selected{background:white;color:#355b3b;box-shadow:0 1px 3px #283e2612}.small{font-size:10px;padding:4px 10px}#zoom-label{width:35px;font-size:10px;text-align:center;color:#899480}.view-separator{height:16px;border-left:1px solid #e0e6da;margin:0 4px}.view-options label{font-size:10px;color:#88957e}.view-options select{font-size:10px;background:white;border:1px solid #dfe6d9;border-radius:3px;padding:3px}.sheet-scroll{overflow:auto;max-height:calc(100dvh - 370px);min-height:260px;border-top:1px solid var(--line);position:relative;scrollbar-width:thin;scrollbar-color:#cad6c4 #f1f4ed}table{border-spacing:0;table-layout:fixed;border-collapse:separate;font-size:var(--grid-font);color:#53604f;width:max-content}th{font-size:10px;font-weight:500;background:#f3f6ef;border-right:1px solid #dfe6d9;border-bottom:1px solid #d6dfd0;height:48px;position:sticky;top:0;z-index:5;text-align:left;color:#798771;padding:0 8px}td{height:var(--row-h);padding:0;border-right:1px solid #e4e9df;border-bottom:1px solid #e9eee4;background:white;vertical-align:middle}td.sticky,th.sticky{position:sticky;z-index:2}th.sticky{z-index:6}td.row-number,th.row-number{left:0;width:37px;min-width:37px;max-width:37px;text-align:center;background:#f6f8f2;color:#9ca593;font-size:10px;cursor:pointer}.row-number.selected{background:#dbe8d4;color:#3b6c3d}.wbs{left:37px;width:64px;min-width:64px;max-width:64px;color:#8a9681;padding:0 8px;font-size:10px}.task{left:101px;width:250px;min-width:250px;max-width:250px}.start{left:351px;width:104px;min-width:104px;max-width:104px}.end{left:455px;width:104px;min-width:104px;max-width:104px}.owner{left:559px;width:92px;min-width:92px;max-width:92px;box-shadow:3px 0 5px #33452c08;border-right:2px solid #cfdcc6}td input{height:calc(var(--row-h) - 1px);display:block;width:100%;border:0;background:transparent;padding:0 7px;font-size:var(--grid-font);color:inherit;border-radius:0;outline:none}td input:focus{outline:2px solid #5d8e50;outline-offset:-2px;background:#f9fdf5}td.selected-cell{background:#e8f0e1}td.invalid{background:#fff2ec;box-shadow:inset 0 -2px #ce8a69}td.invalid input:focus{outline-color:#c87655}.task-inner{display:flex;align-items:center;height:var(--row-h);padding-left:var(--indent)}.task-inner input{flex:1;padding-left:3px}.toggle{width:18px;flex:0 0 18px;font-size:11px;padding:0;color:#638154}.task-spacer{width:18px;flex:0 0 18px}.group-row td{background:#f0f5eb;font-weight:600;color:#45643a}.group-row td.row-number{font-weight:400}.group-row td.selected-cell{background:#e0ebd5}.cut-row td{opacity:.5}.timeline{position:relative;padding:0;min-width:300px}.timeline-header{display:flex;position:relative;height:47px;padding:0;white-space:nowrap}.time-segment{position:absolute;height:47px;border-right:1px solid #dfe6d9;text-align:center;display:flex;flex-direction:column;justify-content:center;gap:5px;overflow:hidden}.time-segment small{color:#a4ad9b;font-size:9px;font-weight:400}.timeline-content{height:calc(var(--row-h) - 1px);position:relative;overflow:hidden}.time-line{position:absolute;top:0;bottom:0;border-left:1px solid #e8eee2;pointer-events:none}.time-line.today-line{border-left:1px dashed #d29c55;z-index:1}.bar{position:absolute;top:6px;height:calc(var(--row-h) - 13px);min-height:6px;background:#8eae79;border-radius:2px;min-width:3px;pointer-events:auto}.bar:after{content:'';position:absolute;inset:0;border:1px solid #63854e30;border-radius:2px}.bar.group{height:5px;top:8px;background:#48703c;border-radius:0}.bar.group:before{content:'';position:absolute;left:0;right:0;top:0;height:9px;border-left:3px solid #48703c;border-right:3px solid #48703c}.bar-label{position:absolute;top:4px;font-size:9px;color:#89947f;white-space:nowrap}.sheet-footer{display:flex;justify-content:space-between;align-items:center;font-size:10px;color:#929d8a;padding:10px 14px;border-top:1px solid var(--line);gap:15px}.sheet-footer>span:last-child{display:flex;align-items:center;gap:6px}.sheet-footer i{display:inline-block;width:12px;height:6px;margin-left:10px}.legend-group{background:#48703c;height:4px!important}.legend-task{background:#8eae79;border-radius:2px}.legend-today{border-left:1px dashed #d29c55;width:2px!important;height:10px!important}.bottom-hint{display:flex;justify-content:space-between;color:#a0aa97;font-size:10px;margin-top:13px;gap:15px}.validation{padding:9px 15px;background:#fff5e9;border-top:1px solid #f1dec6;color:#9c6c32;font-size:11px;line-height:1.7}.validation button{font-size:11px;text-decoration:underline}#empty{text-align:left;padding:50px;color:#96a18c;font-size:12px}dialog{max-width:470px;border:1px solid #dce4d6;border-radius:12px;padding:30px;color:var(--ink);box-shadow:0 20px 80px #1a302433}dialog::backdrop{background:#1a302455}dialog h2{font-size:23px;margin:12px 0 20px}dialog p{font-size:12px;line-height:1.9;color:#78866f}button.dialog-close:first-child{position:absolute;right:12px;top:12px;font-size:23px;color:#8a9682}#toast{position:fixed;bottom:30px;left:50%;transform:translateX(-50%);z-index:30;background:#284732;color:white;box-shadow:0 5px 25px #28473222;border-radius:6px;font-size:12px;padding:12px 22px;max-width:90vw} @media(min-height:900px){.sheet-scroll{max-height:calc(100dvh - 365px)}} @media(max-width:950px){.login-layout{gap:35px;padding:20px 28px 50px;grid-template-columns:1fr 360px}.login-card{padding:28px}.intro h1{font-size:38px}.intro-bottom{gap:10px;font-size:9px}.mini-names{width:125px}.preview-grid{grid-template-columns:125px 1fr}.app-context,.saved-state,.user-name{display:none}.app-main{padding:20px 12px}.sheet-toolbar{gap:3px}.project-actions{gap:5px}.project-heading h1{font-size:21px}.view-name .text-button{display:none}.bottom-hint span:last-child{display:none}}@media(max-width:700px){.login-brand{padding:23px}.login-layout{display:block;max-width:460px;padding:20px 23px 40px}.intro{display:none}.login-card{padding:30px}.login-footer{padding:16px 23px}.login-footer span:last-child{display:none}.project-heading{display:block}.project-heading h1 input{width:100%}.project-actions{margin-top:15px}.project-actions .saved-state{display:block;flex:1}.app-header{padding:0 14px;gap:8px}.app-divider{margin:0}.test-pill{margin-right:0}.view-toolbar{flex-wrap:wrap}.view-options{margin-left:auto}.sheet-scroll{max-height:calc(100dvh - 440px)}.sheet-toolbar .toolgroup{padding-right:4px}.sheet-toolbar button{padding:4px;font-size:10px}.bottom-hint{line-height:1.7}.sheet-footer{font-size:9px}}
/* Excel-style fixed level columns E through M. */
.history-toolbar{display:flex;align-items:center;gap:13px;padding:10px 14px;background:#f7faf4;border-bottom:1px solid var(--line);font-size:10px;color:#84917b;flex-wrap:wrap}.history-actions{display:flex;gap:7px}.history-actions button{padding:7px 12px;background:white;border:1px solid #bdcdb3;border-radius:5px;font-size:12px;font-weight:600;color:#355b31}.history-actions button:hover:not(:disabled){background:#e9f2e2}.history-actions button:disabled{border-color:#dde4d7;opacity:.5}.history-toolbar>button{padding:6px 10px;border:1px solid #d3dfc9;border-radius:4px;background:white;font-size:11px}.levels-heading{left:101px;width:432px;min-width:432px;max-width:432px;height:22px;text-align:left;padding:0 8px;z-index:8!important}.level-header{width:48px;min-width:48px;max-width:48px;height:26px;top:22px;text-align:center;padding:0;font-size:11px;z-index:8!important}.level-header small{color:#9eaa93;font-size:9px;margin-left:3px}.level-cell{width:48px;min-width:48px;max-width:48px;overflow:visible;z-index:2!important}.level-cell.occupied{z-index:3!important}.level-cell-inner{position:relative;width:47px;height:calc(var(--row-h) - 1px)}.level-cell input{position:absolute;inset:0;width:47px;padding:0 3px;color:transparent;caret-color:#345d2e}.level-cell.occupied input{padding-left:17px}.level-cell .level-name{position:absolute;left:17px;top:0;line-height:calc(var(--row-h) - 1px);white-space:nowrap;pointer-events:none;font-size:var(--grid-font);color:inherit;z-index:1}.level-cell .toggle{position:absolute;left:0;top:0;height:calc(var(--row-h) - 1px);width:17px;z-index:3;background:inherit}.level-cell:focus-within{z-index:5!important}.level-cell input:focus{width:var(--edit-width);color:#45613c;background:#f8fcf3;padding-left:3px;z-index:4;min-width:48px}.level-cell:focus-within .level-name,.level-cell:focus-within .toggle{visibility:hidden}td.start,th.start{left:533px;z-index:4}td.end,th.end{left:637px;z-index:4}td.owner,th.owner{left:741px;z-index:4}th.start,th.end,th.owner{z-index:9}th.row-number,th.wbs{z-index:9}.sheet-scroll{max-height:calc(100dvh - 415px)}@media(min-height:900px){.sheet-scroll{max-height:calc(100dvh - 415px)}}@media(max-width:700px){.sheet-scroll{max-height:calc(100dvh - 490px)}.history-toolbar{gap:8px}.history-toolbar>span:not(.header-spacer){display:none}.history-actions button{font-size:11px;padding:6px 8px}}
/* Selected cell and in-cell editing are separate interaction modes. */
:root{--row-h:20px;--grid-font:13px}
#sheet-body input[data-cell-idle]{cursor:cell;caret-color:transparent}
#sheet-body td.cell-current{box-shadow:inset 0 0 0 2px #417f38;z-index:6!important}
#sheet-body input[data-cell-idle]:focus{outline:none;background:transparent}
#sheet-body .level-cell input[data-cell-idle]:focus{width:47px;min-width:0;padding-left:17px;color:transparent;background:transparent;z-index:0}
#sheet-body .level-cell:focus-within .level-name,#sheet-body .level-cell:focus-within .toggle{visibility:visible}
#sheet-body .level-cell.is-editing input{width:var(--edit-width);color:#304e2a;background:#f8fcf3;padding-left:3px;z-index:4;caret-color:#345d2e;cursor:text}
#sheet-body .level-cell.is-editing .level-name,#sheet-body .level-cell.is-editing .toggle{visibility:hidden}
#sheet-body td.is-editing{z-index:7!important}
#sheet-body td:not(.level-cell).is-editing input{background:#f8fcf3;caret-color:#345d2e;cursor:text}
#sheet-body td input{line-height:calc(var(--row-h) - 1px);padding-top:0;padding-bottom:0}
.bar{top:calc((var(--row-h) - max(6px, var(--row-h) - 12px))/2);height:max(6px,calc(var(--row-h) - 12px))}
.bar.group{top:calc(var(--row-h)/2 - 2px);height:4px}
.bar-label{top:calc(var(--row-h)/2 - 6px)}

/* Compact desktop ribbon and independently scaled worksheet. */
#workspace{height:100dvh;overflow:hidden}#workspace[hidden]{display:none}.app-header{height:36px;min-height:36px;padding:0 12px;gap:12px}.app-brand{font-size:13px;white-space:nowrap}.app-header .brand-mark{width:22px;height:22px;font-size:18px}.app-header #project-name{font-size:14px;font-weight:600;width:300px;border:0;background:transparent;color:var(--ink)}.app-header .saved-state{font-size:10px}.app-main{height:calc(100dvh - 36px);padding:5px 8px 3px;display:flex;flex-direction:column}.sheet-panel{flex:1;min-height:0;display:flex;flex-direction:column;border-radius:5px;position:relative}.ribbon-tabs{height:30px;min-height:30px;display:flex;align-items:center;gap:10px;padding:0 8px;border-bottom:1px solid var(--line);font-size:11px;background:#f8faf5}.ribbon-tabs b{color:#236956}.ribbon-tabs button{font-size:11px;padding:5px 8px;border-radius:3px}.ribbon-tabs button[aria-expanded=true]{background:#dfead8;color:#345d2e}.ribbon-panel{position:absolute;left:0;right:0;top:30px;background:#f8fbf5;box-shadow:0 7px 14px #183d2522;z-index:20;border-bottom:1px solid #b9cdb0;padding:12px 36px 12px 14px}.ribbon-panel[hidden],.ribbon-panel [hidden]{display:none}.ribbon-panel>div{display:flex;gap:20px;flex-wrap:wrap}.ribbon-group{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:12px}.ribbon-group b{font-size:11px;color:#648058}.ribbon-group button,.ribbon-group .file-label{border:1px solid #ccd9c3;border-radius:3px;padding:5px 9px;background:white;font-size:12px;cursor:pointer}.ribbon-group label{display:flex;gap:4px;align-items:center}.ribbon-group input{accent-color:#236956}.ribbon-note{font-size:11px;color:#6c7d62;margin:0;width:100%;line-height:1.6}#close-ribbon{position:absolute;top:6px;right:8px;font-size:20px}.quick-toolbar{height:34px;min-height:34px;display:flex;align-items:center;gap:5px;padding:0 8px;border-bottom:1px solid var(--line);font-size:11px;white-space:nowrap}.quick-toolbar button{font-size:11px;padding:4px 6px;border-radius:3px}.quick-toolbar .primary{padding:5px 9px}.quick-toolbar label{display:flex;align-items:center;gap:4px}.quick-toolbar select{font-size:11px;border:1px solid #d6dfcf;background:white;border-radius:3px;padding:2px}.quick-toolbar .segmented{padding:1px}.quick-toolbar .segmented button{padding:3px 8px}.axis-zoom{color:#798771}.tool-divider{height:16px;border-left:1px solid #d7e0d0;margin:0 3px}.sheet-scroll{flex:1;min-height:0;max-height:none!important;border-top:0}.sheet-footer{height:22px;min-height:22px;padding:0 8px;font-size:10px}.bottom-hint{height:19px;min-height:19px;margin:3px 0 0;font-size:10px;align-items:center}.extra-field{width:104px;min-width:104px;max-width:104px}.extra-field.progress{width:86px;min-width:86px;max-width:86px}.extra-field input{width:100%}.progress-fill{position:absolute;inset:0 auto 0 0;background:#3e7e51;border-radius:2px}.actual-bar{position:absolute;top:calc(var(--row-h) - 5px);height:3px;background:#508fc0;border-radius:1px}.bar-label{color:#607653;font-size:10px}.validation{max-height:60px;overflow:auto;flex-shrink:0}#apply-state{font-size:10px}.legend-actual{background:#508fc0}#undo,#redo{min-width:42px;color:#3b6744}#task-count{font-size:10px;color:#89957d}#schedule-table{transform-origin:top left}@media(max-width:900px){.app-header #project-name{width:230px}.quick-toolbar{gap:2px}.quick-toolbar button{padding:4px}.ribbon-tabs{gap:3px}.quick-toolbar .axis-zoom{font-size:0}.quick-toolbar .axis-zoom button,.quick-toolbar .axis-zoom span{font-size:10px}.bottom-hint>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bottom-hint>span:last-child{display:block;white-space:nowrap}}

/* Schedule owns all editable fields; Gantt is an independent display pane. */
.split-sheet{display:flex;overflow:hidden;gap:0}.schedule-pane{flex:0 1 66%;min-width:220px;display:flex;flex-direction:column;min-height:0;overflow:hidden}.chart-pane{flex:1;min-width:150px;display:flex;flex-direction:column;min-height:0;overflow:hidden}.pane-scroll{overflow:auto;flex:1;min-height:0;scrollbar-width:thin;scrollbar-color:#cad6c4 #f1f4ed}.pane-title{height:20px;min-height:20px;padding:2px 8px;background:#edf3e7;color:#486840;font-size:11px;font-weight:600;border-bottom:1px solid #d6e1ce;display:flex;align-items:center;gap:9px}.pane-title span{font-weight:400;color:#829477;font-size:10px}.pane-divider{width:6px;min-width:6px;padding:0;background:#d9e4d2;cursor:col-resize;touch-action:none;border-left:1px solid #bccfb1;border-right:1px solid #bccfb1}.pane-divider:hover,.pane-divider:focus{background:#8dac79;outline:none}#schedule-table td.level-cell,#schedule-table th.level-header,#schedule-table th.levels-heading{position:relative!important;left:auto!important}#schedule-table th.level-header{position:sticky!important;top:22px!important}#schedule-table th.levels-heading{position:sticky!important;top:0!important}#schedule-table td.schedule-field,#schedule-table th.start,#schedule-table th.end,#schedule-table th.owner{position:relative;left:auto;box-shadow:none}#schedule-table th.start,#schedule-table th.end,#schedule-table th.owner,#schedule-table th.extra-field{position:sticky;top:0}#schedule-table .owner{border-right:1px solid #e4e9df}#schedule-table .progress{width:86px;min-width:86px;max-width:86px;border-right:2px solid #b5cba7}#gantt-table th.timeline{height:48px;padding:0}#gantt-table .timeline-header{height:47px}#chart-body tr{height:var(--row-h)}#sheet-body tr.completed-row td{color:#87929a}#chart-body tr.completed-row .bar,#chart-body tr.completed-row .actual-bar,#chart-body tr.completed-row .progress-fill{background:#8b9aa6}#chart-body tr.completed-row .bar.group:before{border-color:#8b9aa6}#chart-body tr.completed-row .bar-label{color:#8b969e}.legend-complete{background:#8b9aa6}#sheet-body tr.completed-row td.invalid{background:#fff2ec}.schedule-field.progress input{text-align:right;padding-right:8px}

/* Excel-style column letters, explicit widths, and isolated hit areas. */
#schedule-table{table-layout:fixed}#schedule-table th,#schedule-table td{width:auto!important;min-width:0!important;max-width:none!important;box-sizing:border-box}#schedule-table td:not(.level-cell){overflow:hidden}#schedule-table td.wbs,#schedule-table th.wbs{left:37px}#schedule-table .column-letters th{position:sticky!important;top:0!important;height:22px!important;padding:0;text-align:center;z-index:11;background:#eaf0e5;font-size:11px;color:#5b7352;border-bottom:1px solid #ccd9c4}#schedule-table .column-names th{position:sticky!important;top:22px!important;height:26px!important;padding:0 3px;text-align:center;z-index:10;background:#f3f6ef;font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#schedule-table th.row-number{height:48px!important;z-index:14!important}#schedule-table .column-letters th.wbs,#schedule-table .column-names th.wbs{z-index:13}#schedule-table td.row-number,#schedule-table td.wbs{z-index:8}#sheet-body .level-cell-inner{width:100%;max-width:100%}#sheet-body .level-cell input,#sheet-body .level-cell input[data-cell-idle]:focus{width:100%;min-width:0;padding-left:3px}#sheet-body .level-cell.occupied input[data-cell-idle]:focus{padding-left:17px}#sheet-body .level-cell.is-editing input{width:var(--edit-width);max-width:none;padding-left:3px;z-index:5}#sheet-body .schedule-field{position:relative;z-index:1}#sheet-body .schedule-field input{position:relative;width:100%;pointer-events:auto}#sheet-body td.cell-current{z-index:9!important}#sheet-body td.is-editing{z-index:9!important}#sheet-body .note input{text-align:left}.column-resizer{position:absolute;right:-1px;top:0;bottom:0;width:8px;z-index:20;cursor:col-resize;touch-action:none;user-select:none}.column-resizer:hover,.column-resizer:focus{background:#7a9c6770;outline:0}.resizing-columns,.resizing-columns *{cursor:col-resize!important;user-select:none!important}

/* Group heading, uniform selection, and pinned Gantt dates. */
#schedule-table .column-groups th{position:sticky!important;top:0!important;height:18px!important;padding:0 6px;background:#e5eddf;color:#45613c;font-size:10px;z-index:12;border-bottom:1px solid #cbd9c1}#schedule-table .column-groups .task-group-heading{text-align:center;font-weight:600}#schedule-table .column-groups .schedule-group-heading{text-align:left}#schedule-table .column-letters th{top:18px!important}#schedule-table .column-names th{top:40px!important}#schedule-table .column-groups th.row-number{height:66px!important;z-index:16!important}#schedule-table .column-groups th.wbs{z-index:15!important}#gantt-table #chart-head th.timeline{position:sticky!important;top:0!important;z-index:14!important;height:66px!important;background:#f3f6ef}#gantt-table #chart-head .timeline-header,#gantt-table #chart-head .time-segment{height:65px}#schedule-table #sheet-body td.cell-current{position:relative!important;box-shadow:inset 0 0 0 2px #417f38!important;background:#e8f4df!important}#schedule-table #sheet-body td.cell-current::after{content:'';position:absolute;inset:0;border:2px solid #417f38;pointer-events:none;z-index:30}#schedule-table #sheet-body td.is-editing{background:#f8fcf3!important}

/* Letters first; field names span the two rows beside the task hierarchy. */
#schedule-table .column-letters th{top:0!important}
#schedule-table .column-letters th.row-number{height:66px!important;z-index:16!important}
#schedule-table .column-groups th{top:22px!important}
#schedule-table .column-groups th.merged-heading{height:44px!important;vertical-align:middle;text-align:center;background:#f3f6ef}
#schedule-table .column-groups th.wbs{height:44px!important}
#schedule-table .column-names th{top:40px!important}

/* Daily weekend columns: behind tasks, including completed rows. */
#gantt-table .time-segment.saturday{background:#e5eefb;color:#355f9b}
#gantt-table .time-segment.sunday{background:#f9e5e1;color:#a7473c}
#gantt-table .time-segment.weekend small{color:inherit;font-weight:600}
.weekend-column{position:absolute;top:0;bottom:0;pointer-events:none;z-index:0;background:#edf3fb}
.weekend-column.sunday{background:#faeeeb}
#chart-body tr.completed-row .weekend-column{opacity:.8}
.calendar-options{max-width:920px;gap:12px!important;align-items:stretch}
.calendar-options .calendar-pending{flex-basis:100%;margin:0;padding:7px 9px;background:#fff6df;border:1px solid #e5d9b5;border-radius:3px;font-size:11px;color:#77602e}
.calendar-options fieldset{flex:1;min-width:210px;margin:0;padding:10px 12px;border:1px solid #c5d3bd;border-radius:4px;font-size:12px}
.calendar-options legend{font-weight:600;padding:0 5px}
.calendar-options fieldset>label{display:flex;align-items:flex-start;gap:5px;margin:7px 0}
.calendar-options input{accent-color:#236956;margin:2px 0 0}
.calendar-options small{display:block;margin:0 0 8px 19px;font-size:10px;color:#74816c;line-height:1.5}
.week-start-options{display:flex;gap:12px;flex-wrap:wrap;margin-top:7px}.week-start-options label{display:flex;gap:4px}

/* Exactly one outline: the cell before editing, the expanding input during editing. */
#schedule-table #sheet-body td.cell-current{box-shadow:none!important}
#schedule-table #sheet-body td input:focus{outline:none}
#schedule-table #sheet-body td.is-editing{overflow:visible!important;box-shadow:none!important;z-index:9!important}
#schedule-table #sheet-body td.is-editing::after{display:none!important}
#schedule-table #sheet-body td.is-editing input{width:var(--editor-width,100%);min-width:0;max-width:none;outline:2px solid #417f38;outline-offset:-2px;background:#f8fcf3;z-index:5;text-align:left}
#schedule-table #sheet-body td.schedule-field.is-editing input{position:absolute;left:0;top:0}

/* Compact numeric columns and Excel-style overflow without changing stored input. */
#schedule-table #sheet-body .planned input,#schedule-table #sheet-body .progress input{padding-left:4px;padding-right:4px;text-align:right}
#schedule-table #sheet-body td.is-editing.planned input,#schedule-table #sheet-body td.is-editing.progress input{text-align:right}
.cell-overflow{display:none;position:absolute;inset:0;align-items:center;padding:0 7px;white-space:nowrap;overflow:hidden;pointer-events:none;font-size:var(--grid-font)}
#schedule-table #sheet-body .cell-hashed:not(.is-editing) input{color:transparent!important}
.cell-hashed:not(.is-editing) .cell-overflow{display:flex}
.planned .cell-overflow,.progress .cell-overflow{justify-content:flex-end;padding:0 4px}
.date-cell-menu{position:fixed;z-index:1000;min-width:145px;padding:4px;background:#fff;border:1px solid #b9c9b2;box-shadow:0 4px 14px #25372f30;border-radius:5px;font-size:13px}
.date-cell-menu[hidden]{display:none}.date-cell-menu button{display:block;padding:8px 12px;width:100%;text-align:left;border-radius:3px}.date-cell-menu button:hover:enabled,.date-cell-menu button:focus-visible{background:#e8f3e0}
.date-picker{width:330px;max-width:calc(100vw - 24px);padding:0;border:1px solid #bdcbb6;border-radius:9px;box-shadow:0 14px 50px #142b3540;color:#25372f;background:white}
.date-picker::backdrop{background:#1c302333}.date-picker-title{display:flex;align-items:center;border-bottom:1px solid #e2e7e2;padding:8px 12px;background:#f3f7ef}.date-picker-title h2{margin:0;flex:1;font-size:13px}.date-picker-title button{font-size:22px;line-height:24px;padding:0 4px}
.date-picker-nav{display:flex;align-items:center;padding:14px 14px 8px;gap:4px}.date-picker-nav strong{flex:1;font-size:17px}.date-picker-nav button{font-size:24px;width:32px;height:32px;border-radius:4px}.date-picker-nav button:hover:enabled{background:#edf4e6}
.date-picker-weekdays,.date-picker-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;padding:0 12px}.date-picker-weekdays{font-size:12px;text-align:center;padding-bottom:6px;color:#6b7d65}.date-picker-grid button{height:32px;font-size:13px;border:1px solid transparent;border-radius:4px;text-align:center}
.date-picker-grid button:nth-child(7n+1),.date-picker-weekdays span:first-child{color:#b1473c}.date-picker-grid button:nth-child(7n),.date-picker-weekdays span:last-child{color:#3b68ae}.date-picker-grid button.other-month{opacity:.38}.date-picker-grid button:hover:enabled{background:#e8f4df;border-color:#86a87b}.date-picker-grid button.picker-selected{border-color:#5a8550;background:#edf5e7}.date-picker-grid button.picker-today{background:#ba483b;color:white;font-weight:700;opacity:1}
.date-picker-footer{display:flex;justify-content:flex-end;padding:10px 14px}.date-picker-footer button{padding:5px 10px;border-radius:4px;background:#edf4e6;font-size:12px}

/* Fixed screen-space stroke: equivalent visibility to a 1px line at 150% zoom. */
#chart-scroll{position:relative}
.today-marker{position:absolute;width:var(--today-line-width,.75px);transform:translateX(calc(var(--today-line-width,.75px) / -2));pointer-events:none;z-index:6;background:var(--today-line-color,#df6963);opacity:var(--today-line-opacity,.6)}
.today-marker[hidden]{display:none}

#schedule-table td.row-number,#schedule-table th.row-number{width:var(--row-number-width,24.7px);min-width:var(--row-number-width,24.7px);max-width:var(--row-number-width,24.7px)}
#schedule-table td.wbs,#schedule-table th.wbs{left:var(--row-number-width,24.7px)}

/* Text may cross empty cells, but stops before the first occupied cell. */
#schedule-table #sheet-body td.text-spill-source{overflow:visible;z-index:3}
#sheet-body .level-name{width:max-content;white-space:pre;overflow:hidden;text-overflow:clip}
.text-spill{position:absolute;left:7px;top:0;width:max-content;white-space:pre;overflow:hidden;text-overflow:clip;pointer-events:none;font-size:var(--grid-font);line-height:calc(var(--row-h) - 1px);z-index:2}
#sheet-body td.note:not(.is-editing) input,#sheet-body td.owner:not(.is-editing) input{color:transparent}
#sheet-body td.is-editing .text-spill{display:none}

#schedule-table #sheet-body td.cell-current.spill-through:not(.is-editing):not(.invalid){background:transparent!important}
#schedule-table #sheet-body td.spill-through input[data-cell-idle]{background:transparent}

/* Compare the visible plan and actual percentages; keep validation errors distinct. */
#schedule-table #sheet-body td.progress-behind:not(.invalid){background:#fff0db;color:#98531c}
#schedule-table #sheet-body td.progress-on-track:not(.invalid){background:#e3f1e7;color:#236647}
#schedule-table #sheet-body td.cell-current.progress-behind:not(.is-editing):not(.invalid){background:#fff0db!important}
#schedule-table #sheet-body td.cell-current.progress-on-track:not(.is-editing):not(.invalid){background:#e3f1e7!important}
#schedule-table #sheet-body td.progress-behind input[data-cell-idle],#schedule-table #sheet-body td.progress-on-track input[data-cell-idle]{background:transparent}

/* Keep task text at the cell's normal text inset; disclosure sits before it. */
#sheet-body .level-cell .level-name{left:3px}
#sheet-body .level-cell.occupied input[data-cell-idle]:focus{padding-left:3px}
#sheet-body .pre-name-toggle{position:absolute;left:auto;right:0;top:0;width:14px;height:calc(var(--row-h) - 1px);padding:0;z-index:3;background:inherit;line-height:1;text-align:center}
#sheet-body td.wbs:has(.pre-name-toggle){padding-right:14px}

#dependency-picker{max-width:460px;width:calc(100vw - 32px);border:1px solid #ccd8ca;border-radius:8px;padding:24px;color:var(--ink)}
#dependency-picker h2{font-size:18px;margin-top:0}#dependency-picker p{font-size:12px;line-height:1.6}#dependency-picker label{display:block;font-size:12px;margin:12px 0}#dependency-picker select,#dependency-picker input[type=number]{display:block;width:100%;padding:7px;border:1px solid #cbd7c7;margin-top:5px;background:white}#dependency-picker input[type=checkbox]{vertical-align:middle}#dependency-error{color:#a54e30}#chart-scroll{position:relative}#dependency-lines{position:absolute;left:0;top:0;z-index:4;pointer-events:none;overflow:hidden}#dependency-lines>path{stroke:#687b92;stroke-width:1.25;fill:none}
#sheet-body .schedule-field input[title^="="]{color:#3d6289}

/* Narrow numeric columns retain enough room for 100%, including bold groups. */
#schedule-table #sheet-body .planned input,#schedule-table #sheet-body .progress input{padding-left:1px;padding-right:2px}
#sheet-body.has-cell-range td.cell-current:not(.is-editing)::after{display:none!important}
#sheet-body td.range-selected{position:relative!important}
#sheet-body td.range-selected::before{content:'';position:absolute;inset:0;background:#3e875024;border:0 solid #417f38;pointer-events:none;z-index:25}
#sheet-body td.range-selected.range-top::before{border-top-width:2px}#sheet-body td.range-selected.range-bottom::before{border-bottom-width:2px}#sheet-body td.range-selected.range-left::before{border-left-width:2px}#sheet-body td.range-selected.range-right::before{border-right-width:2px}
#sheet-body input[data-cell-idle]{cursor:cell;user-select:none}.selecting-cells,.selecting-cells *{user-select:none!important;cursor:cell!important}

.today-line-settings{align-items:center;flex-wrap:wrap}.today-line-settings label{display:flex;align-items:center;gap:5px;white-space:nowrap}.today-line-settings input[type=number]{width:60px;padding:3px 4px;border:1px solid #cbd6c5;background:white;border-radius:3px}.today-line-settings input[type=range]{width:100px;accent-color:var(--green)}.today-line-settings output{min-width:32px;text-align:right;font-variant-numeric:tabular-nums}.today-line-colors{display:grid;grid-template-columns:repeat(7,20px);gap:8px;padding:5px}.today-line-colors button{width:20px;height:20px;min-width:20px;padding:0!important;background:var(--swatch)!important;border:2px solid transparent;border-radius:50%}.today-line-colors button[aria-pressed=true]{outline:2px solid #355f46;outline-offset:2px;box-shadow:inset 0 0 0 2px white}.sheet-footer i.legend-today{border:0;width:var(--today-line-width,.75px)!important;height:10px!important;background:var(--today-line-color,#df6963);opacity:var(--today-line-opacity,.6)}

/* Consume display padding before replacing a numeric value with hashes. */
#schedule-table #sheet-body td.start input[data-cell-idle],#schedule-table #sheet-body td.end input[data-cell-idle],#schedule-table #sheet-body td.actualStart input[data-cell-idle],#schedule-table #sheet-body td.actualEnd input[data-cell-idle],#schedule-table #sheet-body td.planned input[data-cell-idle],#schedule-table #sheet-body td.progress input[data-cell-idle]{padding-left:var(--fit-left,0px);padding-right:var(--fit-right,1px)}
#sheet-body .cell-overflow{padding-left:var(--fit-left,0px);padding-right:var(--fit-right,1px)}
/* Editing reserves space after the text instead of moving numbers into the extension. */
#schedule-table #sheet-body td.is-editing.progress input{padding-left:3px;padding-right:3px;text-align:left}

.shortcut-tooltip{position:fixed;z-index:2000;max-width:min(340px,calc(100vw - 12px));padding:10px 12px;border:1px solid #b7c9b3;border-radius:6px;background:#fcfefa;color:#314c36;box-shadow:0 4px 16px #203d2824;pointer-events:none;font-size:12px;line-height:1.6}.shortcut-tip-heading{display:flex;align-items:center;gap:14px;justify-content:space-between}.shortcut-tooltip kbd{font:600 11px 'Segoe UI',sans-serif;white-space:nowrap;background:#eaf0e5;border:1px solid #cedac6;border-radius:3px;padding:2px 5px}.shortcut-tooltip p{margin:7px 0 0}.shortcut-tooltip .shortcut-tip-example{font-size:11px;color:#6a7c64}

/* Disclosure controls keep a fixed screen-space box at every sheet zoom. */
#sheet-body .pre-name-toggle{width:calc(16px / var(--sheet-zoom,1));height:calc(16px / var(--sheet-zoom,1));min-width:0;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center}
#sheet-body .pre-name-toggle svg{width:calc(12px / var(--sheet-zoom,1));height:calc(12px / var(--sheet-zoom,1));flex:none;overflow:visible}
#sheet-body .pre-name-toggle path{fill:none;stroke:#456549;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
#sheet-body .pre-name-toggle svg{transition:transform .12s}
#sheet-body .pre-name-toggle[aria-expanded=true] svg{transform:rotate(90deg)}
#sheet-body .pre-name-toggle:hover{background:#e3efdc;border-radius:3px}
#hierarchy-guides{position:absolute;left:0;top:0;z-index:12;pointer-events:none;overflow:hidden}
#hierarchy-guides path{fill:none;stroke:#87967f;stroke-width:.75;stroke-linecap:butt;stroke-linejoin:miter}
@media(prefers-reduced-motion:reduce){#sheet-body .pre-name-toggle svg{transition:none}}
#sheet-body td.wbs:has(.pre-name-toggle){padding-right:calc(16px / var(--sheet-zoom,1))}
#sheet-body td.cut-cell{outline:1px dashed #427c3c;outline-offset:-2px}
.task-bar{cursor:grab;touch-action:none;z-index:2;user-select:none}
.task-bar.bar-selected{outline:2px solid #275b80;outline-offset:2px}
.task-bar:focus-visible{outline:2px solid #275b80;outline-offset:2px}
.bar-edge{position:absolute;top:calc(-3px / var(--sheet-zoom,1));bottom:calc(-3px / var(--sheet-zoom,1));width:min(30%,calc(6px / var(--sheet-zoom,1)));cursor:ew-resize;z-index:4}
.start-edge{left:0}.end-edge{right:0}
.bar-selected .bar-edge{background:#225c813b;border:1px solid #356a8b}
.bar:after,.progress-fill,.bar-label{pointer-events:none}
.bar-ghost{opacity:.45;background:#377c9c!important;outline:2px dashed #225b7d;outline-offset:1px;pointer-events:none;z-index:5}
.bar-drag-badge{position:fixed;z-index:2100;pointer-events:none;background:#f5fafdeb;border:1px solid #527e98;color:#224f6b;border-radius:4px;padding:5px 8px;box-shadow:0 3px 12px #23485b22;font-size:12px;white-space:nowrap}
.bar-marquee{position:absolute;z-index:8;pointer-events:none;border:1px solid #2d7398;background:#327ba329}
.dragging-bars,.dragging-bars *{user-select:none!important}
.dragging-bars .task-bar{cursor:grabbing}

/* Workbook tabs stay outside the scaled Schedule/Gantt pair. */
.sheet-tab-bar{display:flex;align-items:stretch;gap:3px;min-height:34px;height:34px;background:#edf2e9;border:1px solid #dce5d6;border-top:0;padding:0 5px;flex-shrink:0}
.sheet-tabs{display:flex;align-items:stretch;gap:2px;min-width:0;overflow-x:auto;scrollbar-width:thin}
.sheet-tabs [role=tab]{flex:none;min-width:80px;max-width:240px;padding:5px 15px;border-right:1px solid #d9e2d3;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:#edf2e9;color:#64795c;line-height:20px}
.sheet-tabs [role=tab][aria-selected=true]{background:white;color:#245c42;font-weight:600;box-shadow:inset 0 -3px #3c805d}
.sheet-tabs [role=tab]:hover{background:#f8fbf6}.sheet-tabs [role=tab]:focus-visible{outline-offset:-3px}
.sheet-draft-dot{margin-left:7px;color:#bd8743}
#add-sheet{flex:none;align-self:center;width:28px;height:28px;padding:0;font-size:22px;line-height:26px;border-radius:50%;color:#53794d}#add-sheet:hover{background:#dbe9d4}
.sheet-tab-help{margin-left:auto;padding:9px 8px;white-space:nowrap;font-size:10px;color:#8a9981}
#new-sheet-dialog,#rename-sheet-dialog{width:440px;max-width:calc(100vw - 32px);border-radius:9px;padding:25px}
#new-sheet-dialog h2,#rename-sheet-dialog h2{font-size:20px;margin:0 0 10px}#new-sheet-dialog h3{font-size:13px;margin:22px 0 10px}
#new-sheet-dialog label,#rename-sheet-dialog label{display:block;font-size:12px;margin:16px 0}
#new-sheet-dialog label input,#rename-sheet-dialog label input{display:block;margin-top:7px;width:100%;border:1px solid #bccfb3;background:white;padding:8px 10px;border-radius:4px}
.sheet-starter-choices{display:grid;gap:9px}.sheet-starter-choices button{display:flex;flex-direction:column;align-items:flex-start;padding:13px 15px;gap:6px;text-align:left;border:1px solid #c7d7bf;border-radius:6px;background:#f7faf4}.sheet-starter-choices button:hover{background:#eaf3e2;border-color:#739965}.sheet-starter-choices strong{font-size:13px;color:#315d3d}.sheet-starter-choices span{font-size:11px;color:#7c8c70}
#new-sheet-error{color:#a34e2f}.sheet-dialog-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:20px}
@media(max-width:800px){.sheet-tab-help{display:none}.sheet-tabs [role=tab]{min-width:65px;padding:5px 10px}}
.sheet-tabs{overflow-y:hidden;scrollbar-width:none}.sheet-tabs::-webkit-scrollbar{display:none}
.sheet-tab-bar .sheet-tabs{height:100%;min-height:0;padding:0;border:0}
.sheet-tab-bar .sheet-tabs [role=tab]{height:100%;margin:0}

/* A shared 66px header: year / month-week / detail; month merges the last two tiers. */
#gantt-table #chart-head .axis-header{height:65px;display:block;background:#f3f6ef;font-weight:400}
.axis-group{position:absolute;text-align:left;border-right:1px solid #d7e1d0;border-bottom:1px solid #dfe7d9;color:#5d7652;overflow:clip;white-space:nowrap}
.axis-group>span{position:sticky;left:5px;display:inline-block;max-width:100%;padding:0 5px;overflow:hidden;text-overflow:ellipsis;vertical-align:top}
.axis-year{top:0;height:22px;line-height:21px;background:#edf3e7;font-size:10px;font-weight:600;color:#526d49}
.axis-period{top:22px;height:18px;line-height:17px;background:#f3f7ee;font-size:10px}
#gantt-table #chart-head .axis-leaf{top:40px;height:25px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:0;border-right:1px solid #dfe6d9;line-height:24px;overflow:hidden;font-size:10px}
.axis-leaf .axis-date,.axis-leaf .axis-weekday{display:block;flex:none;font-size:10px;line-height:24px;max-width:100%;overflow:hidden;text-overflow:clip}
.axis-leaf.two-lines .axis-date{font-size:10px;line-height:13px}.axis-leaf.two-lines .axis-weekday{font-size:9px;line-height:11px}
#gantt-table #chart-head .axis-month .axis-leaf{top:22px;height:43px;font-size:12px;line-height:42px;background:#f3f7ee}
.axis-month .axis-leaf .axis-date{font-size:12px;line-height:42px}
.axis-week .axis-leaf .axis-date{font-size:9px}
.time-header-settings small{font-size:10px;color:#7e8e75;align-self:center}
/* Holiday calendars are a workbook-level view outside all sheet scales. */
.calendar-tab-wrap{display:flex;flex:none;background:#f6df7e;border-radius:4px 4px 0 0;overflow:hidden;border:1px solid #d7b951;border-bottom:0;align-items:stretch}
#calendar-tab{display:flex;align-items:center;gap:7px;padding:0 11px;color:#67500a;font-size:12px;white-space:nowrap}#calendar-tab[aria-selected=true]{background:#fff0a8;box-shadow:inset 0 -3px #b18b17;font-weight:600}
#calendar-tab>span:first-child{font-size:20px;line-height:1}.calendar-tab-label{max-width:70px;overflow:hidden;transition:max-width .18s}
#calendar-tab-toggle{width:16px;padding:0;border-left:1px solid #d7b951;color:#7e630e;font-size:17px;background:#edce5b}#calendar-tab-toggle:hover{background:#e2bd40}.is-collapsed #calendar-tab{padding:0 6px;gap:0}.is-collapsed .calendar-tab-label{max-width:0}
.calendar-view{flex:1;min-height:0;background:#fff;border:1px solid #dedac6;border-radius:6px;display:flex;flex-direction:column;overflow:hidden}
.calendar-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 24px;background:#fffcef;border-bottom:1px solid #e9dfb8}.calendar-heading h1{font-size:23px;margin:5px 0 6px;font-weight:600}.calendar-heading p{font-size:12px;margin:0;color:#8c8161}.calendar-heading .eyebrow{color:#aa8c2e;font-size:9px}
.calendar-scope-tabs{display:flex;overflow:auto;flex-shrink:0;border-bottom:1px solid #e7e3d3;padding:0 20px;gap:3px}.calendar-scope-tabs button{font-size:12px;flex:none;padding:12px 15px;color:#8c8874;max-width:240px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.calendar-scope-tabs button[aria-selected=true]{color:#6f5711;border-bottom:3px solid #d1ad36;background:#fffcf1;font-weight:600}
.holiday-editor{padding:16px 24px;display:flex;flex:1;min-height:0;flex-direction:column}.holiday-editor h2{font-size:15px;margin:0 0 7px}.holiday-editor>p{font-size:11px;color:#8a8574;margin:0 0 12px;line-height:1.5}.calendar-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.calendar-actions .secondary,.calendar-actions .primary{padding:6px 10px;font-size:11px}#calendar-summary{font-size:10px;color:#9b937c;margin-left:auto}#calendar-message{min-height:20px;margin:8px 0;color:#95621e;font-size:11px;line-height:1.5}
.holiday-layout{display:grid;grid-template-columns:minmax(300px,1fr) 300px;gap:28px;min-height:0;flex:1;overflow:hidden}.holiday-table-scroll{overflow:auto;border:1px solid #e5e4d8;min-height:100px}.holiday-table{width:100%;table-layout:fixed;font-size:12px}.holiday-table th{position:sticky;top:0;height:29px;font-size:11px;background:#f8f7ed;z-index:1}.holiday-table th:first-child{width:38px}.holiday-table th:nth-child(2){width:130px}.holiday-table th:last-child{width:36px}.holiday-table td{height:30px;background:white;color:#6e715f}.holiday-table td:first-child{text-align:center;font-size:10px;color:#aaa58d}.holiday-table input{width:100%;border:0;background:transparent;padding:6px 8px;outline:none;font-size:12px;color:#5d6252}.holiday-table input:focus{outline:2px solid #b89b3b;outline-offset:-2px}.holiday-table td button{width:100%;color:#a59b7c;font-size:17px}.holiday-table td button:hover{color:#b05038;background:#fff0e8}#holiday-empty{font-size:12px;color:#a39878;padding:24px;line-height:1.7}
.holiday-import{overflow:auto;font-size:11px;color:#8d8875;line-height:1.7}.holiday-import h3{font-size:12px;color:#6d684f;margin:0 0 8px}.holiday-import h3:not(:first-child){margin-top:25px}.holiday-import p{margin:8px 0 14px}.holiday-import textarea{width:100%;height:105px;resize:vertical;border:1px solid #dcd8c3;padding:9px;font-size:11px;line-height:1.6;background:#fffef8;border-radius:4px}.holiday-import .secondary{font-size:10px;padding:6px 8px}.holiday-import a{color:#8a7022;text-decoration:underline}.calendar-view~.sheet-tab-bar{margin-top:0}
@media(max-width:850px){.holiday-layout{grid-template-columns:1fr;overflow:auto}.holiday-table-scroll{max-height:50vh;min-height:200px}.holiday-import{overflow:visible}.calendar-heading,.holiday-editor{padding:12px}.calendar-heading h1{font-size:18px}#calendar-summary{width:100%;margin:3px 0}}
@media(prefers-reduced-motion:reduce){.calendar-tab-label{transition:none}}
#dependency-lines{z-index:6}#dependency-lines .edge-line{stroke:#414141;stroke-width:var(--dependency-line-width,2px);stroke-linecap:butt;stroke-linejoin:miter;fill:none;pointer-events:none}#dependency-lines .edge-hit{stroke:transparent;stroke-width:10;fill:none;pointer-events:stroke;cursor:pointer}#dependency-lines .edge-selected .edge-line{stroke:#b4642c;stroke-width:var(--dependency-line-width,2px)}#dependency-lines .dependency-edge:hover .edge-line{stroke:#a86c38;stroke-width:var(--dependency-line-width,2px)}#dependency-lines .dependency-edge:focus-visible{outline:none}#dependency-lines .dependency-edge:focus-visible .edge-line{stroke:#b4642c;stroke-width:var(--dependency-line-width,2px)}
#dependency-lines .dependency-port{fill:#fff;stroke:#3a7b61;stroke-width:1.5;pointer-events:all;cursor:crosshair}#dependency-lines .dependency-port:hover,#dependency-lines .port-source{fill:#3a7b61;stroke:#235d46;stroke-width:2}#dependency-lines .connection-preview{fill:none;stroke:#3a7b61;stroke-width:1.5;stroke-dasharray:4 3;pointer-events:none}
#graph-link-hint{font-size:11px;padding:7px 12px;background:#eaf5eb;color:#326649;border-bottom:1px solid #c5dcc7}#graph-link-dialog{width:440px}#graph-link-dialog h2{font-size:19px}#graph-link-dialog p{font-size:12px;line-height:1.8}

.schedule-pane{position:relative}

#dependency-lines .port-target{fill:#f5aa45;stroke:#9b5c19;stroke-width:2}
#chart-body .bar[data-link-id]{touch-action:none}
.task-bar:hover .bar-edge{background:#225c813b;border:1px solid #356a8b}

.gantt-wide .schedule-pane .pane-title span{display:none}

.action-menu{position:fixed;z-index:1000;min-width:148px;padding:4px;background:#fff;border:1px solid #cbd6c6;border-radius:5px;box-shadow:0 5px 18px #20331d26}.action-menu[hidden]{display:none}.action-menu button{display:block;width:100%;text-align:left;padding:8px 12px;font-size:12px;color:#364b32;border-radius:3px}.action-menu button:hover,.action-menu button:focus{background:#edf3e7;outline:1px solid #86a377}.sheet-name-editor{border:1px solid #64885b!important;border-radius:3px;margin:3px 4px;padding:5px 8px!important;min-width:100px;color:#243e27;background:#fff!important;font:inherit}.sheet-name-editor:focus{outline:1px solid #64885b}#restore-sheet{font-size:11px;color:#57714d;white-space:nowrap;padding:4px 10px}

#restore-sheet[hidden]{display:none}

/* Shared time-axis paint; no row × date-column DOM elements. */
#chart-body .timeline-content{background-image:none}
#sheet-body .virtual-spacer,#chart-body .virtual-spacer{height:0;pointer-events:none}
#sheet-body .virtual-spacer td,#chart-body .virtual-spacer td{padding:0;border:0;background:transparent;line-height:0;min-height:0}
#schedule-scroll,#chart-scroll{overflow-anchor:none}

/* Fractional zoom must not let a rounded physical border grow each table row.
   Paint horizontal rules without affecting layout; virtual spacers stay unpainted. */
#sheet-body tr:not(.virtual-spacer)>td,
#chart-body tr:not(.virtual-spacer)>td{
  border-bottom:0;
  box-shadow:inset 0 -1px #e9eee4;
}

/* Visual sequence warnings never constrain task dates. */
.dependency-edge.edge-contradiction .edge-line{stroke:url(#dependency-warning-gradient)}
.connection-warning-icon{cursor:help;pointer-events:all}
.connection-warning-icon circle{fill:#fff3f6;stroke:#d92d4b;stroke-width:1.4}
.connection-warning-icon text{fill:#be2945;font-size:12px;font-weight:800;pointer-events:none}
.connection-warning-tooltip{position:fixed;z-index:2100;width:310px;padding:12px;border:1px solid #eab0c0;border-radius:6px;background:#fffafb;color:#54333e;box-shadow:0 5px 20px #34152122;font-size:12px;line-height:1.5;pointer-events:none}
.connection-warning-tooltip svg{width:100%;height:95px;margin-top:8px}
.connection-warning-tooltip p{margin:6px 0}
.connection-warning-tooltip small,.warning-task-names{color:#876471}
.bar-ghost.invalid{background:#db6c88!important;outline:1px solid #bd355b}
#dependency-lines .dependency-edge.edge-contradiction .edge-line,
#dependency-lines .dependency-edge.edge-contradiction:hover .edge-line,
#dependency-lines .dependency-edge.edge-contradiction:focus-visible .edge-line{
  stroke:url(#dependency-warning-gradient);
}

/* Row hover spans Schedule and Gantt without obscuring selection/status. */
:root{--row-hover:rgba(67,110,91,.10)}
#sheet-body tr.row-hover>td{background-image:linear-gradient(var(--row-hover),var(--row-hover))}
#chart-body tr.row-hover .timeline-content{box-shadow:inset 0 0 0 100vmax var(--row-hover)}

/* Hide fine grid only: calendar boundaries, weekends and row hover remain. */
.grid-hidden #chart-body tr:not(.virtual-spacer)>td{box-shadow:none}

.bar-context-popup{position:fixed;z-index:1200;max-width:min(620px,calc(100vw - 12px));max-height:min(70vh,400px);overflow:hidden;pointer-events:none;background:var(--theme-surface,#fff);color:var(--theme-ink,#25372f);border:1px solid var(--theme-line,#b5c9aa);border-radius:5px;box-shadow:0 4px 16px #0003;padding:8px 12px;font-size:12px;line-height:1.65;white-space:pre-wrap;overflow-wrap:anywhere}
.bar-context-popup .context-current{font-weight:700;color:var(--theme-accent,#236956)}

.formula-bar{flex:none;min-height:36px;border-bottom:1px solid var(--theme-line,#cdd9c4);background:var(--theme-surface,#fff);color:var(--theme-ink,#25372f)}
.formula-content{display:flex;align-items:flex-start;gap:6px;padding:3px 6px 0}
.formula-content output{flex:0 0 170px;max-width:30%;min-height:28px;padding:5px 7px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid var(--theme-line,#d5dece);border-radius:3px}
.formula-mark{font-size:18px;padding-top:1px;color:var(--theme-muted,#718368)}
#workspace .formula-content textarea{flex:1;height:var(--formula-height,32px);min-height:30px;max-height:320px;resize:none;line-height:22px;padding:3px 7px;border:1px solid var(--theme-line,#d5dece);border-radius:3px;color:var(--theme-ink,#25372f);background:var(--theme-surface,#fff);font-family:inherit;font-size:13px;white-space:pre-wrap}
.formula-content textarea:focus{outline:2px solid var(--theme-accent,#417f38);outline-offset:-2px}
.formula-resizer{height:5px;cursor:row-resize;touch-action:none;position:relative}
.formula-resizer::after{content:'';position:absolute;width:40px;height:2px;left:calc(50% - 20px);top:2px;background:var(--theme-line,#c4d2bb)}
.formula-resizer:hover,.formula-resizer:focus{background:var(--theme-selected,#e0ecd6);outline:none}

/* Gantt status belongs to bar shape/color, never to whole-row background. */
#workspace #gantt-table #chart-body tr:not(.virtual-spacer)>td.timeline{background-color:var(--theme-surface,#fff)}
/* Completed sheet text stays quiet; active editors retain their editing ink. */
#workspace #schedule-table #sheet-body tr.completed-row>td,
#workspace #schedule-table #sheet-body tr.completed-row .level-name,
#workspace #schedule-table #sheet-body tr.completed-row .text-spill,
#workspace #schedule-table #sheet-body tr.completed-row input[data-cell-idle]:not([data-field^="level"]):not([data-field="note"]):not([data-field="owner"]){color:var(--theme-completeText)}
#workspace #schedule-table #sheet-body tr.completed-row>td.progress:not(.invalid){color:var(--theme-completeText)}

/* One visible-viewport overlay: both hover column and raw creation date range. */
.time-highlight{position:absolute;pointer-events:none;z-index:5;background:var(--row-hover,rgba(67,110,91,.10));border-inline:1px solid rgba(80,110,100,.10)}
.time-highlight.creating-period{background:var(--theme-hover,rgba(67,110,91,.13));border-inline-color:var(--theme-accent,#5c8464)}

/* Paint the time-axis once, in scroll-space. Per-row fractional zoom rasterization
   must not independently round the same vertical grid at every row boundary. */
#chart-scroll{background-color:var(--theme-surface,#fff)}
#workspace #gantt-table #chart-body tr:not(.virtual-spacer)>td.timeline{background-color:transparent;background-image:none;box-shadow:inset 0 calc(-1px / var(--sheet-zoom,1)) var(--axis-grid,#e8eee2)}
#workspace.grid-hidden #gantt-table #chart-body tr:not(.virtual-spacer)>td.timeline,
.grid-hidden #workspace #gantt-table #chart-body tr:not(.virtual-spacer)>td.timeline{box-shadow:none}
:root{--theme-completeText:#a0a6aa}

/* Product version stays compact beside the brand. */
.app-version{font-size:10px;white-space:nowrap;color:var(--muted);flex-shrink:0}
.app-header .app-brand{flex-shrink:0}


/* Local workbook capacity, independent of schedule/chart zoom. */
.storage-capacity{display:grid;grid-template-columns:minmax(108px,1fr) 52px;gap:2px 7px;min-width:180px;max-width:240px;text-align:left;font-size:9px;line-height:1.1;padding:2px 7px;border:1px solid var(--line);border-radius:5px;color:var(--green);background:var(--theme-surface,#fff)}
#storage-capacity-label{font-variant-numeric:tabular-nums}.capacity-track{grid-column:1;position:relative;height:6px;background:var(--line);border-radius:3px;overflow:visible}.capacity-track>span{display:block;height:100%;width:0;background:currentColor;border-radius:3px}.capacity-marker{position:absolute;top:-2px;height:10px;width:2px;background:var(--ink)}.capacity-five{left:50%}.capacity-eight{left:80%}.capacity-spark{grid-column:2;grid-row:1/3;width:52px;height:20px}#storage-monthly{grid-column:1/-1;font-size:9px;color:var(--muted)}.storage-capacity[data-level="warning"]{color:#a06b12}.storage-capacity[data-level="high"]{color:#b13d35}.storage-metrics-card{position:fixed;top:64px;right:16px;width:min(430px,calc(100vw - 24px));max-height:calc(100dvh - 90px);overflow:auto;z-index:600;padding:18px;border:1px solid var(--line);border-radius:8px;background:var(--theme-surface,#fff);color:var(--ink);box-shadow:0 10px 30px #0002;font-size:12px}.capacity-card-heading{display:flex;align-items:center;justify-content:space-between}.capacity-card-heading button{padding:5px}.capacity-parts{display:grid;grid-template-columns:1fr auto;gap:8px}.capacity-parts dd{margin:0;font-variant-numeric:tabular-nums}.storage-metrics-card p{line-height:1.6}.storage-metrics-card small{color:var(--muted)}
@media(max-width:800px){.storage-capacity{min-width:140px;font-size:9px}.storage-capacity .capacity-spark{width:38px}#storage-monthly{display:none}.storage-metrics-card{top:80px}}

/* Nonblocking data warnings differ from validation errors. */
.schedule-field.cell-warning { background: #fff4d6; box-shadow: inset 0 -2px #b77900; }
.bar.uncertain-bar { background: #f6d365; border: 1px dashed #a66f00; box-sizing: border-box; }
/* Undetermined-end badge sits beside the bar so dense rows don't shrink it. */
.uncertain-badge { position: absolute; top: calc(var(--row-h) / 2 - 7.5px); width: 15px; height: 15px; border-radius: 50%; background: #e8a317; color: #fff; font: 700 11px/15px 'Segoe UI', sans-serif; text-align: center; pointer-events: none; z-index: 2; }

#tab-lock-banner { position: sticky; top: 0; z-index: 10000; padding: 10px 16px; background: #fff4d6; color: #513b0c; display: flex; gap: 12px; align-items: center; }
#tab-lock-banner[hidden] { display: none; }

/* U1: menu bar + toolbar + settings panel + bottom view-size controls (replaces the ribbon). */
.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;max-width:none!important;overflow:hidden!important;clip:rect(0 0 0 0);white-space:nowrap}
.menu-bar{height:30px;min-height:30px;display:flex;align-items:center;gap:2px;padding:0 6px;border-bottom:1px solid var(--line);font-size:12px;background:#f8faf5;position:relative;z-index:30}
.menu-bar-title{color:#236956;font-size:11px;margin:0 8px 0 2px}
.menu-bar #task-count,.menu-bar #apply-state{font-size:11px;color:#6f7d68;margin-left:10px;white-space:nowrap}
.menu{position:relative;display:flex;align-items:center}
.menu-button{font-size:12px;padding:4px 10px;border-radius:4px;color:#2f4a36}
.menu-button:hover,.menu-button[aria-expanded=true]{background:#dfead8;color:#244d33}
.menu-panel{position:absolute;top:calc(100% + 2px);left:0;min-width:230px;max-height:calc(100dvh - 120px);overflow:auto;background:#fff;border:1px solid #cfdcc8;border-radius:7px;box-shadow:0 10px 24px #183d2526;padding:4px 0;z-index:45;font-size:12px;color:var(--ink)}
.menu-panel.menu-wide{min-width:290px}
.menu-panel.menu-up{top:auto;bottom:calc(100% + 4px)}
.menu-panel .menu-item{display:flex;align-items:center;gap:8px;width:100%;min-height:28px;padding:4px 14px 4px 28px;text-align:left;font-size:12px;border:0;border-radius:0;background:transparent;position:relative;cursor:pointer;white-space:nowrap}
.menu-panel .menu-item:hover:not(:disabled),.menu-panel .menu-item:focus-visible{background:#eef5ea;outline:none}
.menu-panel .menu-item:disabled{color:#a5ae9f;cursor:default}
.menu-panel .menu-item[aria-checked=true]::before{content:'✓';position:absolute;left:11px;color:#236956;font-weight:700}
.menu-panel kbd{margin-left:auto;padding-left:18px;font:inherit;font-size:11px;color:#86927f}
.menu-panel .menu-check{display:flex;align-items:center;gap:8px;min-height:26px;padding:3px 14px 3px 10px;cursor:pointer;white-space:nowrap}
.menu-panel .menu-check:hover{background:#eef5ea}
.menu-panel .menu-check input{margin:0 4px 0 0;accent-color:#236956}
.menu-panel .menu-group{display:flex;flex-direction:column;gap:4px;padding:5px 14px}
.menu-panel .menu-group b{font-size:11px;color:#5d7653}
.menu-panel .menu-group label{display:flex;align-items:center;gap:6px;min-height:24px;white-space:nowrap;cursor:pointer}
.menu-panel .menu-group small{font-size:10px;color:#7c8975}
.menu-panel .menu-head{padding:6px 14px 2px;font-size:10px;font-weight:700;color:#74816c;white-space:nowrap}
.menu-panel .menu-scope{color:#236956;font-size:11px}
.menu-panel .menu-note{margin:2px 14px 4px;font-size:10px;color:#7c8975;white-space:normal;max-width:300px}
.menu-panel .menu-sep{height:1px;background:#e6ece2;margin:4px 0}
.menu-panel .file-label{display:flex}
.tool-toggle{display:flex;align-items:center;gap:4px;padding:2px 6px;border-radius:3px;cursor:pointer}
.tool-toggle input{accent-color:#236956;margin:0}
.quick-toolbar .tool-menu-button{font-size:11px;padding:4px 7px}
.drive-status{font-size:10px;color:#8b9785;border:1px dashed #c9d4c2;border-radius:4px;padding:1px 7px;white-space:nowrap}
.header-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:5px;color:#2f6b45}
.header-icon:hover{background:#e3ede0}
.settings-dialog{position:fixed;inset:auto;top:76px;right:14px;left:auto;margin:0;width:min(600px,calc(100vw - 28px));max-height:calc(100dvh - 96px);overflow:auto;padding:0;border:1px solid #c9d7c1;border-radius:9px;box-shadow:0 18px 44px #183d2533;z-index:60;background:#fff;color:var(--ink)}
.settings-head{display:flex;align-items:flex-start;gap:12px;padding:12px 14px 10px;border-bottom:1px solid #e3ebdf}
.settings-head h2{margin:0;font-size:15px}.settings-head small{font-size:10px;color:#7c8975}
#settings-close{margin-left:auto;width:28px;height:28px;font-size:18px;border-radius:5px}#settings-close:hover{background:#eef5ea}
.settings-body{display:grid;grid-template-columns:120px minmax(0,1fr)}
.settings-nav{display:flex;flex-direction:column;gap:2px;padding:10px 6px;background:#f6f9f4;border-right:1px solid #e3ebdf}
.settings-nav button{text-align:left;padding:7px 10px;border-radius:5px;font-size:12px}
.settings-nav button[aria-selected=true]{background:#dfead8;color:#244d33;font-weight:700}
.settings-panes{padding:12px 14px;min-width:0}
.settings-panes section{display:flex;flex-direction:column;gap:14px}
.settings-panes .ribbon-group{align-items:center;gap:10px;flex-wrap:wrap}
.settings-panes .ribbon-group>b{flex-basis:100%;font-size:12px;color:#3f5f39}
.settings-panes .calendar-options{display:flex;flex-wrap:wrap;gap:12px}
.settings-note{margin:0;font-size:10px;color:#7c8975;line-height:1.6}
.settings-placeholder{padding:14px;border:1px dashed #c9d4c2;border-radius:6px;font-size:12px;color:#5f6f5a}.settings-placeholder p{margin:6px 0 0}
#calendar-tab{padding:0 10px}
.sheet-tab-bar .sheet-menu{align-self:stretch}
#sheet-menu-button{padding:0 8px;font-size:11px;color:#53794d;border-radius:0}
.sheet-tab-bar #visible-rows-info{align-self:center;font-size:10px;color:#8a9682;white-space:nowrap;margin-right:10px}
.view-size{display:flex;align-items:center;gap:4px;font-size:11px;color:#5f6f5a;white-space:nowrap}
.view-size label{display:flex;align-items:center;gap:3px}
.view-size>button{height:22px;padding:0 9px;border:1px solid #c9d6c2;border-radius:11px;background:#fff;font-size:11px}
.view-size>button[aria-pressed=true]{background:#2f6b45;border-color:#2f6b45;color:#fff}
.view-size label button{width:22px;height:22px;border:1px solid #c9d6c2;border-radius:4px;background:#fff;font-size:13px;line-height:1;padding:0}
.view-size label button:disabled{color:#b6beb1;cursor:default}
.view-size select{font-size:11px;border:1px solid #d6dfcf;background:white;border-radius:3px;padding:1px 2px}
.sheet-tab-bar #help{align-self:center;height:22px;margin:0 4px 0 8px;padding:0 9px;border:1px solid #c9d6c2;border-radius:4px;background:#fff;font-size:11px;white-space:nowrap}

/* Slim formula bar: one 24px line by default (was ~41px total), still drag-resizable. */
.formula-bar{min-height:0}
.formula-content{padding:2px 6px 0;align-items:center}
.formula-content output{min-height:0;height:24px;padding:3px 7px;line-height:16px}
#workspace .formula-content textarea{min-height:22px;line-height:18px;padding:2px 7px}
.formula-resizer{height:4px}
.formula-resizer::after{top:1px}

/* Long-press a sheet tab, then drag left/right to reorder. */
.sheet-tabs [role=tab].tab-dragging{position:relative;z-index:5;opacity:.9;box-shadow:0 4px 12px #183d2533;cursor:grabbing;transition:none}
.sheet-tabs [role=tab].tab-drop-before{box-shadow:inset 3px 0 #2f6b45}
.sheet-tabs [role=tab].tab-drop-after{box-shadow:inset -3px 0 #2f6b45}
body.sheet-tab-dragging{cursor:grabbing;user-select:none}

/* Settings entry must be findable: icon + text. */
.header-icon.header-settings{width:auto;gap:4px;padding:0 9px;font-size:12px;border:1px solid #c9d6c2}
/* D3a 보완: Drive alert states, conflict dialog and banner */
.drive-status.is-alert{font-size:11px;font-weight:700;color:#fff;background:#d97706;border:1px solid #b45309;cursor:pointer;animation:drive-alert-pulse 1.6s ease-in-out 3}
.drive-status[data-drive-phase="blocked"].is-alert{background:#c2410c;border-color:#9a3412}
@keyframes drive-alert-pulse{50%{box-shadow:0 0 0 4px #f59e0b55}}
@media (prefers-reduced-motion:reduce){.drive-status.is-alert{animation:none}}
.drive-conflict{max-width:min(560px,calc(100vw - 32px));padding:20px 22px;border:1px solid #e3b35a;border-radius:10px;box-shadow:0 18px 44px #0003;color:var(--ink,#1f2a1c)}
.drive-conflict::backdrop{background:#0004}
.drive-conflict h2{margin:0 0 8px;font-size:17px}
.drive-conflict p{margin:0 0 10px;font-size:13px;line-height:1.5}
.drive-conflict-reason{color:#9a3412;font-weight:600}
.drive-choices{display:grid;gap:8px;margin:12px 0}
.drive-choice{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;padding:10px 12px;border:1px solid #c9d4c2;border-radius:8px;background:#fff;color:inherit;font:inherit;cursor:pointer}
.drive-choice strong{font-size:14px}
.drive-choice span{font-size:12px;color:#5d6b57}
.drive-choice:hover:not(:disabled){border-color:#2f7d4f;background:#f3f9f1}
.drive-choice.is-recommended{border:2px solid #2f7d4f}
.drive-choice.is-recommended strong::after{content:"  권장";font-size:11px;color:#2f7d4f}
.drive-choice:disabled{opacity:.5;cursor:not-allowed}
.drive-conflict-progress{color:#2f5d8a;font-weight:600}
.drive-conflict-progress:empty{display:none}
.drive-conflict-close{padding:6px 12px;border:1px solid #c9d4c2;border-radius:6px;background:#f6f7f5;cursor:pointer}
.drive-conflict-banner{position:sticky;top:0;z-index:10001;display:flex;gap:12px;align-items:center;padding:10px 16px;background:#d97706;color:#fff;font-weight:600}
.drive-conflict-banner[hidden]{display:none}
.drive-conflict-banner button{padding:4px 12px;border:0;border-radius:6px;background:#fff;color:#92400e;font-weight:700;cursor:pointer}

.drive-connect-banner{position:sticky;top:0;z-index:10000;display:flex;align-items:center;gap:12px;padding:10px 16px;background:#eef5fc;color:#21496d}.drive-connect-banner[hidden]{display:none}.drive-connect-banner button{padding:4px 12px}

/* D3b 보완: 진행 중(확인·업로드)은 파란 배경 + 스피너로 평상시와 구분, 충돌 창 양쪽 요약 */
.drive-status[data-drive-phase="checking"],.drive-status[data-drive-phase="saving"]{font-size:11px;font-weight:700;color:#fff;background:#2563eb;border:1px solid #1d4ed8;display:inline-flex;align-items:center;gap:5px}
.drive-status[data-drive-phase="checking"]::before,.drive-status[data-drive-phase="saving"]::before{content:"";width:9px;height:9px;border:2px solid #ffffff66;border-top-color:#fff;border-radius:50%;animation:drive-spin .8s linear infinite}
@keyframes drive-spin{to{transform:rotate(360deg)}}
/* 사용자 요청(2026-11-01 23:38): 진행 표시는 OS의 '애니메이션 줄이기'가 켜져 있어도 돈다. 작은 로딩 표시라 느리게만 돌린다. */
@media (prefers-reduced-motion:reduce){.drive-status[data-drive-phase="checking"]::before,.drive-status[data-drive-phase="saving"]::before{animation-duration:1.6s}}
.drive-conflict-summary{margin:4px 0 10px;padding:10px 12px;border-radius:8px;background:#f6f7f5;border:1px solid #dfe5da}
.drive-conflict-summary p{margin:0 0 4px;font-size:13px}
.drive-conflict-summary p:last-child{margin-bottom:0}
.drive-conflict-summary .is-diff{color:#9a3412}

/* U2a: 막대 라벨 = 작업명과 같은 글자 크기(전에는 고정 10px → 약 77%), 행 높이 가운데. */
#chart-body .bar-label{font-size:var(--grid-font);top:0;line-height:var(--row-h)}
/* U2a: 입력줄 — 표와 비슷한 글자, 세로 가운데, 기본 20px로 낮춤. */
#workspace .formula-content textarea{font:inherit;font-size:12px;min-height:20px;line-height:16px;padding:1px 7px}
.formula-content output{height:20px;padding:1px 7px;line-height:16px}
/* U2b: 실적 판정 — 앞섬(초록)·시작 안 함(강한 경고), 실제 일정 선 색, 유령 막대. */
#schedule-table #sheet-body td.progress-ahead:not(.invalid){background:#d6efd9;color:#1b6b2a;font-weight:700}
#schedule-table #sheet-body td.cell-current.progress-ahead:not(.is-editing):not(.invalid){background:#d6efd9!important}
#schedule-table #sheet-body td.progress-ahead input[data-cell-idle]{background:transparent}
#schedule-table #sheet-body td.progress-not-started:not(.invalid){font-weight:700}
[data-theme] #chart-body tr td .actual-bar.is-behind.is-behind{background-color:#ff1f1f}
[data-theme] #chart-body tr td .actual-bar.is-ahead.is-ahead{background-color:#14b84a}
#chart-body .ghost-bar{position:absolute;top:calc(var(--row-h)/2 - 3px);height:6px;border:1px solid rgba(208,0,0,.55);background:repeating-linear-gradient(45deg,rgba(208,0,0,.28) 0 4px,rgba(208,0,0,.08) 4px 8px);pointer-events:none;z-index:3}
/* 엑셀 규칙(사용자 2026-11-02): 글자가 옆 빈칸으로 넘어가면 글자가 지나가는 칸 사이의 세로 격자선은 숨긴다(마지막 칸 오른쪽 선은 유지). */
#schedule-table #sheet-body td:has(+ td.spill-through){border-right-color:transparent!important}
#sheet-body .pre-name-toggle.is-locked .lock-shackle{fill:none;stroke-width:1.4}
#sheet-body .pre-name-toggle.is-locked .lock-body{fill:#456549;stroke:none}
/* Row menu: compact, separators, disabled items (사용자 2026-11-02 23:05). */
.action-menu{min-width:132px;padding:3px}.action-menu button{padding:5px 10px;font-size:12px;line-height:1.35}.action-menu hr{border:0;border-top:1px solid #dde3da;margin:3px 2px}.action-menu button:disabled{opacity:.4;cursor:default}.action-menu button:disabled:hover{background:transparent;outline:0}
#sheet-body td.row-number{user-select:none}

#schedule-table #sheet-body td.multiline-editing input{visibility:hidden}
#schedule-table #sheet-body td.multiline-editing .level-name,#schedule-table #sheet-body td.multiline-editing .toggle{visibility:hidden}
.cell-multiline-editor{position:absolute;left:0;top:0;z-index:6;margin:0;padding:2px 3px;border:0;outline:2px solid #417f38;outline-offset:-2px;background:var(--theme-surface,#f8fcf3);color:var(--theme-ink,#304e2a);font:inherit;font-size:var(--grid-font);line-height:1.45;white-space:pre;overflow:hidden;resize:none;box-sizing:border-box;caret-color:currentColor}

#whats-new-dialog{width:min(600px,calc(100vw - 32px));max-height:calc(100dvh - 48px);overflow:auto;padding:24px 28px 0;word-break:keep-all;overflow-wrap:anywhere;border:1px solid #cfd8d2;border-radius:12px;color:#25372f;background:#fff;font-size:15px;line-height:1.6}
#whats-new-dialog::backdrop{background:rgba(20,30,25,.35)}
#whats-new-dialog h2{margin:0 0 4px;font-size:21px;font-weight:700;color:#14241c}
#whats-new-dialog p{margin:0 0 3px;color:#25372f;font-size:15px}
#whats-new-dialog .whats-new-intro{margin:0 0 14px}
#whats-new-dialog section{margin:0 0 11px;padding:0 0 10px;border-bottom:1px solid #e8ece9}
#whats-new-dialog h3{margin:0 0 3px;font-size:15.5px;font-weight:700;color:#14241c}
#whats-new-dialog strong{font-weight:700;color:#14241c}
#whats-new-dialog .whats-new-actions{position:sticky;bottom:0;margin:0 -28px;padding:12px 28px 18px;background:#fff;border-top:1px solid #e8ece9}
#whats-new-dialog .whats-new-close{display:block;width:100%;height:auto;margin:0;padding:11px;border:0;border-radius:8px;background:#236956!important;color:#fff!important;font-size:15px;font-weight:700;cursor:pointer}
#whats-new-dialog .whats-new-close:hover,#whats-new-dialog .whats-new-close:focus-visible{background:#174e3f!important;outline:2px solid #174e3f;outline-offset:2px}
/* Patch notes: same block in the popup and in settings. */
.patch-note{border-bottom:1px solid #e8ece9;word-break:keep-all;overflow-wrap:anywhere}
.patch-note>summary{display:flex;align-items:baseline;gap:8px;padding:10px 2px;cursor:pointer;font-weight:700;color:#14241c}
.patch-note>summary:hover{color:#236956}
.patch-note>summary{list-style:none}.patch-note>summary::-webkit-details-marker{display:none}
.patch-note>summary::before{content:"▸";flex:none;width:12px;color:#5f6e66}.patch-note[open]>summary::before{content:"▾"}
.patch-note-title{flex:1;min-width:0}
.patch-note-date{flex:none;font-size:11.5px;font-weight:400;color:#5f6e66}
.patch-note>section{display:block;margin:0 0 12px;padding:0 2px}
.patch-note h3{margin:0 0 3px;font-weight:700;color:#14241c}
.patch-note p{margin:0 0 3px;color:#25372f}
.patch-note strong{font-weight:700;color:#14241c}
.patch-note-intro{padding:0 2px 8px}
.patch-note-image{display:block;width:100%;max-width:440px;height:auto;margin:7px 0 2px}
.patch-notes-list{font-size:12.5px;line-height:1.55}
.patch-notes-lead{margin:0 0 6px;color:#25372f}
.patch-notes-list h3{font-size:12.5px}
.settings-panes section[data-settings-pane="notes"]{display:block;max-height:calc(100dvh - 190px);overflow:auto;padding-right:4px}
.settings-panes section[data-settings-pane="notes"][hidden]{display:none}
#whats-new-dialog .patch-note>summary{font-size:16px}
#whats-new-dialog .patch-note>section{margin-bottom:11px;padding-bottom:0;border:0}
#whats-new-dialog .whats-new-later{margin:10px 0 12px;font-size:13.5px}
#drive-access-note{color:#25372f;font-weight:600;word-break:keep-all}
#backup-reminder{flex-wrap:wrap}
#backup-reminder>span{flex:1 1 280px;min-width:0;word-break:keep-all}
#backup-reminder button{flex:none;white-space:nowrap;padding:5px 14px;border:1px solid #9db8d2;border-radius:6px;background:#fff;color:#21496d;font-weight:600;cursor:pointer}
#backup-reminder button:first-of-type{border-color:#2c6aa8;background:#2c6aa8;color:#fff}
#tool-time-order.is-on{background:#236956;border-color:#236956;color:#fff}
/* Crisp text (사용자 2026-11-07). "이전 방식" in settings adds .legacy-text and drops all of this. */
:root:not(.legacy-text) #schedule-table,:root:not(.legacy-text) #schedule-table input,:root:not(.legacy-text) #schedule-table textarea,:root:not(.legacy-text) #schedule-table .level-name,:root:not(.legacy-text) #schedule-table .text-spill,:root:not(.legacy-text) #schedule-table .cell-overflow{font-family:'Malgun Gothic','Apple SD Gothic Neo','Noto Sans KR','Segoe UI',sans-serif}
:root:not(.legacy-text) #schedule-table #sheet-body td.row-number,:root:not(.legacy-text) #schedule-table #sheet-body td.wbs{font-size:var(--grid-font-small,12px);font-weight:400;color:#3f4a44}
:root:not(.legacy-text) #schedule-table #sheet-body tr:has(.toggle) td.wbs{font-weight:700;color:#1f2a24}
:root:not(.legacy-text) #hierarchy-guides path,:root:not(.legacy-text)[data-theme]:not([data-theme="pastel"]) #hierarchy-guides path{stroke:#b9c1ca}
:root:not(.legacy-text) #sheet-body .pre-name-toggle path{stroke:#93a39a}
:root:not(.legacy-text) #workspace #schedule-table #sheet-body tr.completed-row>td,
:root:not(.legacy-text) #workspace #schedule-table #sheet-body tr.completed-row .level-name,
:root:not(.legacy-text) #workspace #schedule-table #sheet-body tr.completed-row .text-spill,
:root:not(.legacy-text) #workspace #schedule-table #sheet-body tr.completed-row input[data-cell-idle]:not([data-field^="level"]):not([data-field="note"]):not([data-field="owner"]){color:color-mix(in srgb,var(--theme-completeText) 78%,#000)}
.settings-slots-group{flex-basis:100%}
.settings-slots-help,.settings-slots-note{margin:2px 0 6px;font-size:12px;color:#4f5d55;word-break:keep-all}
.settings-slot{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:4px 0}
.settings-slot-info{flex:1 1 220px;min-width:0;font-size:12px;word-break:keep-all}
.settings-slot input{flex:1 1 140px;min-width:0;height:28px;padding:0 6px}
.settings-slot button{flex:none;height:28px;padding:0 10px}
/* A banner above the app (backup, Drive) takes its own height; the app gets the rest, so the
   page never scrolls and the sheet tab row stays on screen (사용자 2026-11-07). */
body{margin:0;height:100dvh;display:flex;flex-direction:column;overflow:hidden}
body>aside{flex:none}
#workspace:not([hidden]){flex:1 1 auto;min-height:0;height:auto;display:flex;flex-direction:column}
#workspace>.app-header{flex:none}
#workspace>.app-main{flex:1 1 auto;min-height:0;height:auto;width:100%}

