:root{--bg: #f6f4f1;--panel: #fff;--ink: #1d1a17;--ink-2: #4a443d;--muted: #8b8279;--line: #e3ddd4;--line-2: #cfc6b9;--brand: #6f4e37;--brand-2: #8a6549;--ok: #1f7a4d;--ok-bg: #e9f5ee;--warn: #9a6b00;--warn-bg: #fdf4e0;--danger: #b02a2a;--danger-bg: #fcebeb;--swap: #c2650c;--swap-bg: #fdf0e3;--info-bg: #eef3fb;--radius: 10px;--shadow: 0 1px 2px rgba(29,26,23,.06), 0 8px 24px rgba(29,26,23,.06);font-family:Segoe UI,system-ui,-apple-system,Inter,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-size:15px;line-height:1.5}h1,h2,h3{margin:0 0 .4em;font-weight:650;letter-spacing:-.01em}h1{font-size:1.6rem}h2{font-size:1.1rem}a{color:inherit;text-decoration:none}input,select,button,textarea{font:inherit;color:inherit}.boot{display:grid;place-items:center;min-height:100vh}.boot__err{color:var(--danger)}.app{display:grid;grid-template-columns:260px 1fr;min-height:100vh}.side{background:#241c16;color:#efe7dd;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto}.side__brand{padding:22px 20px 16px;font-size:1.25rem;font-weight:700;letter-spacing:.02em}.side__brand small{display:block;font-size:.72rem;font-weight:400;opacity:.6;letter-spacing:.04em;margin-top:3px}.side__nav{display:flex;flex-direction:column;padding:6px 10px;gap:1px;flex:1}.side__nav a{padding:9px 12px;border-radius:8px;display:block}.side__nav a b{display:block;font-size:.9rem;font-weight:550}.side__nav a i{display:block;font-style:normal;font-size:.72rem;opacity:.5;margin-top:1px}.side__nav a:hover{background:#ffffff12}.side__nav a.is-active{background:var(--brand);color:#fff}.side__nav a.is-active i{opacity:.75}.side__user{padding:14px 20px;border-top:1px solid #ffffff1a;font-size:.82rem;display:flex;justify-content:space-between;align-items:center;gap:10px}.side__user button{background:none;border:1px solid #ffffff33;color:inherit;border-radius:6px;padding:4px 10px;cursor:pointer}.side__user button:hover{background:#ffffff14}.main{padding:26px clamp(16px,3vw,34px) 70px;min-width:0}.burger{display:none}.pagehead{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-end;justify-content:space-between;margin-bottom:18px}.pagehead p{margin:0;color:var(--muted);font-size:.86rem;max-width:70ch}.pagehead__actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.rangenote{color:var(--muted);font-size:.85rem;margin:-6px 0 14px}.btn{background:var(--brand);color:#fff;border:1px solid transparent;border-radius:8px;padding:8px 15px;cursor:pointer;font-weight:550;font-size:.88rem;white-space:nowrap}.btn:hover{background:var(--brand-2)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn--ghost{background:var(--panel);color:var(--ink);border-color:var(--line-2)}.btn--ghost:hover{background:#fff;border-color:var(--brand)}.btn--danger{background:var(--danger-bg);color:var(--danger);border-color:#f0cfcf}.btn--danger:hover{background:#f8dede}.btn--sm{padding:4px 10px;font-size:.8rem}.toggle{display:inline-flex;align-items:center;gap:7px;font-size:.85rem;color:var(--ink-2);cursor:pointer}.toggle--big{display:flex;padding:10px 12px;background:var(--danger-bg);border:1px solid #f0cfcf;border-radius:8px;margin-bottom:14px;font-weight:550}.weekpick,.monthpick{display:inline-flex;align-items:center;gap:6px}.weekpick button,.monthpick button{width:30px;height:32px;border:1px solid var(--line-2);background:var(--panel);border-radius:7px;cursor:pointer;font-size:1rem;line-height:1}.weekpick button.btn,.monthpick button.btn{width:auto}.weekpick input,.monthpick select,.row input,.row select{border:1px solid var(--line-2);background:var(--panel);border-radius:7px;padding:6px 9px}.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:12px}.tablewrap{overflow-x:auto;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}table{border-collapse:collapse;width:100%;font-size:.86rem}th,td{padding:9px 11px;text-align:left;border-bottom:1px solid var(--line);vertical-align:middle}thead th{background:#faf8f5;font-weight:600;font-size:.78rem;color:var(--ink-2);white-space:nowrap;position:sticky;top:0;z-index:2}tbody tr:last-child td{border-bottom:none}tbody tr:hover{background:#fcfaf7}tfoot td{background:#faf8f5;font-weight:650;border-top:2px solid var(--line-2)}td i,th i{display:block;font-style:normal;font-size:.74rem;color:var(--muted);margin-top:1px}.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.wrapcell{max-width:28ch;white-space:normal}.actions{display:flex;gap:6px;justify-content:flex-end}.row--muted td{opacity:.55}.neg{color:var(--danger)}.pos{color:var(--ok)}.num--s{font-weight:600}.num--q{font-weight:700;background:var(--ok-bg)}.num--a{color:var(--warn);background:var(--warn-bg)}.grid td,.grid th{border-right:1px solid var(--line)}.grid__rowhead{min-width:190px;background:#faf8f5;position:sticky;left:0;z-index:1}.grid__rowhead b{display:block;font-size:.86rem}.grid thead th{text-align:center}.grid thead th b{display:block;font-size:.82rem}.grid thead th i{font-style:normal;font-size:.72rem;color:var(--muted)}.grid thead th.is-today{background:var(--info-bg)}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:baseline}.cell{position:relative;padding:5px 6px;min-width:132px}.cell select{width:100%;border:1px solid transparent;background:transparent;border-radius:6px;padding:5px 6px;font-size:.82rem;cursor:pointer}.cell select:hover{border-color:var(--line-2);background:#fff}.cell--on{background:var(--ok-bg)}.cell--swap{background:var(--swap-bg)}.cell--noshow{background:var(--danger-bg)}.cell--cancel{background:#f1efec}.cell--cancel select{text-decoration:line-through;opacity:.6}.cell__more{position:absolute;right:4px;top:3px;border:none;background:none;cursor:pointer;color:var(--muted);font-size:.9rem;line-height:1;padding:2px 3px;opacity:0}.cell:hover .cell__more{opacity:1}.cell__flag{position:absolute;right:4px;bottom:3px;color:var(--warn);font-weight:700;font-size:.78rem}.loadbar{margin-top:18px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}.loadbar h2{font-size:.9rem;color:var(--ink-2)}.loadbar ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}.loadbar li{background:#faf8f5;border:1px solid var(--line);border-radius:20px;padding:4px 12px;font-size:.82rem}.loadbar li b{color:var(--brand);margin-right:5px}.badge{display:inline-block;padding:2px 9px;border-radius:20px;font-size:.76rem;font-weight:550;white-space:nowrap}.badge--ok{background:var(--ok-bg);color:var(--ok)}.badge--late{background:var(--warn-bg);color:var(--warn)}.badge--swap{background:var(--swap-bg);color:var(--swap)}.badge--noshow{background:var(--danger-bg);color:var(--danger)}.badge--wait{background:#eeeae4;color:var(--muted)}.row--noshow td:first-child{box-shadow:inset 3px 0 0 var(--danger)}.row--swap td:first-child{box-shadow:inset 3px 0 0 var(--swap)}.row--ok td:first-child{box-shadow:inset 3px 0 0 var(--ok)}.row--late td:first-child{box-shadow:inset 3px 0 0 var(--warn)}.pen{font-size:.8rem}.chk{font-size:.78rem}.chk--ok{color:var(--muted)}.chk--warn{color:var(--warn);background:var(--warn-bg);padding:2px 8px;border-radius:20px;cursor:help}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin-bottom:20px}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow)}.card span{display:block;font-size:.78rem;color:var(--muted)}.card b{display:block;font-size:1.45rem;font-weight:650;margin-top:4px;font-variant-numeric:tabular-nums}.card b i{font-style:normal;font-size:.8rem;color:var(--muted);font-weight:400}.card--pay b{color:var(--brand)}.card--neg b{color:var(--danger)}.card--warn b{color:var(--warn)}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;margin-bottom:18px;box-shadow:var(--shadow)}.panel>.btn{margin-top:12px}.formgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px 14px}.field{display:flex;flex-direction:column;gap:4px;font-size:.84rem}.field--wide{grid-column:1 / -1}.field>span{color:var(--ink-2);font-weight:550}.field input,.field select{border:1px solid var(--line-2);border-radius:7px;padding:7px 9px;background:#fffdfb;width:100%}.field input:focus,.field select:focus{outline:2px solid var(--brand);outline-offset:-1px}.field input[readonly]{background:#f3f0ec;color:var(--muted)}.field em{font-style:normal;font-size:.74rem;color:var(--muted)}.subh{font-size:.95rem;margin:18px 0 8px;padding-top:14px;border-top:1px solid var(--line)}.hint{font-size:.8rem;color:var(--muted);margin:10px 0 0}.hint--warn{color:var(--warn);background:var(--warn-bg);padding:8px 11px;border-radius:8px}.empty{color:var(--muted);padding:26px;text-align:center;background:var(--panel);border:1px dashed var(--line-2);border-radius:var(--radius)}.checklist{margin:12px 0 0;padding-left:18px;color:var(--warn);font-size:.82rem}.legend{margin-top:18px;font-size:.84rem;color:var(--ink-2)}.legend ul{margin:0;padding-left:18px}.prose ol,.prose ul{padding-left:20px;margin:0}.prose li{margin-bottom:6px}.list--def th{width:46px;text-align:center;font-size:1rem;color:var(--brand)}.sw{display:inline-block;width:14px;height:14px;border-radius:4px;vertical-align:-2px;margin-right:7px;border:1px solid var(--line-2)}.sw--on{background:var(--ok-bg)}.sw--swap{background:var(--swap-bg)}.sw--noshow{background:var(--danger-bg)}.sw--cancel{background:#f1efec}.chips{list-style:none;margin:12px 0 0;padding:0;display:flex;flex-wrap:wrap;gap:7px}.chips li{background:#faf8f5;border:1px solid var(--line);border-radius:20px;padding:3px 6px 3px 12px;font-size:.82rem;display:flex;align-items:center;gap:4px}.chips button{border:none;background:none;cursor:pointer;color:var(--muted);font-size:1rem;line-height:1;padding:0 4px}.chips button:hover{color:var(--danger)}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d1a1799;display:grid;place-items:center;padding:20px;z-index:50}.modal__box{background:var(--panel);border-radius:12px;width:min(620px,100%);max-height:90vh;display:flex;flex-direction:column;box-shadow:0 20px 60px #0004}.modal__box--wide{width:min(880px,100%)}.modal__head{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--line)}.modal__head h2{margin:0;font-size:1.02rem}.modal__x{border:none;background:none;font-size:1.5rem;line-height:1;cursor:pointer;color:var(--muted)}.modal__body{padding:18px 20px;overflow-y:auto}.modal__foot{display:flex;gap:10px;align-items:center;padding-top:18px;margin-top:18px;border-top:1px solid var(--line)}.sp{flex:1}.login{min-height:100vh;display:grid;place-items:center;background:#241c16;padding:20px}.login__box{background:var(--panel);border-radius:14px;padding:30px 28px;width:min(380px,100%);box-shadow:0 20px 60px #0005}.login__box h1{margin-bottom:2px}.login__box>p{margin:0 0 20px;color:var(--muted);font-size:.85rem}.login__box label{display:block;margin-bottom:12px;font-size:.84rem}.login__box label span{display:block;color:var(--ink-2);font-weight:550;margin-bottom:4px}.login__box input{width:100%;border:1px solid var(--line-2);border-radius:7px;padding:9px 11px}.login__box button{width:100%;margin-top:8px;background:var(--brand);color:#fff;border:none;border-radius:8px;padding:10px;font-weight:600;cursor:pointer}.login__err{background:var(--danger-bg);color:var(--danger);padding:8px 11px;border-radius:7px;font-size:.83rem;margin-bottom:10px}.toasts{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:99}.toast{padding:10px 15px;border-radius:9px;font-size:.86rem;box-shadow:var(--shadow);max-width:380px}.toast--ok{background:#1d2e24;color:#d6f0e0}.toast--err{background:#3a1d1d;color:#f6d9d9}.spinner{padding:36px;text-align:center;color:var(--muted)}@media (max-width: 900px){.app{grid-template-columns:1fr}.side{position:fixed;inset:0 auto 0 0;width:250px;transform:translate(-100%);transition:transform .2s;z-index:40}.app--menu .side{transform:none}.burger{display:block;position:fixed;top:12px;right:12px;z-index:45;width:40px;height:40px;border:1px solid var(--line-2);background:var(--panel);border-radius:9px;font-size:1.1rem;cursor:pointer}.main{padding-top:60px}.pagehead{align-items:flex-start}}.grid--read .readcell{font-size:.88rem;font-weight:550;text-align:center;padding:12px 8px}.grid--read .readcell.cell--on{color:#17563a}.col--plan{background:#f6f3ef}thead .col--plan{background:#f0ebe4}.modebar{margin:-6px 0 14px;padding:7px 13px;border-radius:8px;font-size:.84rem;font-weight:550;display:inline-block}.modebar--ok{background:var(--ok-bg);color:var(--ok)}.modebar--late{background:var(--warn-bg);color:var(--warn)}.modebar--wait{background:#eeeae4;color:var(--muted-text, #6b655d)}.grp{text-align:center;border-bottom:1px solid var(--line-2)}.grp--pos{background:var(--ok-bg)}.grp--neg{background:var(--danger-bg)}.field--inline{flex-direction:row;align-items:center;gap:7px;font-size:.84rem}.field--inline>span{white-space:nowrap}.field--inline input{width:auto}.list--pay thead th{vertical-align:bottom}.langsw{display:inline-flex;gap:3px;margin-top:9px}.langsw button{border:1px solid #ffffff2e;background:none;color:inherit;border-radius:6px;padding:2px 9px;font-size:.72rem;font-weight:600;cursor:pointer;letter-spacing:.04em}.langsw button:hover{background:#ffffff14}.langsw button.is-on{background:var(--brand);border-color:var(--brand);color:#fff}.login__box .langsw{margin:0 0 10px}.login__box .langsw button{border-color:var(--line-2);color:var(--ink-2)}.login__box .langsw button.is-on{color:#fff}.autonote{font-size:.78rem;color:var(--muted);white-space:nowrap}.auto{position:relative;display:inline-block;width:100%}.auto>input,.auto>select,.auto .field input,.auto select{width:100%;border:1px solid transparent;background:transparent;border-radius:6px;padding:5px 7px;font-size:.84rem}.auto>input:hover,.auto select:hover{border-color:var(--line-2);background:#fff}.auto>input:focus,.auto select:focus{border-color:var(--brand);background:#fff;outline:none}.auto>input[type=color]{padding:2px;height:30px;cursor:pointer}.auto>input[type=checkbox]{width:auto}.auto--busy>input,.auto--busy select{opacity:.6}.auto--ok:after{content:"✓";position:absolute;right:4px;top:50%;transform:translateY(-50%);color:var(--ok);font-size:.8rem;font-weight:700;pointer-events:none}.auto--ok>input,.auto--ok select{background:var(--ok-bg);border-color:#b9ddc8}.list--edit td{padding:4px 6px}.list--edit .num .auto>input{text-align:right}.row--draft{background:var(--warn-bg)}.row--draft input,.row--draft select{width:100%;border:1px solid var(--line-2);border-radius:6px;padding:5px 7px;font-size:.84rem;background:#fff}.emptycell{text-align:center;color:var(--muted);padding:24px}.mono{font-variant-numeric:tabular-nums;font-size:.8rem;color:var(--muted)}.savebar{display:inline-flex;align-items:center;gap:9px;padding:4px 6px 4px 10px;border:1px solid var(--line);border-radius:22px;background:var(--panel)}.savebar__dot{width:9px;height:9px;border-radius:50%;flex:none}.savebar__dot--ok{background:var(--ok)}.savebar__dot--wait{background:var(--warn);animation:pulse 1.2s ease-in-out infinite}.savebar__dot--err{background:var(--danger)}.savebar__txt{font-size:.78rem;color:var(--ink-2);white-space:nowrap;line-height:1.15}.savebar__txt i{display:block;font-style:normal;font-size:.68rem;color:var(--muted)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.auto--err>input,.auto--err select{background:var(--danger-bg);border-color:#e7b3b3}.monthpick__field{position:relative;display:inline-flex;align-items:center;border:1px solid var(--line-2);border-radius:7px;background:var(--panel);padding:6px 10px;cursor:pointer;min-width:132px;justify-content:center}.monthpick__field:hover{border-color:var(--brand)}.monthpick__field b{font-weight:550;font-size:.86rem;white-space:nowrap}.monthpick__field input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;width:100%;height:100%;cursor:pointer;border:0;padding:0}.monthpick__now{width:auto!important;padding:0 10px!important;font-size:.78rem!important}.periodf{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}.periodf>select{border:1px solid var(--line-2);background:var(--panel);border-radius:7px;padding:6px 9px;font-size:.84rem}.periodf__range{display:inline-flex;align-items:center;gap:6px}.periodf__range input{border:1px solid var(--line-2);background:var(--panel);border-radius:7px;padding:6px 9px;font-size:.84rem}.periodf__range i{font-style:normal;color:var(--muted)}.shift-row .grid__rowhead{background:color-mix(in srgb,var(--bc) 10%,#fff)}.shift-row--pm .grid__rowhead{background:color-mix(in srgb,var(--bc) 26%,#fff)}.shift-row--pm .grid__rowhead b,.shift-row--pm .grid__rowhead i{color:color-mix(in srgb,var(--bc) 70%,#10141a)}.shift-row .cell{background-color:color-mix(in srgb,var(--bc) 4%,#fff)}.shift-row--pm .cell{background-color:color-mix(in srgb,var(--bc) 11%,#fff)}.shift-row .cell--on{background-color:var(--ok-bg)}.shift-row .cell--swap{background-color:var(--swap-bg)}.shift-row .cell--noshow{background-color:var(--danger-bg)}.shift-row .cell--cancel{background-color:#f1efec}.grid th.is-weekend{background:#f3e6cf;color:#6b4b14}.grid th.is-weekend i{color:#8a6b32}.grid td.is-weekend{background-image:linear-gradient(#c48e2421,#c48e2421)}.grid th.is-weekend.is-today{background:#e9d7b4}.list tr.is-weekend td:first-child{box-shadow:inset 3px 0 #c48e24}.searchbox{border:1px solid var(--line-2);background:var(--panel);border-radius:7px;padding:6px 11px;font-size:.84rem;min-width:180px}.monthpick__field--wide{min-width:176px}.list--edit td.mid{text-align:center}.list--edit td.cell-swap{background:var(--swap-bg);box-shadow:inset 0 0 0 1px #f0cda4}.list--edit td.cell-noshow{background:var(--danger-bg);box-shadow:inset 0 0 0 1px #f0cfcf}.list--edit td.cell-late{background:var(--warn-bg);color:var(--warn);font-weight:600}.list--edit td.cell-pen{background:var(--danger-bg);box-shadow:inset 0 0 0 1px #f0cfcf}.list--edit td.cell-pen-wait{background:var(--warn-bg)}.list tr.day--alt>td{background-color:#faf7f2}.list tr.day--first>td{border-top:2px solid var(--line-2)}.list tr.day--first td:first-child b{color:var(--brand)}.shift-row td.cell{border-bottom-color:color-mix(in srgb,var(--bc) 22%,var(--line))}.grid--read .shift-row .readcell.cell--on{background-color:color-mix(in srgb,var(--bc) 18%,#fff);color:#10141a;font-weight:600}.grid th.is-weekend:last-child{background:#f3d9d3;color:#7a3326}.grid th.is-weekend:last-child i{color:#96513f}.grid td.is-weekend:last-child{background-image:linear-gradient(#b03c241f,#b03c241f)}
