*{box-sizing:border-box;margin:0;padding:0}
:root{
  --p:#2563eb;--p-dk:#1d4ed8;--p-lt:#3b82f6;--p-glow:#60a5fa;
  --p50:#eff6ff;--p100:#dbeafe;--p200:#bfdbfe;
  --acc:#06b6d4;--acc-lt:#22d3ee;
  --teal:#10b981;--teal-lt:#d1fae5;--teal-dk:#065f46;
  --amber:#f59e0b;--amber-lt:#fef3c7;--amber-dk:#92400e;
  --red:#ef4444;--red-lt:#fee2e2;--red-dk:#991b1b;
  --purple:#8b5cf6;--purple-lt:#ede9fe;
  --orange:#f97316;--orange-lt:#fff7ed;
  --dk:#0f172a;--dk8:#1e293b;--dk7:#334155;--dk6:#475569;
  --g50:#f8fafc;--g100:#f1f5f9;--g200:#e2e8f0;--g300:#cbd5e1;--g400:#94a3b8;--g500:#64748b;
  --bg:#ffffff;--bgs:#f8fafc;
  --brd:#e8e8e8;--brd-h:rgba(37,99,235,0.3);
  --r:12px;--rs:8px;--rf:9999px;
  --sh:0 1px 3px rgba(0,0,0,0.06);--shl:0 8px 32px rgba(0,0,0,0.12);
  --grad:linear-gradient(135deg,#2563eb,#06b6d4);
  --tr:all .2s ease;
  --sb-bg:#f9f9f9;--sb-brd:#ebebeb;--sb-hover:#efefef;--sb-active:#e8e8e8;--sb-text:#353535;--sb-text2:#6e6e6e;--sb-text3:#999;
}
html{scroll-behavior:smooth}
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--dk);min-height:100vh;display:flex}

/* === SIDEBAR — OpenAI-style light === */
.sb{width:260px;background:var(--sb-bg);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0;overflow-y:auto;z-index:100;border-right:1px solid var(--sb-brd)}
.sb::-webkit-scrollbar{width:4px}.sb::-webkit-scrollbar-thumb{background:var(--g300);border-radius:4px}
.sb-logo{padding:16px 16px 12px;display:flex;align-items:center;gap:10px;cursor:pointer}
.sb-logo-ic{width:32px;height:32px;background:var(--dk);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;color:#fff;font-weight:700;flex-shrink:0}
.sb-logo-tx{font-weight:700;font-size:15px;color:var(--sb-text);letter-spacing:-.3px}
.sb-logo-sub{font-size:10px;color:var(--sb-text3);font-weight:500;letter-spacing:.5px;text-transform:uppercase;margin-top:1px}

/* Sections */
.sb-sec{padding:0 8px}
.sb-lbl{font-size:14px;letter-spacing:-.1px;color:var(--sb-text);padding:8px 10px;margin-top:2px;font-weight:600;cursor:pointer;border-radius:8px;transition:var(--tr);display:flex;align-items:center;gap:10px;user-select:none}
.sb-lbl:hover{background:var(--sb-hover)}
.sb-lbl.open{color:var(--dk)}
.sb-lbl span{font-size:16px;width:20px;text-align:center;flex-shrink:0;opacity:.7}
.sb-arr{width:14px;height:14px;margin-left:auto;fill:none;stroke:var(--sb-text3);stroke-width:2;transition:transform .2s ease;flex-shrink:0}
.sb-lbl.open .sb-arr{transform:rotate(180deg);stroke:var(--sb-text)}
.sb-sub{max-height:0;overflow:hidden;transition:max-height .3s ease}
.sb-sub.open{max-height:500px}

/* Items */
.sb-item{display:flex;align-items:center;gap:10px;padding:7px 12px 7px 40px;border-radius:8px;cursor:pointer;color:var(--sb-text2);font-size:14px;font-weight:400;transition:var(--tr);margin-bottom:1px}
.sb-item:hover{background:var(--sb-hover);color:var(--sb-text)}
.sb-item.act{background:var(--sb-active);color:var(--dk);font-weight:500}
.sb-item svg{width:16px;height:16px;flex-shrink:0;opacity:.5}
.sb-item.act svg{opacity:.85}
.sb-item .badge{margin-left:auto;background:var(--p);color:#fff;font-size:10px;font-weight:600;padding:2px 7px;border-radius:var(--rf);min-width:20px;text-align:center}

/* Dashboard top-level item */
.sb-dash{display:flex;align-items:center;gap:10px;padding:8px 10px;margin:4px 8px 2px;border-radius:8px;cursor:pointer;color:var(--sb-text);font-size:14px;font-weight:500;transition:var(--tr)}
.sb-dash:hover{background:var(--sb-hover)}
.sb-dash.act{background:var(--sb-active);font-weight:600}
.sb-dash svg,.sb-dash span{width:20px;height:20px;font-size:16px;text-align:center;flex-shrink:0;opacity:.7}

/* Footer */
.sb-ft{margin-top:auto;padding:12px 8px;border-top:1px solid var(--sb-brd)}
.sb-user{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;cursor:pointer;transition:var(--tr)}
.sb-user:hover{background:var(--sb-hover)}
.sb-av{width:32px;height:32px;border-radius:50%;background:var(--dk);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#fff;flex-shrink:0}
.sb-uname{font-size:13px;color:var(--sb-text);font-weight:600}
.sb-urole{font-size:11px;color:var(--sb-text3)}
.sb-logout{display:flex;align-items:center;gap:8px;width:100%;padding:8px 10px;margin-top:4px;border:none;border-radius:8px;background:transparent;color:var(--sb-text3);font-size:13px;font-weight:400;cursor:pointer;transition:var(--tr);font-family:inherit}
.sb-logout:hover{background:var(--sb-hover);color:var(--red)}
.sb-logout svg{width:16px;height:16px;opacity:.6}
.hidden{display:none!important}

/* === MAIN === */
.mn{margin-left:260px;flex:1;min-height:100vh;display:flex;flex-direction:column;background:var(--bg)}
.tb{display:flex;align-items:center;gap:12px;padding:14px 28px;background:var(--bg);border-bottom:1px solid var(--brd);position:sticky;top:0;z-index:50}
.tb-title{font-size:18px;font-weight:700;flex:1;letter-spacing:-.3px;color:var(--dk)}
.tb-srch{display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:10px;border:1px solid var(--brd);background:var(--bg);min-width:220px;transition:var(--tr)}
.tb-srch:focus-within{border-color:var(--p);box-shadow:0 0 0 3px rgba(37,99,235,.08)}
.tb-srch input{border:0;outline:0;background:0;font:inherit;font-size:13px;color:var(--dk);width:100%}
.tb-srch svg{width:14px;height:14px;color:var(--g400);flex-shrink:0}
.btn{display:inline-flex;align-items:center;gap:7px;padding:8px 16px;border-radius:8px;border:1px solid var(--brd);background:var(--bg);font:500 13px 'Inter',sans-serif;cursor:pointer;color:var(--dk);transition:var(--tr)}
.btn:hover{border-color:var(--brd-h);background:var(--p50);color:var(--p)}
.btn.pr{background:var(--dk);color:#fff;border-color:var(--dk)}
.btn.pr:hover{background:var(--dk8);transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,.15)}
.btn.dn{background:var(--teal);color:#fff;border:0}
.btn.dn:hover{background:var(--teal-dk)}
.btn.wr{background:var(--amber);color:#fff;border:0}
.btn.wr:hover{background:var(--amber-dk)}
.btn svg{width:14px;height:14px}
.noti{position:relative;width:36px;height:36px;border-radius:8px;border:1px solid var(--brd);background:var(--bg);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:var(--tr)}
.noti:hover{border-color:var(--brd-h);background:var(--g50)}
.noti svg{width:16px;height:16px;color:var(--dk6)}
.noti .dot{position:absolute;top:6px;right:6px;width:7px;height:7px;background:var(--red);border-radius:50%;border:2px solid var(--bg)}

.ct{padding:24px 28px;flex:1;overflow-y:auto}

/* === CARDS/GRIDS === */
.kpi-g{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px}
.kpi{background:var(--bg);border-radius:var(--r);padding:20px;border:1px solid var(--brd);transition:var(--tr);cursor:pointer}
.kpi:hover{border-color:var(--g300);box-shadow:var(--sh)}
.kpi-ic{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;margin-bottom:12px;font-size:18px}
.kpi-ic.bl{background:var(--p50);color:var(--p)}.kpi-ic.tl{background:var(--teal-lt);color:var(--teal)}.kpi-ic.am{background:var(--amber-lt);color:var(--amber)}.kpi-ic.pu{background:var(--purple-lt);color:var(--purple)}.kpi-ic.rd{background:var(--red-lt);color:var(--red)}.kpi-ic.or{background:var(--orange-lt);color:var(--orange)}
.kpi-lb{font-size:12px;color:var(--g500);font-weight:500;margin-bottom:6px}
.kpi-val{font-size:26px;font-weight:800;letter-spacing:-1px;line-height:1;color:var(--dk)}
.kpi-dl{font-size:11px;margin-top:6px;display:flex;align-items:center;gap:4px;font-weight:600}
.kpi-dl.up{color:var(--teal)}.kpi-dl.dn{color:var(--red)}

.pnl{background:var(--bg);border:1px solid var(--brd);border-radius:var(--r);padding:20px;transition:var(--tr);margin-bottom:16px}
.pnl:hover{border-color:var(--g300)}
.pnl-t{font-size:14px;font-weight:700;margin-bottom:16px;display:flex;align-items:center;justify-content:space-between;letter-spacing:-.2px;color:var(--dk)}
.pnl-t a,.pnl-t button.lnk{font-size:12px;color:var(--p);font-weight:600;cursor:pointer;text-decoration:none;transition:var(--tr);background:none;border:none;font-family:inherit}
.two{display:grid;grid-template-columns:1.5fr 1fr;gap:16px;margin-bottom:16px}
.three{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:16px}

/* === TABLE === */
.tbl{width:100%;border-collapse:collapse}
.tbl th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--g400);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--brd)}
.tbl td{padding:12px;font-size:13px;border-bottom:1px solid var(--brd);vertical-align:middle;color:var(--dk7)}
.tbl tr{transition:var(--tr);cursor:pointer}
.tbl tbody tr:hover{background:var(--g50)}
.tbl .status{display:inline-block;padding:3px 10px;border-radius:var(--rf);font-size:11px;font-weight:600}
.st-ok{background:var(--teal-lt);color:var(--teal-dk)}.st-warn{background:var(--amber-lt);color:var(--amber-dk)}.st-err{background:var(--red-lt);color:var(--red-dk)}.st-info{background:var(--p100);color:var(--p-dk)}

/* === TABS === */
.tabs{display:flex;gap:0;margin-bottom:16px;border-bottom:1px solid var(--brd)}
.tab{font-size:13px;padding:8px 16px;cursor:pointer;color:var(--dk6);border-bottom:2px solid transparent;margin-bottom:-1px;font-weight:500;transition:var(--tr)}
.tab.act{color:var(--p);border-bottom-color:var(--p);font-weight:600}.tab:hover{color:var(--dk)}

/* === MODAL === */
.modal-bg{display:none;position:fixed;inset:0;background:rgba(0,0,0,.4);backdrop-filter:blur(4px);z-index:9999;align-items:center;justify-content:center;animation:fi .15s}
.modal-bg.show{display:flex}
.modal{background:var(--bg);border-radius:16px;width:90%;max-width:640px;max-height:85vh;overflow-y:auto;box-shadow:0 16px 48px rgba(0,0,0,.15);animation:su .25s}
.modal-h{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid var(--brd)}
.modal-h h3{font-size:18px;font-weight:700;color:var(--dk)}
.modal-x{width:32px;height:32px;border-radius:8px;border:1px solid var(--brd);background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--dk6);transition:var(--tr);font-size:16px}
.modal-x:hover{background:var(--red-lt);border-color:var(--red);color:var(--red)}
.modal-b{padding:24px}
.modal-f{padding:16px 24px;border-top:1px solid var(--brd);display:flex;gap:10px;justify-content:flex-end}
.fg{margin-bottom:16px}
.fl{display:block;font-size:13px;font-weight:600;color:var(--dk6);margin-bottom:6px}
.fi{width:100%;padding:10px 14px;border-radius:8px;border:1px solid var(--brd);background:var(--bg);font:14px 'Inter',sans-serif;color:var(--dk);transition:var(--tr);outline:none}
.fi:focus{border-color:var(--p);box-shadow:0 0 0 3px rgba(37,99,235,.1)}
select.fi{appearance:none;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2.5'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}
.fr{display:grid;grid-template-columns:1fr 1fr;gap:14px}
textarea.fi{resize:vertical;min-height:80px}

/* === PROGRESS BAR === */
.prog{height:6px;background:var(--g200);border-radius:3px;overflow:hidden}
.prog-f{height:100%;border-radius:3px;background:var(--p);transition:width .5s}

/* === TIMELINE === */
.tl-item{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid var(--brd)}.tl-item:last-child{border-bottom:none}
.tl-time{font-size:11px;color:var(--g400);min-width:50px;font-weight:600;padding-top:2px}
.tl-dot{display:flex;flex-direction:column;align-items:center}.tl-dot-c{width:8px;height:8px;border-radius:50%;background:var(--p);box-shadow:0 0 0 3px var(--p100);margin-top:4px}
.tl-line{width:2px;background:var(--p100);flex:1;margin-top:4px}.tl-body{flex:1}
.tl-tx{font-size:13px;font-weight:500;line-height:1.5}.tl-au{font-size:11px;color:var(--dk6);margin-top:2px}

/* === FIN ROW === */
.fn-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--brd);font-size:13px}.fn-row:last-child{border-bottom:none}
.fn-lb{color:var(--dk6);font-weight:500}.fn-val{font-weight:700}.fn-val.grn{color:var(--teal)}.fn-val.red{color:var(--red)}

/* === CHART BARS === */
.bars{display:flex;gap:4px;align-items:flex-end;height:56px;margin:14px 0 6px}
.bar-c{display:flex;flex-direction:column;align-items:center;gap:4px;flex:1}
.bar-b{width:100%;border-radius:4px 4px 0 0;background:var(--g200);transition:var(--tr)}.bar-b.fill{background:var(--p)}
.bar-c:hover .bar-b{background:var(--g300)}.bar-c:hover .bar-b.fill{opacity:.85}
.bar-m{font-size:10px;color:var(--g400);font-weight:500}

/* === CALENDAR === */
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal-hd{font-size:11px;font-weight:600;color:var(--g400);text-align:center;padding:8px 4px;text-transform:uppercase}
.cal-day{padding:8px 4px;text-align:center;font-size:13px;border-radius:8px;cursor:pointer;transition:var(--tr);min-height:40px;display:flex;align-items:center;justify-content:center}
.cal-day:hover{background:var(--g100)}.cal-day.today{background:var(--dk);color:#fff;font-weight:700}
.cal-day.has-ev{position:relative}.cal-day.has-ev::after{content:'';position:absolute;bottom:4px;width:4px;height:4px;border-radius:50%;background:var(--p)}
.cal-day.other{color:var(--g300)}

/* === GANTT === */
.gantt-row{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid var(--brd)}
.gantt-lb{width:160px;font-size:12px;font-weight:600;flex-shrink:0}.gantt-bar-bg{flex:1;height:24px;background:var(--g100);border-radius:6px;position:relative;overflow:hidden}
.gantt-bar{height:100%;border-radius:6px;background:var(--p);position:absolute;top:0;transition:width .5s}.gantt-pct{font-size:11px;font-weight:600;width:40px;text-align:right;flex-shrink:0}

/* === TOAST === */
.toast{position:fixed;top:24px;right:24px;padding:14px 20px;background:var(--dk);color:#fff;border-radius:12px;font-size:13px;font-weight:500;display:none;z-index:99999;box-shadow:var(--shl);animation:slideDown .3s;align-items:center;gap:10px}
@keyframes slideDown{from{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}
.toast.show{display:flex}.toast.ok{border-left:4px solid var(--teal)}.toast.err{border-left:4px solid var(--red)}

/* === EMPTY/LOADING === */
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 20px;color:var(--g400)}.empty-ic{font-size:48px;margin-bottom:12px;opacity:.5}.empty-tx{font-size:14px;font-weight:500}
.loading{display:flex;align-items:center;justify-content:center;padding:60px;color:var(--g400);font-size:13px}
.loading::before{content:'';width:20px;height:20px;border:2px solid var(--g200);border-top-color:var(--p);border-radius:50%;margin-right:10px;animation:spin .6s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes fi{from{opacity:0}to{opacity:1}}
@keyframes su{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}

/* === ROW ACTIONS === */
.row-acts{white-space:nowrap;text-align:right}
.btn-sm{width:28px;height:28px;border:1px solid var(--brd);border-radius:6px;background:var(--bg);cursor:pointer;font-size:13px;display:inline-flex;align-items:center;justify-content:center;transition:var(--tr);padding:0;margin-left:4px}
.btn-sm.ed:hover{border-color:var(--p);background:var(--p50)}.btn-sm.del:hover{border-color:var(--red);background:var(--red-lt)}

/* === LOGIN SCREEN === */
.login-screen{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:#fff}
.login-card{position:relative;z-index:1;background:var(--bg);border-radius:16px;border:1px solid var(--brd);padding:40px 36px;width:380px;max-width:90vw;box-shadow:0 4px 24px rgba(0,0,0,.08)}
.login-logo{width:48px;height:48px;background:var(--dk);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:700;color:#fff;margin:0 auto 16px}
.login-title{text-align:center;font-size:24px;font-weight:700;color:var(--dk);letter-spacing:-.5px;margin:0}
.login-sub{text-align:center;color:var(--g500);font-size:13px;font-weight:400;margin:6px 0 28px}
.login-tabs{display:flex;gap:0;background:var(--g100);border-radius:10px;padding:3px;margin-bottom:24px}
.login-tab{flex:1;padding:8px;border:none;border-radius:8px;background:transparent;color:var(--g500);font-size:13px;font-weight:600;cursor:pointer;transition:var(--tr);font-family:inherit}
.login-tab.active{background:var(--bg);color:var(--dk);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.login-tab:hover:not(.active){color:var(--dk7)}
.login-field{margin-bottom:16px}
.login-field label{display:block;font-size:13px;font-weight:600;color:var(--dk7);margin-bottom:6px}
.login-field input{width:100%;padding:10px 14px;border:1px solid var(--brd);border-radius:8px;background:var(--bg);color:var(--dk);font-size:14px;font-family:inherit;transition:var(--tr);box-sizing:border-box}
.login-field input:focus{outline:none;border-color:var(--p);box-shadow:0 0 0 3px rgba(37,99,235,.1)}
.login-field input::placeholder{color:var(--g400)}
.login-error{color:var(--red);font-size:12px;font-weight:500;min-height:18px;margin-bottom:8px}
.login-btn{width:100%;padding:12px;border:none;border-radius:8px;background:var(--dk);color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:var(--tr);font-family:inherit}
.login-btn:hover{background:var(--dk8)}
.login-btn:disabled{opacity:.5;cursor:not-allowed}
.login-link{background:none;border:none;color:var(--dk);font-size:13px;cursor:pointer;font-family:inherit;padding:4px 8px;transition:var(--tr)}
.login-link:hover{text-decoration:underline;opacity:.8}
.login-link:disabled{opacity:.4;cursor:not-allowed;text-decoration:none}
.login-divider{display:flex;align-items:center;gap:12px;margin:20px 0}.login-divider::before,.login-divider::after{content:'';flex:1;height:1px;background:var(--brd)}.login-divider span{color:var(--g400);font-size:13px;font-weight:500}
.login-footer{text-align:center;color:var(--g400);font-size:12px;margin-top:24px}

@media(max-width:1100px){.kpi-g{grid-template-columns:repeat(2,1fr)}.two{grid-template-columns:1fr}.three{grid-template-columns:1fr 1fr}}
@media(max-width:768px){.sb{display:none}.mn{margin-left:0}.kpi-g{grid-template-columns:1fr 1fr}.fr{grid-template-columns:1fr}}
