:root{--blue: #2f6bd6;--blue-600: #2559bd;--blue-50: #eaf1fc;--blue-100: #d8e6fb;--bg: #f5f8fd;--surface: #ffffff;--ink: #1e2a3a;--muted: #6b7a90;--line: #e6ecf5;--ok: #1f9d6b;--ok-bg: #e7f6ef;--warn: #b7791f;--warn-bg: #fdf3e0;--danger: #d6485f;--danger-bg: #fdecef;--mint: #e6f7f0;--amber: #fff4e0;--lilac: #efeafe;--shadow: 0 1px 2px rgba(20, 40, 80, .04), 0 6px 20px rgba(20, 40, 80, .06);--radius: 12px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased}a{color:var(--blue)}h1{font-size:20px;margin:0;font-weight:700}h2{font-size:16px;margin:0 0 12px;font-weight:650}h3{font-size:13px;margin:0 0 4px;font-weight:650}.shell{display:grid;grid-template-columns:248px 1fr;min-height:100vh}.sidebar{background:linear-gradient(180deg,#fff,#fbfdff);border-right:1px solid var(--line);padding:18px 14px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:10px;padding:6px 8px 16px}.brand .logo{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,var(--blue),#5b8eea);color:#fff;display:grid;place-items:center;font-weight:800;font-size:15px;box-shadow:var(--shadow)}.brand .name{font-weight:800;letter-spacing:.2px}.brand .sub{font-size:11px;color:var(--muted)}.nav-section{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted);margin:14px 8px 4px}.nav-item{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:9px;color:var(--ink);text-decoration:none;font-size:14px;font-weight:500;cursor:pointer;border:none;background:none;width:100%;text-align:left}.nav-item:hover{background:var(--blue-50)}.nav-item.active{background:var(--blue);color:#fff;box-shadow:var(--shadow)}.nav-item .ico{width:18px;text-align:center}.nav-spacer{flex:1}.main{display:flex;flex-direction:column;min-width:0}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 24px;border-bottom:1px solid var(--line);background:var(--surface);position:sticky;top:0;z-index:10}.content{padding:24px;max-width:1180px;width:100%;margin:0 auto}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.spread{justify-content:space-between}.muted{color:var(--muted);font-size:13px}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:18px;margin-bottom:18px;box-shadow:var(--shadow)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px}button{font:inherit;padding:8px 13px;border-radius:9px;border:1px solid var(--line);background:#fff;color:var(--ink);cursor:pointer;font-weight:550;transition:.12s}button:hover{border-color:var(--blue);background:var(--blue-50)}button.primary{background:var(--blue);color:#fff;border-color:var(--blue)}button.primary:hover{background:var(--blue-600)}button.ghost{border-color:transparent;background:transparent}button.danger{color:var(--danger);border-color:var(--danger-bg);background:var(--danger-bg)}button.danger:hover{background:#fbdde2}button:disabled{opacity:.5;cursor:not-allowed}button.sm{padding:5px 9px;font-size:12px}input,select{font:inherit;padding:7px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--ink)}input:focus,select:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-50)}input[type=number]{width:72px}label.check{display:inline-flex;align-items:center;gap:6px;font-size:13px}table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}th{color:var(--muted);font-weight:600;font-size:12px}tr:hover td{background:#fbfcfe}.badge{font-size:11px;padding:2px 8px;border-radius:20px;background:var(--blue-50);color:var(--blue-600);font-weight:600}.badge.gray{background:#eef2f7;color:var(--muted)}.pill{font-size:12px;padding:3px 9px;border-radius:20px;border:1px solid var(--line);display:inline-flex;gap:5px;align-items:center;cursor:pointer}.pill.on{background:var(--blue);color:#fff;border-color:var(--blue)}.note{background:var(--amber);border:1px solid #f3e1b0;color:#7a5b13;padding:11px 13px;border-radius:10px;font-size:13px}.note.info{background:var(--blue-50);border-color:var(--blue-100);color:var(--blue-600)}.alert-strong{background:var(--danger-bg);border:2px solid var(--danger);color:#7a1f1f;padding:12px 14px;border-radius:10px;font-weight:600}.ok{color:var(--ok)}.warn{color:var(--warn)}.err{color:var(--danger)}.stepper{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}.step{display:flex;align-items:center;gap:9px;padding:9px 14px;border-radius:10px;border:1px solid var(--line);background:#fff;cursor:pointer;font-size:13px;font-weight:550}.step:hover{border-color:var(--blue)}.step.active{background:var(--blue);color:#fff;border-color:var(--blue);box-shadow:var(--shadow)}.step .num{width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:var(--blue-50);color:var(--blue-600);font-weight:700;font-size:12px}.step.active .num{background:#ffffff40;color:#fff}.step .sbadge{font-size:10px;padding:1px 6px;border-radius:10px;background:var(--ok-bg);color:var(--ok)}.step.active .sbadge{background:#fff3;color:#fff}.metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:14px}.metric{background:#fbfcff;border:1px solid var(--line);border-radius:10px;padding:12px 14px}.metric b{font-size:22px;display:block;line-height:1.1}.metric span{font-size:12px;color:var(--muted)}.board{display:flex;gap:12px;overflow-x:auto;padding-bottom:10px}.col{min-width:210px;flex:0 0 210px;background:#fbfcfe;border:1px solid var(--line);border-radius:10px;padding:9px}.col.over{border-color:var(--blue);background:var(--blue-50)}.card{background:#fff;border:1px solid var(--line);border-radius:8px;padding:6px 8px;margin-top:6px;font-size:12px;cursor:grab}.card:hover{border-color:var(--blue)}.card.locked{border-left:3px solid var(--blue)}.center{min-height:100vh;display:grid;place-items:center}.modal-bg{position:fixed;top:0;right:0;bottom:0;left:0;background:#141e3266;display:grid;place-items:center;z-index:50}.empty{text-align:center;padding:40px;color:var(--muted)}.proj-card{cursor:pointer;transition:.12s}.proj-card:hover{border-color:var(--blue);transform:translateY(-1px)}.login-wrap{display:grid;grid-template-columns:1.05fr .95fr;min-height:100vh}@media (max-width: 820px){.login-wrap{grid-template-columns:1fr}.login-aside{display:none}}.login-aside{position:relative;overflow:hidden;color:#fff;padding:56px 52px;display:flex;flex-direction:column;justify-content:center;gap:14px;background:linear-gradient(150deg,#2f6bd6,#4f86e8 45%,#7aa7f0)}.login-logo{height:52px;padding:0 18px;border-radius:14px;display:inline-flex;align-items:center;width:fit-content;white-space:nowrap;background:#ffffff2e;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);font-weight:800;font-size:19px;letter-spacing:.3px;margin-bottom:8px;border:1px solid rgba(255,255,255,.25)}.login-title{font-size:34px;font-weight:800;margin:0;letter-spacing:-.5px}.login-tag{font-size:16px;opacity:.92;max-width:360px;line-height:1.5;margin:0 0 8px}.login-points{list-style:none;padding:0;margin:10px 0 0;display:flex;flex-direction:column;gap:12px}.login-points li{display:flex;align-items:center;gap:12px;font-size:14px;opacity:.96}.login-points li span{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:#ffffff29;border:1px solid rgba(255,255,255,.22);font-size:16px}.login-blob{position:absolute;border-radius:50%;filter:blur(8px);opacity:.25;pointer-events:none}.login-blob.b1{width:320px;height:320px;background:#fff;top:-120px;right:-90px;opacity:.14}.login-blob.b2{width:220px;height:220px;background:#bcd4fb;bottom:-70px;left:-50px;opacity:.3}.login-form-side{display:grid;place-items:center;background:var(--bg);padding:24px}.login-card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:32px 30px;box-shadow:var(--shadow)}.login-label{display:block;font-size:12px;font-weight:600;color:var(--muted);margin:14px 0 5px}.login-card input{width:100%;padding:11px 12px}
