:root{--paper:#f6f7f4;--white:#fff;--ink:#1a231e;--ink-soft:#5c6660;--rule:#dce1d8;--brand:#3f6b4a;--brand-soft:#e4ede4;--bark:#8a7355;--alert:#b04a32;--alert-soft:#f6e5e0;--warn:#c97b25;--warn-soft:#fbeedc}*{box-sizing:border-box}body{background:var(--paper);color:var(--ink);margin:0;font-family:Barlow,-apple-system,system-ui,sans-serif;font-size:15px;line-height:1.5}.centered{min-height:100vh;color:var(--ink-soft);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex}.auth-wrap{justify-content:center;align-items:center;min-height:100vh;padding:24px;display:flex}.auth-card{background:var(--white);border:1px solid var(--rule);border-radius:8px;flex-direction:column;gap:14px;width:100%;max-width:380px;padding:28px;display:flex}.auth-title{letter-spacing:-.02em;margin:0;font-size:22px;font-weight:600}.auth-sub{color:var(--ink-soft);margin:-10px 0 6px;font-size:13px}.auth-tabs{border-bottom:1px solid var(--rule);gap:2px;display:flex}.auth-tabs button{font:inherit;cursor:pointer;color:var(--ink-soft);background:0 0;border:0;border-bottom:2px solid #0000;flex:1;margin-bottom:-1px;padding:8px}.auth-tabs button[data-on=true]{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}.auth-card label{color:var(--ink-soft);flex-direction:column;gap:4px;font-size:13px;display:flex}.auth-card input{font:inherit;color:var(--ink);border:1px solid var(--rule);background:var(--white);border-radius:5px;padding:8px 10px;font-size:15px}.auth-card input:focus{outline:2px solid var(--brand);outline-offset:-1px}.auth-row{gap:10px;display:flex}.auth-row label{flex:1}.auth-rules{color:var(--ink-soft);flex-wrap:wrap;gap:4px 12px;margin:-4px 0 0;padding:0;font-size:12px;list-style:none;display:flex}.auth-rules li[data-ok=true]{color:var(--brand)}.auth-primary{font:inherit;background:var(--brand);color:#fff;cursor:pointer;border:0;border-radius:5px;padding:10px;font-weight:600}.auth-primary:hover:not(:disabled){background:#35583d}.auth-primary:disabled{opacity:.5;cursor:default}.auth-link{font:inherit;color:var(--brand);cursor:pointer;background:0 0;border:0;padding:0;font-size:13px;text-decoration:underline}.auth-error,.auth-notice{border-radius:4px;margin:0;padding:8px 10px;font-size:13px}.auth-error{background:var(--alert-soft);border-left:3px solid var(--alert);color:var(--alert)}.auth-notice{background:var(--brand-soft);border-left:3px solid var(--brand);color:var(--brand)}.auth-foot{color:var(--ink-soft);margin:0;font-size:12px}.page{max-width:1200px;margin:0 auto;padding:24px}.head{border-bottom:1px solid var(--rule);justify-content:space-between;align-items:flex-start;margin-bottom:20px;padding-bottom:16px;display:flex}.head h1{letter-spacing:-.02em;margin:0;font-size:22px;font-weight:600}.head-sub{color:var(--ink-soft);margin:2px 0 0;font-size:13px}.btn{font:inherit;border:1px solid var(--rule);background:var(--white);cursor:pointer;color:var(--ink);border-radius:5px;padding:7px 14px}.btn:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}.btn:disabled{opacity:.5;cursor:default}.card{background:var(--white);border:1px solid var(--rule);border-radius:8px;padding:20px}.card h2{margin:0 0 10px;font-size:16px;font-weight:600}.muted{color:var(--ink-soft);margin:0;font-size:13px}.ok{color:var(--brand);font-size:13px;font-weight:600}.strong{font-weight:500}.tabs{border-bottom:1px solid var(--rule);flex-wrap:wrap;gap:2px;margin-bottom:20px;display:flex}.tab{font:inherit;cursor:pointer;color:var(--ink-soft);background:0 0;border:0;border-bottom:2px solid #0000;margin-bottom:-1px;padding:9px 16px}.tab:hover{color:var(--ink)}.tab[data-on=true]{color:var(--brand);border-bottom-color:var(--brand);font-weight:600}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.head-row{justify-content:space-between;align-items:baseline;margin-bottom:10px;display:flex}.card+.card{margin-top:16px}.tags{flex-wrap:wrap;gap:6px;display:flex}.tag{border:1px solid var(--rule);background:var(--white);border-radius:99px;align-items:center;gap:2px;padding:2px 6px 2px 10px;display:inline-flex}.tag-input{font:inherit;color:var(--ink);background:0 0;border:0;min-width:40px;padding:2px 0;font-size:13px}.tag-input:focus{color:var(--brand);outline:none}.sublist{border:1px solid var(--rule);background:#fafbf9;border-radius:6px;margin-bottom:14px;padding:14px}.budget{flex-wrap:wrap;gap:10px;margin-bottom:18px;display:flex}.budget-card{border:1px solid var(--rule);border-radius:6px;flex:1;min-width:155px;padding:9px 13px}.budget-card[data-state=full]{border-color:var(--brand);background:var(--brand-soft)}.budget-card[data-state=over]{border-color:var(--alert);background:var(--alert-soft)}.budget-name{color:var(--ink-soft);font-size:12px}.budget-value{letter-spacing:-.01em;font-size:19px;font-weight:600;line-height:1.2}.budget-card[data-state=over] .budget-value{color:var(--alert)}.budget-bar{background:var(--rule);border-radius:2px;height:4px;margin:5px 0 4px;overflow:hidden}.budget-bar span{background:var(--brand);height:100%;display:block}.budget-card[data-state=over] .budget-bar span{background:var(--alert)}.budget-label{color:var(--ink-soft);font-size:11px}.grid tr.subrow td{background:#fafbf9;padding:14px}.subjects-toggle{padding:4px 10px;font-size:12px}.stats{flex-wrap:wrap;gap:26px;margin-top:16px;display:flex}.stat-value{letter-spacing:-.02em;font-size:26px;font-weight:600;line-height:1.1}.stat-label{color:var(--ink-soft);font-size:12px}.toast{z-index:5;background:var(--alert-soft);border-left:3px solid var(--alert);color:var(--alert);border-radius:4px;margin-bottom:14px;padding:9px 13px;font-size:13px;position:sticky;top:0}.toast[data-level=soft]{background:var(--warn-soft);border-left-color:var(--warn);color:var(--warn)}.toast[data-level=ok]{background:var(--brand-soft);border-left-color:var(--brand);color:var(--brand)}.timeline{gap:14px;padding-bottom:8px;display:flex;overflow-x:auto}.axis{flex:0 0 54px;position:relative}.axis-label{color:var(--ink-soft);font-size:11px;position:absolute;right:6px;transform:translateY(-50%)}.column{flex:1 1 0;min-width:200px;position:relative}.column-head{border-bottom:2px solid var(--brand);margin-bottom:6px;padding-bottom:6px;font-size:13px;font-weight:600}.canvas{border-left:1px solid var(--rule);position:relative}.tick{border-top:1px solid #eef1ec;position:absolute;left:0;right:0}.break{border:1px dashed var(--rule);color:var(--ink-soft);background:#efefea;border-radius:4px;padding:3px 7px;font-size:11px;position:absolute;left:4px;right:0}.off{border:1px solid var(--rule);color:var(--ink-soft);background:repeating-linear-gradient(45deg,#f2f3ef,#f2f3ef 6px,#eaebe6 6px 12px);border-radius:4px;padding:3px 7px;font-size:11px;position:absolute;left:4px;right:0}.off-cell{color:var(--ink-soft);background:repeating-linear-gradient(45deg,#f2f3ef,#f2f3ef 6px,#eaebe6 6px 12px);font-size:11px}.drop{border:1px dashed #0000;border-radius:4px;position:absolute;left:4px;right:0}.drop[data-over="1"]{border-color:var(--brand);background:#3f6b4a17}.block{cursor:grab;border:1px solid var(--brand);background:var(--brand-soft);color:var(--ink);-webkit-user-select:none;user-select:none;border-radius:4px;padding:4px 7px;font-size:12px;position:absolute;left:4px;right:0;overflow:hidden}.block:active{cursor:grabbing}.block b{font-size:12px;font-weight:600;line-height:1.25;display:block}.block span{color:var(--ink-soft);font-size:11px}.block b,.block span,.week-block b,.week-block span{pointer-events:none}.pin{pointer-events:auto}.block[data-drag="1"]{opacity:.35}.block{touch-action:none;transition:transform .12s,opacity .12s}.block[data-under="1"]{opacity:.55;border-style:dashed;transform:scale(.88)}.week-block{touch-action:none;transition:transform .12s,opacity .12s}.week-block[data-under="1"]{opacity:.55;border-style:dashed;transform:scale(.9)}.chip[data-target=true]{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}.frozen{background:var(--warn-soft);border-left:3px solid var(--warn);color:var(--warn);border-radius:4px;margin:12px 0 0;padding:9px 12px;font-size:13px}.block[data-level=block]{border-color:var(--alert);background:var(--alert-soft)}.block[data-level=soft]{border-color:var(--warn);background:var(--warn-soft)}.pin{cursor:pointer;color:var(--ink-soft);opacity:.45;background:0 0;border:0;padding:2px;font-size:11px;line-height:1;position:absolute;top:2px;right:4px}.pin[data-on="1"]{opacity:1;color:var(--bark)}.block:hover .pin{opacity:.9}.week{border-collapse:collapse;width:100%;margin-top:6px;font-size:12px}.week th,.week td{border:1px solid var(--rule);vertical-align:top;padding:5px 7px}.week th{background:#f0f2ee;font-size:11px;font-weight:600}.week-cell{min-height:34px}.week-cell[data-over="1"]{background:var(--brand-soft);outline:2px solid var(--brand);outline-offset:-2px}.break-cell{color:var(--ink-soft);background:#f4f5f1}.week-block{cursor:grab;-webkit-user-select:none;user-select:none;border:1px solid #0000;border-radius:3px;margin-bottom:3px;padding:2px 4px}.week-block:active{cursor:grabbing}.week-block b{font-weight:600;display:block}.week-block span{color:var(--ink-soft);font-size:11px}.week-block[data-level=block]{border-color:var(--alert);background:var(--alert-soft)}.week-block[data-level=soft]{border-color:var(--warn);background:var(--warn-soft)}.week-block[data-pin="1"]{border-left:3px solid var(--bark)}.issue{background:var(--alert-soft);border-left:3px solid var(--alert);border-radius:4px;margin-bottom:7px;padding:9px 12px}.issue[data-level=soft]{background:var(--warn-soft);border-left-color:var(--warn)}.issue-jump{font:inherit;cursor:pointer;color:inherit;text-align:left;background:0 0;border:0;width:100%;padding:0}.issue-jump:hover{text-decoration:underline}.issue-title{color:var(--alert);font-weight:600}.issue[data-level=soft] .issue-title{color:var(--warn)}.issue-detail{color:var(--ink-soft);margin-top:3px;font-size:12px}.ghost{z-index:50;pointer-events:none;background:var(--brand);color:#fff;border-radius:4px;padding:4px 10px;font-size:12px;font-weight:600;position:fixed;box-shadow:0 2px 8px #0003}.flash{animation:2.2s ease-out flashPulse}@keyframes flashPulse{0%,55%{box-shadow:0 0 0 3px var(--brand)}to{box-shadow:0 0 #0000}}@media print{.tabs,.btn,.auth-primary,.chips{display:none}body{background:#fff}}.grid tr[data-draft=true]{background:#fbf9f3}.select[data-empty=true]{color:var(--ink-soft);border-style:dashed}.draft-note{color:var(--warn);font-size:12px}.grid{border-collapse:collapse;width:100%;font-size:14px}.grid th{text-align:left;color:var(--ink-soft);border-bottom:1px solid var(--rule);padding:6px 8px;font-size:12px;font-weight:600}.grid td{border-bottom:1px solid var(--rule);vertical-align:middle;padding:8px}.grid tr:last-child td{border-bottom:0}.grid tr[data-retired=true]{opacity:.5}.grid tr[data-break=true]{background:#f4f5f1}.grid tr[data-break=true] .text{background:0 0}.chips{gap:6px;display:flex}.chip{font:inherit;cursor:pointer;border:1px solid var(--rule);background:var(--white);color:var(--ink-soft);border-radius:99px;padding:5px 12px;font-size:13px}.chip[data-on=true]{background:var(--brand-soft);border-color:var(--brand);color:var(--brand);font-weight:600}.chip:disabled{opacity:.35;cursor:default}.times{align-items:center;gap:6px;display:flex}.times input{font:inherit;border:1px solid var(--rule);background:var(--white);color:var(--ink);border-radius:5px;width:92px;padding:5px 7px;font-size:13px}.times span{color:var(--ink-soft);font-size:12px}.x{color:var(--ink-soft);cursor:pointer;background:0 0;border:0;padding:0 4px;font-size:16px;line-height:1}.x:hover{color:var(--alert)}.text{font:inherit;border:1px solid var(--rule);background:var(--white);width:100%;color:var(--ink);border-radius:5px;padding:5px 8px;font-size:13px}.select{font:inherit;border:1px solid var(--rule);background:var(--white);color:var(--ink);border-radius:5px;padding:5px 7px;font-size:13px}.foot{border-top:1px solid var(--rule);align-items:center;gap:14px;margin-top:18px;padding-top:16px;display:flex}.foot .auth-primary{width:auto;padding:9px 22px}.state{border:1px solid var(--rule);color:var(--ink-soft);border-radius:99px;padding:3px 10px;font-size:12px;display:inline-block}.state[data-s=active]{background:var(--brand-soft);border-color:var(--brand);color:var(--brand);font-weight:600}.state[data-s=blocked]{background:var(--alert-soft);border-color:var(--alert);color:var(--alert)}.state[data-s=invited]{background:var(--warn-soft);border-color:var(--warn);color:var(--warn)}.mail{color:var(--ink-soft);font-size:13px}.actions{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.actions .btn{padding:4px 10px;font-size:12px}.actions .text{width:170px}
