:root{--g-950:#072419;--g-900:#0b3324;--g-800:#11452f;--g-700:#17613f;--g-600:#1d7a4e;--g-500:#27935f;--g-300:#8cc9a6;--g-100:#dcefe3;--g-50:#f0f7f2;--bg:#f4f7f5;--surface:#fff;--text:#11211a;--muted:#5f7369;--border:#dbe4de;--line:#e9efeb;--red:#c2410c;--red-soft:#fdeee6;--amber:#b7791f;--amber-soft:#fbf3e2;--kye:#0f766e;--nme:#4d7c0f;--kon:#64748b;--r:2px;--safe-bottom:env(safe-area-inset-bottom,0px)}*{box-sizing:border-box}html,body,#root{height:100%}body{color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-feature-settings:"tnum" 1, "cv11" 1;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px}button,input,select,textarea{font:inherit;color:inherit}a{color:inherit;text-decoration:none}svg{flex:none}h1,h2,h3{letter-spacing:-.015em;margin:0}.shell{min-height:100%;display:flex}.sidebar{color:#fff;background:var(--g-900);flex-direction:column;flex:none;width:232px;height:100vh;display:flex;position:sticky;top:0;overflow-y:auto}.brand{letter-spacing:-.02em;align-items:center;gap:.6rem;padding:1.1rem 1.1rem 1rem;font-size:1.1rem;font-weight:800;display:flex}.brand-mark{background:var(--g-500);color:#fff;place-items:center;width:1.9rem;height:1.9rem;display:grid}.brand-mark svg{width:1.1rem;height:1.1rem}.nav{flex-direction:column;padding:0 .5rem 1rem;display:flex}.nav-group{letter-spacing:.1em;text-transform:uppercase;color:#ffffff73;margin:1rem .7rem .3rem;font-size:.66rem;font-weight:700}.nav a,.nav button{text-align:left;color:#ffffffc7;cursor:pointer;background:0 0;border:0;border-left:3px solid #0000;align-items:center;gap:.65rem;width:100%;padding:.55rem .7rem;font-size:.88rem;font-weight:500;display:flex}.nav a:hover,.nav button:hover{color:#fff;background:#ffffff0f}.nav a.active{color:#fff;border-left-color:var(--g-300);background:#ffffff1a;font-weight:600}.nav svg{width:1rem;height:1rem}.nav .dot{width:.55rem;height:.55rem;margin:0 .22rem}.nav .count{color:#ffffff80;margin-left:auto;font-size:.75rem}.side-foot{color:#ffffff8c;border-top:1px solid #ffffff14;margin-top:auto;padding:.9rem 1.2rem;font-size:.78rem}.side-foot b{color:#fff;font-weight:600;display:block}.main{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{z-index:20;background:var(--surface);border-bottom:1px solid var(--border);align-items:center;gap:.9rem;min-height:60px;padding:.7rem 1.6rem;display:flex;position:sticky;top:0}.topbar h1{align-items:center;gap:.6rem;font-size:1.15rem;font-weight:700;display:flex}.topbar .actions{align-items:center;gap:.5rem;margin-left:auto;display:flex}.content{align-content:start;gap:1.2rem;padding:1.4rem 1.6rem 3rem;display:grid}.tabbar,.mobile-only{display:none}@media (width<=860px){.sidebar{display:none}.topbar{padding:calc(env(safe-area-inset-top,0px) + .6rem) 1rem .6rem}.content{padding:1rem 1rem calc(5rem + var(--safe-bottom))}.mobile-only{display:inline-grid}.tabbar{z-index:30;padding:.35rem .3rem calc(.35rem + var(--safe-bottom));background:var(--g-900);grid-auto-columns:1fr;grid-auto-flow:column;display:grid;position:fixed;bottom:0;left:0;right:0}.tabbar a,.tabbar button{color:#fff9;background:0 0;border:0;flex-direction:column;align-items:center;gap:.2rem;padding:.3rem 0;font-size:.66rem;font-weight:600;display:flex}.tabbar svg{width:1.2rem;height:1.2rem}.tabbar a.active{color:#fff}}.sheet{z-index:60;background:#07241973;position:fixed;inset:0}.sheet .sidebar{display:flex;position:absolute;top:0;bottom:0;left:0}.panel{background:var(--surface);border:1px solid var(--border);min-width:0}.panel-head{border-bottom:1px solid var(--line);align-items:center;gap:.7rem;padding:.75rem 1rem;display:flex}.panel-head h2{font-size:.95rem;font-weight:700}.panel-head .right{align-items:center;gap:.5rem;margin-left:auto;display:flex}.panel-body{padding:1rem}.stats{background:var(--surface);border:1px solid var(--border);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.stat{border-right:1px solid var(--line);padding:.9rem 1rem}.stat:last-child{border-right:0}.stat .label{color:var(--muted);font-size:.75rem;font-weight:600}.stat .value{letter-spacing:-.02em;margin-top:.15rem;font-size:1.6rem;font-weight:700}.stat .value small{color:var(--muted);font-size:.85rem;font-weight:500}@media (width<=860px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.stat:nth-child(2){border-right:0}.stat:nth-child(-n+2){border-bottom:1px solid var(--line)}}.cols{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:1.2rem;display:grid}.cols-3{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start;gap:1.2rem;display:grid}@media (width<=1100px){.cols-3{grid-template-columns:1fr}}@media (width<=860px){.cols{grid-template-columns:1fr}}.btn{border-radius:var(--r);white-space:nowrap;cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:.4rem;height:2.15rem;padding:0 .85rem;font-size:.85rem;font-weight:600;transition:background .15s,border-color .15s;display:inline-flex}.btn svg{width:1rem;height:1rem}.btn:disabled{opacity:.5;cursor:default}.btn-primary{color:#fff;background:var(--g-600)}.btn-primary:hover:not(:disabled){background:var(--g-700)}.btn-ghost{color:var(--g-800);background:var(--surface);border-color:var(--border)}.btn-ghost:hover:not(:disabled){background:var(--g-50);border-color:var(--g-300)}.btn-danger{color:var(--red);background:var(--surface);border-color:#f1cdbb}.btn-sm{height:1.8rem;padding:0 .6rem;font-size:.8rem}.icon-btn{border:1px solid var(--border);border-radius:var(--r);background:var(--surface);width:2rem;height:2rem;color:var(--g-800);cursor:pointer;place-items:center;display:inline-grid}.icon-btn svg{width:1rem;height:1rem}.icon-btn:hover{background:var(--g-50)}.field{flex-direction:column;gap:.3rem;min-width:0;display:flex}.field>span{color:var(--muted);font-size:.74rem;font-weight:600}.input{border:1px solid var(--border);border-radius:var(--r);background:var(--surface);width:100%;height:2.25rem;padding:0 .65rem;font-size:.9rem;transition:border-color .15s,box-shadow .15s}textarea.input{resize:vertical;height:auto;min-height:4.5rem;padding:.5rem .65rem;line-height:1.45}.input:focus{border-color:var(--g-500);outline:none;box-shadow:0 0 0 3px #27935f26}.input:disabled{background:var(--g-50);color:var(--muted)}.form{gap:.85rem;display:grid}.row{grid-template-columns:repeat(var(--n,2), minmax(0, 1fr));gap:.75rem;display:grid}@media (width<=560px){.row{grid-template-columns:1fr 1fr}}.check{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.5rem;font-size:.88rem;display:inline-flex}.check input{width:1rem;height:1rem;accent-color:var(--g-600)}.sub-title{letter-spacing:.08em;text-transform:uppercase;color:var(--g-700);margin-top:.4rem;font-size:.72rem;font-weight:700}.seg{border:1px solid var(--border);background:var(--surface);display:inline-flex}.seg button{border:0;border-right:1px solid var(--border);height:2rem;color:var(--muted);cursor:pointer;background:0 0;padding:0 .85rem;font-size:.82rem;font-weight:600}.seg button:last-child{border-right:0}.seg button.on{color:#fff;background:var(--g-700)}.tabs{border-bottom:1px solid var(--border);background:var(--surface);z-index:15;padding:0 1.6rem;display:flex;position:sticky;top:60px;overflow-x:auto}.tabs button{height:2.6rem;color:var(--muted);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-bottom:2px solid #0000;padding:0 1rem;font-size:.86rem;font-weight:600}.tabs button.on{color:var(--g-800);border-bottom-color:var(--g-600)}@media (width<=860px){.tabs{padding:0 .5rem}}.badge{background:var(--g-50);height:1.35rem;color:var(--g-800);border:1px solid var(--g-100);white-space:nowrap;align-items:center;gap:.3rem;padding:0 .45rem;font-size:.72rem;font-weight:600;display:inline-flex}.badge.warn{background:var(--amber-soft);color:var(--amber);border-color:#f1e0bb}.badge.bad{background:var(--red-soft);color:var(--red);border-color:#f4d3c3}.badge.mute{color:var(--muted);border-color:var(--line);background:#f2f4f3}.grp{white-space:nowrap;align-items:center;gap:.35rem;font-size:.8rem;font-weight:600;display:inline-flex}.grp i{width:.55rem;height:.55rem}.table-wrap{overflow-x:auto}table.t{border-collapse:collapse;width:100%;font-size:.86rem}.t th{text-align:left;color:var(--muted);background:var(--g-50);border-bottom:1px solid var(--border);white-space:nowrap;padding:.55rem .75rem;font-size:.72rem;font-weight:600}.t td{border-bottom:1px solid var(--line);white-space:nowrap;padding:.55rem .75rem}.t tr:last-child td{border-bottom:0}.t tbody tr.link{cursor:pointer}.t tbody tr.link:hover td{background:var(--g-50)}.t .num{text-align:right}.t .code{color:var(--g-800);font-weight:700}.t td.wkc{padding:2px}.muted{color:var(--muted)}.ok{color:var(--g-600)}.toolbar{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.toolbar .input{width:auto;min-width:12rem}.mt{border-collapse:collapse;width:100%;font-size:.84rem}.mt th,.mt td{border:1px solid var(--line);padding:0}.mt th{color:var(--muted);background:var(--g-50);text-align:center;white-space:nowrap;padding:.4rem .5rem;font-size:.72rem;font-weight:600}.mt th.l,.mt td.l{text-align:left;white-space:nowrap;padding:.35rem .6rem}.mt td.l small{color:var(--muted);font-size:.7rem;display:block}.mt input{text-align:right;background:0 0;border:0;width:100%;min-width:3.6rem;height:2rem;padding:0 .45rem}.mt input:focus{outline:2px solid var(--g-500);outline-offset:-2px;background:#fff}.mt input:disabled{color:var(--text)}.mt input::placeholder{color:#b9c6bf}.mt td.calc{text-align:right;color:var(--g-800);background:var(--g-50);min-width:4rem;padding:0 .55rem;font-weight:700}.mt .sep{border-left:2px solid var(--border)}.wk{cursor:pointer;border:0;place-items:center;width:100%;min-width:2.6rem;height:2rem;font-size:.78rem;font-weight:600;display:grid}.wk.full{background:var(--g-600);color:#fff}.wk.part{background:var(--g-100);color:var(--g-800)}.wk.zero{background:var(--red-soft);color:var(--red)}.wk.todo{color:#b5c2bb;outline:1px dashed var(--border);outline-offset:-3px;background:#fff}.wk.future{color:#d5ddd8;cursor:default;background:#fafbfa}.wk.now{box-shadow:inset 0 -3px 0 var(--amber)}.bar{background:var(--line);min-width:4rem;height:.45rem}.bar>i{background:var(--g-500);height:100%;display:block}.list{flex-direction:column;display:flex}.list a,.list .li{border-bottom:1px solid var(--line);align-items:center;gap:.7rem;padding:.6rem 1rem;display:flex}.list a:hover{background:var(--g-50)}.list>:last-child{border-bottom:0}.list .right{margin-left:auto}.empty{color:var(--muted);padding:1.4rem 1rem;font-size:.86rem}.kv{grid-template-columns:max-content 1fr;gap:.45rem 1.2rem;font-size:.88rem;display:grid}.kv dt{color:var(--muted)}.kv dd{margin:0;font-weight:600}.fails{color:var(--red);margin:0;padding-left:1.1rem;font-size:.84rem}.save-bar{z-index:10;background:var(--surface);border-top:1px solid var(--border);justify-content:flex-end;align-items:center;gap:.6rem;padding:.7rem 1rem;display:flex;position:sticky;bottom:0}@media (width<=860px){.save-bar{bottom:calc(3.7rem + var(--safe-bottom))}}.overlay{z-index:50;background:#07241973;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--border);flex-direction:column;width:min(560px,100%);max-height:calc(100vh - 2rem);display:flex;box-shadow:0 20px 50px #07241940}.modal.wide{width:min(820px,100%)}.modal-head{border-bottom:1px solid var(--line);align-items:center;gap:.7rem;padding:.85rem 1rem;display:flex}.modal-head h2{font-size:1rem;font-weight:700}.modal-head .icon-btn{border:0;margin-left:auto}.modal-body{padding:1rem;overflow-y:auto}.modal-foot{border-top:1px solid var(--line);justify-content:flex-end;gap:.5rem;padding:.75rem 1rem;display:flex}.toast{z-index:70;color:#fff;background:var(--g-900);padding:.6rem 1rem;font-size:.86rem;font-weight:500;position:fixed;bottom:1.4rem;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #0724194d}.toast.err{background:var(--red)}@media (width<=860px){.toast{bottom:calc(4.5rem + var(--safe-bottom))}}.error{color:var(--red);font-size:.84rem}.login{background:var(--g-900);place-items:center;min-height:100%;padding:1.5rem;display:grid}.login-card{background:var(--surface);width:min(360px,100%);padding:1.8rem}.login-card .brand{color:var(--g-900);padding:0 0 1.4rem}.login-card .btn{width:100%;height:2.5rem}
