:root{--bg:#f4f6f5;--surface:#ffffff;--surface-2:#fafbfa;--border:#e4e8e6;--ink:#1c2b26;--ink-2:#5b6b64;--ink-3:#8a978f;--brand:#1f7a4d;--brand-d:#155f3b;--brand-l:#e8f3ec;--brand-tint:#f1f8f4;--blue:#2563eb;--blue-l:#e8f0fe;--amber:#b7791f;--amber-l:#fdf3e0;--red:#c0392b;--red-l:#fbeae8;--gray:#64748b;--gray-l:#eef1f4;--purple:#7c3aed;--purple-l:#f0e9fd;--teal:#0d9488;--teal-l:#e2f5f2;--shadow:0 1px 2px rgba(16,40,30,.05),0 1px 3px rgba(16,40,30,.06);--shadow-lg:0 10px 30px rgba(16,40,30,.12);--r:12px;--r-sm:8px;--sidebar:236px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}html,body{overflow-x:clip}body{background:var(--bg);color:var(--ink);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:-.01em}button{font-family:inherit;cursor:pointer}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#cdd6d1;border-radius:8px;border:2px solid var(--bg)}.app{display:flex;min-height:100vh;min-height:100dvh}.sidebar{width:var(--sidebar);flex-shrink:0;background:#13241c;color:#cfe0d6;position:fixed;inset:0 auto 0 0;display:flex;flex-direction:column;padding:18px 14px;gap:4px;overflow-y:auto}.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 18px}.brand .logo{width:34px;height:34px;border-radius:9px;background:linear-gradient(140deg,#2fa569,#1f7a4d);display:grid;place-items:center;font-size:18px;flex-shrink:0}.brand b{color:#fff;font-size:15px;letter-spacing:-.02em;line-height:1.1}.brand span{display:block;font-size:11px;color:#7fa890;font-weight:500}.nav-section{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:#6f8c7c;padding:14px 10px 4px}.nav a{display:flex;align-items:center;gap:11px;padding:8px 11px;border-radius:9px;color:#bcd2c5;font-weight:500;font-size:13.5px;transition:.12s}.nav a .ic{width:18px;text-align:center;opacity:.9;font-size:15px}.nav a:hover{background:#1d3528;color:#fff}.nav a.active{background:var(--brand);color:#fff;box-shadow:inset 0 0 0 1px #ffffff14}.nav a .badge{margin-left:auto;background:#2c4a39;color:#cdeede;font-size:11px;font-weight:600;padding:1px 7px;border-radius:20px}.nav a.active .badge{background:#ffffff38;color:#fff}.sidebar-foot{margin-top:auto;font-size:11px;color:#6f8c7c;padding:12px 10px 2px;border-top:1px solid #1f3a2c}.main{flex:1;margin-left:var(--sidebar);min-width:0;display:flex;flex-direction:column}.content,.content .grid,.content .grid>*,.card,.stat-grid,.page-head{min-width:0}.table-wrap{max-width:100%}.topbar{height:60px;background:#ffffffd9;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:16px;padding:0 26px;position:sticky;top:0;z-index:20}.topbar h1{font-size:17px}.topbar .crumb{color:var(--ink-3);font-size:13px;font-weight:500}.topbar .spacer{flex:1}.search-box{display:flex;align-items:center;gap:8px;background:var(--surface-2);border:1px solid var(--border);border-radius:9px;padding:7px 12px;width:240px;color:var(--ink-3)}.search-box input{border:0;background:transparent;outline:0;font-size:13px;width:100%;color:var(--ink)}.content{padding:24px 26px 60px;max-width:1480px;width:100%}.btn{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--border);background:var(--surface);color:var(--ink);padding:8px 14px;border-radius:9px;font-size:13px;font-weight:550;transition:.12s;white-space:nowrap}.btn:hover{border-color:#cfd8d3;background:var(--surface-2)}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover{background:var(--brand-d)}.btn.ghost{border-color:transparent;background:transparent;color:var(--ink-2)}.btn.ghost:hover{background:var(--gray-l)}.btn.sm{padding:5px 10px;font-size:12px;border-radius:7px}.btn.danger{color:var(--red);border-color:#f0cfca}.btn.danger:hover{background:var(--red-l)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-row{display:flex;gap:8px;flex-wrap:wrap}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow)}.card-pad{padding:18px}.card-head{display:flex;align-items:center;gap:10px;padding:15px 18px;border-bottom:1px solid var(--border)}.card-head h3{font-size:14.5px}.card-head .spacer{flex:1}.grid{display:grid;gap:16px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px}.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:15px 16px;box-shadow:var(--shadow);position:relative;overflow:hidden}.stat .label{font-size:12px;color:var(--ink-2);font-weight:550;display:flex;align-items:center;gap:7px}.stat .val{font-size:27px;font-weight:700;letter-spacing:-.02em;margin-top:7px;line-height:1}.num,.val,.pill-count{font-variant-numeric:tabular-nums}.ic-btn{display:inline-flex;align-items:center;gap:7px}.stat .sub{font-size:11.5px;color:var(--ink-3);margin-top:5px}.stat .ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;font-size:15px;flex-shrink:0}.stat.accent .val{color:var(--brand)}.stat.warn .val{color:var(--amber)}.stat.bad .val{color:var(--red)}.stat.click{cursor:pointer;transition:.12s}.stat.click:hover{border-color:#bcd6c8;box-shadow:var(--shadow-lg);transform:translateY(-1px)}.chip{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:20px;white-space:nowrap;line-height:1.4}.chip .dot{width:6px;height:6px;border-radius:50%;background:currentColor}.chip.green{background:var(--brand-l);color:var(--brand-d)}.chip.blue{background:var(--blue-l);color:#1e40af}.chip.amber{background:var(--amber-l);color:#92600c}.chip.red{background:var(--red-l);color:#a4271a}.chip.gray{background:var(--gray-l);color:#475569}.chip.purple{background:var(--purple-l);color:#5b21b6}.chip.teal{background:var(--teal-l);color:#0f766e}.table-wrap{overflow-x:auto;border-radius:var(--r)}table.tbl{width:100%;border-collapse:collapse;font-size:13px}.tbl th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);font-weight:650;padding:10px 14px;border-bottom:1px solid var(--border);background:var(--surface-2);position:sticky;top:0;white-space:nowrap}.tbl td{padding:11px 14px;border-bottom:1px solid #eef1ef;vertical-align:middle}.tbl tr:last-child td{border-bottom:0}.tbl tbody tr{transition:.1s}.tbl tbody tr:hover{background:var(--brand-tint)}.tbl tr.click{cursor:pointer}.tbl .muted{color:var(--ink-3)}.tbl .strong{font-weight:600}.num{font-variant-numeric:tabular-nums}.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:16px}.field{display:flex;flex-direction:column;gap:4px}.field label{font-size:11px;color:var(--ink-3);font-weight:600;text-transform:uppercase;letter-spacing:.04em}select,input[type=text],input[type=date],input[type=number],input[type=email],input[type=tel],textarea{font-family:inherit;font-size:13px;padding:8px 11px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--ink);outline:0}select:focus,input:focus,textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-l)}textarea{resize:vertical;min-height:70px}.seg{display:inline-flex;background:var(--gray-l);border-radius:9px;padding:3px}.seg button{border:0;background:transparent;padding:6px 13px;border-radius:7px;font-size:13px;font-weight:550;color:var(--ink-2)}.seg button.on{background:#fff;color:var(--ink);box-shadow:var(--shadow)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#14231c6b;z-index:60;display:flex;justify-content:center;align-items:flex-start;padding:60px 20px;overflow-y:auto;animation:fade .15s}.modal{background:var(--surface);border-radius:16px;box-shadow:var(--shadow-lg);width:100%;max-width:560px;animation:pop .18s}.modal-head{display:flex;align-items:center;padding:18px 22px;border-bottom:1px solid var(--border)}.modal-head h3{font-size:16px}.modal-head .x{margin-left:auto;border:0;background:var(--gray-l);width:30px;height:30px;border-radius:8px;font-size:16px;color:var(--ink-2)}.modal-body{padding:20px 22px;display:grid;gap:14px}.modal-foot{display:flex;gap:10px;justify-content:flex-end;padding:16px 22px;border-top:1px solid var(--border)}.drawer{position:fixed;inset:0 0 0 auto;width:min(560px,94vw);background:var(--bg);z-index:60;box-shadow:var(--shadow-lg);overflow-y:auto;animation:slide .2s}@keyframes fade{0%{opacity:0}}@keyframes pop{0%{opacity:0;transform:translateY(8px) scale(.98)}}@keyframes slide{0%{transform:translate(30px);opacity:.4}}.page-head{display:flex;align-items:flex-start;gap:16px;margin-bottom:20px}.page-head .spacer{flex:1}.page-head h2{font-size:21px}.page-head p{margin:3px 0 0;color:var(--ink-2);font-size:13px}.row{display:flex;gap:14px}.row.wrap{flex-wrap:wrap}.between{display:flex;align-items:center;justify-content:space-between;gap:12px}.muted{color:var(--ink-3)}.kv{display:grid;grid-template-columns:130px 1fr;gap:8px 14px;font-size:13px}.kv dt{color:var(--ink-3);font-weight:550}.kv dd{margin:0;color:var(--ink)}.bar{height:7px;border-radius:6px;background:var(--gray-l);overflow:hidden}.bar>i{display:block;height:100%;border-radius:6px;background:var(--brand)}.empty{text-align:center;padding:48px 20px;color:var(--ink-3)}.empty .big{font-size:30px;margin-bottom:10px}.pill-count{background:var(--gray-l);color:var(--ink-2);font-size:12px;font-weight:600;padding:2px 9px;border-radius:20px}.tag-list{display:flex;gap:6px;flex-wrap:wrap}.avatar{width:30px;height:30px;border-radius:50%;background:var(--brand-l);color:var(--brand-d);display:grid;place-items:center;font-size:12px;font-weight:700;flex-shrink:0}.spinner{width:30px;height:30px;border:3px solid var(--brand-l);border-top-color:var(--brand);border-radius:50%;animation:spin .7s linear infinite;margin:50px auto}@keyframes spin{to{transform:rotate(360deg)}}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--ink);color:#fff;padding:11px 20px;border-radius:10px;font-size:13.5px;font-weight:550;box-shadow:var(--shadow-lg);z-index:90;animation:pop .2s}.kanban{display:flex;gap:14px;overflow-x:auto;padding-bottom:14px}.kanban .col{flex:0 0 270px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r);display:flex;flex-direction:column;max-height:74vh}.kanban .col-head{padding:11px 13px;font-size:12.5px;font-weight:650;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--border)}.kanban .col-body{padding:9px;display:flex;flex-direction:column;gap:9px;overflow-y:auto}.jcard{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:11px 12px;box-shadow:var(--shadow);cursor:pointer;transition:.12s}.jcard:hover{border-color:#bcd6c8;box-shadow:var(--shadow-lg)}.jcard .t{font-weight:600;font-size:13px;margin-bottom:3px}.jcard .m{font-size:12px;color:var(--ink-3);display:flex;align-items:center;gap:6px;flex-wrap:wrap}.wx-strip{display:flex;align-items:center;gap:6px;padding:5px 12px;font-size:11.5px;font-weight:600;border-bottom:1px solid var(--border);color:var(--ink-2)}.wx-strip .wx-ic{font-size:14px}.wx-strip.good{background:var(--brand-l)}.wx-strip.caution{background:var(--amber-l);color:#92600c}.wx-strip.bad{background:var(--red-l);color:#a4271a}.jcard.wx-conflict{border-color:#e6a59c;box-shadow:0 0 0 2px var(--red-l)}@media (max-width:880px){:root{--sidebar:0px}.sidebar{transform:translate(-100%);transition:.2s;z-index:80;width:230px}.sidebar.open{transform:none}.main{margin-left:0}.menu-btn{display:inline-flex!important}}.menu-btn{display:none}@media (max-width:880px){.content{padding:18px 16px 60px}.page-head{flex-wrap:wrap}}@media (max-width:760px){.content{padding:14px 12px 72px}.content .grid{grid-template-columns:1fr!important}.stat-grid{grid-template-columns:repeat(2,1fr)!important;gap:10px}.stat{padding:13px}.stat .val{font-size:22px}.stat .label{font-size:11.5px}.page-head{flex-direction:column;align-items:stretch;gap:12px}.page-head .spacer{display:none}.page-head h2{font-size:19px}.btn-row{flex-wrap:wrap}.filters{flex-direction:column;align-items:stretch;gap:10px}.filters .field{flex:1 1 100%!important;width:100%}.filters .field input,.filters .field select{width:100%}.filters .seg{width:100%;overflow-x:auto}.btn{padding:11px 15px;font-size:13.5px}.btn.sm{padding:8px 12px;font-size:12.5px}input,select,textarea{font-size:16px;padding:10px 12px}.table-wrap{-webkit-overflow-scrolling:touch}.tbl th,.tbl td{padding:11px 12px;white-space:nowrap}.kv{grid-template-columns:1fr;gap:3px 0}.kv dt{margin-top:8px}.overlay{padding:0}.modal{max-width:100%!important;border-radius:16px 16px 0 0;margin-top:auto;animation:slideUp .2s}.modal-body .row{flex-direction:column;gap:14px}.drawer{width:100vw}.search-box{width:auto;flex:1}.topbar{padding:0 14px;gap:10px}.topbar .crumb{display:none}.kanban .col{flex:0 0 84vw}.row.wrap{flex-direction:column}}@media (max-width:760px){.tbl.stack thead{display:none}.tbl.stack tbody{display:block}.tbl.stack tr{display:block;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:10px 14px;margin:0 0 10px;box-shadow:var(--shadow)}.tbl.stack tr:last-child{margin-bottom:0}.tbl.stack td{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:7px 0;border:0!important;white-space:normal;text-align:right}.tbl.stack td:before{content:attr(data-label);color:var(--ink-3);font-size:10.5px;font-weight:650;text-transform:uppercase;letter-spacing:.04em;text-align:left;flex:0 0 auto}.tbl.stack td:first-child{justify-content:flex-start;text-align:left;font-size:15px;font-weight:600;padding:2px 0 9px;margin-bottom:6px;border-bottom:1px solid var(--border)!important}.tbl.stack td:first-child:before{display:none}.tbl.stack td.actions{padding-top:10px;margin-top:2px;border-top:1px solid var(--border)!important;justify-content:flex-end}.tbl.stack td.actions:before{display:none}.tbl.stack td.actions .btn-row{flex-wrap:wrap;justify-content:flex-end}.tbl.stack td[colspan]{justify-content:center;text-align:center;padding:14px 0}.tbl.stack td[colspan]:before{display:none}}@keyframes slideUp{0%{transform:translateY(40px);opacity:.5}}*{-webkit-tap-highlight-color:transparent}html{-webkit-text-size-adjust:100%}
