@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');
:root{--ink:#18213b;--muted:#788198;--line:#e8ebf3;--bg:#f5f7fb;--purple:#635bff;--purple-dark:#5148ec;--green:#20b486;--amber:#e9a52e;--red:#e85d69;--shadow:0 12px 35px rgba(28,39,76,.055)}*{box-sizing:border-box}body{margin:0;font-family:'DM Sans',sans-serif;color:var(--ink);background:var(--bg);font-size:14px}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-family:Manrope,sans-serif;letter-spacing:-.035em}button,input,select{font:inherit}a{color:inherit;text-decoration:none}.login-page{min-height:100vh;display:grid;place-items:center;background:radial-gradient(ellipse at 20% 20%,#282b6c 0,transparent 42%),radial-gradient(ellipse at 90% 80%,#1a6a80 0,transparent 35%),#11172f;overflow:hidden;position:relative}.login-orb{position:absolute;border-radius:50%;filter:blur(1px);opacity:.35;animation:float 9s ease-in-out infinite alternate}.orb-one{width:420px;height:420px;border:1px solid #9299ff;top:-130px;right:8%;box-shadow:0 0 100px #625bff55}.orb-two{width:300px;height:300px;background:linear-gradient(135deg,#645bff44,#29d5b744);bottom:-100px;left:4%;animation-delay:-3s}.login-wrap{position:relative;z-index:1;width:min(1050px,92vw);display:grid;grid-template-columns:1.1fr .8fr;align-items:center;gap:80px;padding:45px 0}.login-brand{color:#fff}.brand-mark{height:52px;width:52px;border-radius:16px;display:grid;place-items:center;background:linear-gradient(135deg,#756dff,#4d46d9);color:#fff;font:800 27px Manrope;box-shadow:0 10px 30px #635bff45}.eyebrow{font-size:10px;letter-spacing:.17em;font-weight:700;color:#929bb4;margin-bottom:12px}.login-brand .eyebrow{color:#a9b1ff;margin-top:35px}.login-brand h1{font-size:clamp(36px,4vw,55px);line-height:1.13;margin:0 0 20px;letter-spacing:-.055em}.login-brand h1 span{color:#9b9aff}.login-brand p{max-width:420px;color:#b8bfd4;font-size:15px;line-height:1.8}.login-points{display:flex;gap:18px;flex-wrap:wrap;margin-top:35px;color:#d8def2;font-size:12px}.login-points span{padding:10px 12px;border:1px solid #ffffff1f;border-radius:10px;background:#ffffff08}.login-card{background:#fff;border:1px solid #ffffff50;border-radius:24px;padding:36px;box-shadow:0 35px 100px #080d263d;animation:cardIn .7s cubic-bezier(.2,.8,.2,1) both}.login-card .eyebrow{color:var(--purple)}.login-card h2{font-size:30px;margin:0 0 8px}.muted,.login-card p{color:var(--muted)}label{display:block;font-size:12px;font-weight:700;margin:17px 0 8px;color:#3b4561}input,select{width:100%;min-width:0;border:1px solid #e1e5ef;border-radius:10px;background:#fff;padding:12px 13px;color:var(--ink);outline:none;transition:border .2s,box-shadow .2s}input:focus,select:focus{border-color:#8c85ff;box-shadow:0 0 0 3px #635bff18}.login-card input{padding:14px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:11px 15px;border:1px solid transparent;border-radius:10px;font-weight:700;font-size:12px;cursor:pointer;transition:transform .18s,background .18s,box-shadow .18s;white-space:nowrap}.btn:hover{transform:translateY(-1px)}.btn.primary{background:var(--purple);color:white;box-shadow:0 6px 15px #635bff24}.btn.primary:hover{background:var(--purple-dark)}.btn.secondary{background:white;border-color:#e3e7f0;color:#4a5470}.btn.danger{background:#fff0f1;border-color:#ffdbde;color:#c53e4c}.btn.full{width:100%;margin-top:25px;padding:14px}.secure-note{text-align:center;font-size:11px;color:#929bb0;margin-top:22px}.app-body{display:flex;min-height:100vh}.sidebar{width:245px;background:#fff;border-right:1px solid var(--line);padding:24px 15px;display:flex;flex-direction:column;flex-shrink:0;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:11px;padding:0 10px 30px}.brand-mark.small{width:39px;height:39px;border-radius:12px;font-size:20px;flex-shrink:0}.brand b{display:block;font:800 15px Manrope;letter-spacing:.05em}.brand small{display:block;font-size:9px;color:#8d95aa;letter-spacing:.12em;margin-top:3px}.nav-caption{font-size:9px;font-weight:700;color:#a4abc0;letter-spacing:.16em;padding:0 13px 12px}.sidebar nav{display:grid;gap:5px}.nav-link{display:flex;align-items:center;gap:12px;border:0;background:transparent;text-align:left;padding:12px 13px;border-radius:10px;color:#737d96;font-size:12px;font-weight:600;width:100%;cursor:pointer}.nav-link:hover{background:#f6f6ff;color:var(--purple)}.nav-link.active{background:#efefff;color:var(--purple);font-weight:700}.nav-icon{width:18px;font-size:17px;text-align:center}.nav-count{margin-left:auto;background:var(--purple);color:white;border-radius:20px;padding:2px 7px;font-size:10px}.sidebar-bottom{margin-top:auto}.side-user{display:flex;align-items:center;gap:10px;padding:16px 7px;border-top:1px solid var(--line)}.avatar{width:34px;height:34px;border-radius:11px;background:#eeedff;color:var(--purple);display:grid;place-items:center;font-weight:800}.side-user b{display:block;font-size:11px}.side-user small{display:block;color:#929bb0;font-size:10px;margin-top:4px}.logout{border-top:1px solid #f0f1f5;border-radius:0;color:#9b6270}.main{min-width:0;flex:1;padding:28px clamp(18px,3vw,44px) 50px;max-width:1800px;margin:0 auto}.topbar{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:30px}.topbar .eyebrow{margin-bottom:7px;font-size:9px}.topbar h1{font-size:26px;margin:0}.top-user{display:flex;align-items:center;gap:9px;color:#67718a;font-size:12px}.online-dot{width:7px;height:7px;border-radius:50%;background:#20b486;box-shadow:0 0 0 4px #20b48619}.role-chip,.pill{border:1px solid #e5e7f0;background:#fff;border-radius:30px;padding:6px 9px;color:#737d96;font-size:9px;font-weight:700;letter-spacing:.06em}.welcome-row{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:24px}.welcome-row h2{font-size:24px;margin:0 0 7px}.welcome-row p,.panel-head p{color:var(--muted);font-size:12px;margin:0}.wave{color:var(--purple)}.stat-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:20px}.stat-card,.panel{background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow)}.stat-card{padding:19px 20px}.stat-top{display:flex;align-items:center;justify-content:space-between;color:#7d869d;font-size:11px;font-weight:600}.stat-icon{width:33px;height:33px;border-radius:10px;display:grid;place-items:center;font-size:17px}.purple{background:#f0efff;color:var(--purple)}.amber{background:#fff6e3;color:#d79a23}.green{background:#e7faf3;color:#18a77b}.blue{background:#e9f5ff;color:#388fd1}.stat-card>strong{display:block;font:800 27px Manrope;margin:17px 0 6px;letter-spacing:-.04em}.stat-card .money-stat{font-size:19px;white-space:nowrap}.stat-card small{font-size:10px;color:#9aa2b5}.dashboard-grid{display:grid;grid-template-columns:1.35fr .8fr;gap:18px;margin-bottom:20px}.panel{padding:22px;margin-bottom:20px;min-width:0}.dashboard-grid .panel{margin:0}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:20px}.panel-head h3,.subsection-head h3,.signature-block h3{font-size:15px;margin:0 0 6px}.chart-panel canvas{max-height:245px}.chart-legend{display:flex;justify-content:center;gap:15px;font-size:10px;color:#7d869d;margin-top:15px}.dot{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px}.dot.pending{background:#f4b740}.dot.approved{background:#20b486}.dot.rejected{background:#ef6b73}.table-panel{padding:0;overflow:hidden}.table-panel>.panel-head{padding:22px 22px 0}.table-wrap{width:100%;overflow:auto}table{border-collapse:collapse;width:100%;font-size:11px;white-space:nowrap}th{text-align:left;color:#9199ad;font-weight:700;font-size:9px;letter-spacing:.07em;text-transform:uppercase;background:#fafbfe;padding:13px 18px;border-top:1px solid #f0f2f7;border-bottom:1px solid #edf0f5}td{padding:15px 18px;border-bottom:1px solid #f0f2f7;color:#4d5873}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:#fcfcff}td strong,td b{color:#28324c}td small{display:block;color:#a0a7b8;font-size:10px;margin-top:5px}.status{display:inline-flex;padding:5px 9px;border-radius:20px;font-size:9px;font-weight:700}.status-pending{background:#fff5df;color:#b98113}.status-approved{background:#e5f9f1;color:#16875f}.status-rejected{background:#fff0f1;color:#c84753}.status-draft{background:#f0f2f7;color:#68738a}.text-link{color:var(--purple);font-weight:700;font-size:11px;background:none;border:0;cursor:pointer}.empty{text-align:center;padding:35px;color:#929bb0}.searchbar{display:flex;gap:10px;padding:0 22px 18px}.searchbar input{max-width:420px}.form-panel{padding:24px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 18px}.form-grid label{margin-top:10px}.span-2{grid-column:span 2}.form-end{display:flex;align-items:end;padding-top:20px}.subsection-head{display:flex;align-items:center;justify-content:space-between;margin:28px 0 14px;padding-top:23px;border-top:1px solid var(--line)}.subsection-head p,.signature-block p{font-size:11px;color:var(--muted);margin:0}.line-row{display:grid;grid-template-columns:1fr 1fr 1.2fr .8fr 35px;gap:9px;margin-bottom:9px}.line-row input{font-size:12px;padding:10px}.remove-line{border:1px solid #f5dfe2;background:#fff5f6;color:#d25461;border-radius:9px;font-size:20px;cursor:pointer}.signature-block{display:grid;grid-template-columns:.8fr 1.2fr;gap:20px;margin-top:28px;padding-top:23px;border-top:1px solid var(--line)}.signature-pad{border:1px solid #dfe3ef;border-radius:12px;padding:9px;background:#fcfdff}.signature-pad canvas{display:block;width:100%;height:110px;touch-action:none;cursor:crosshair;background:linear-gradient(#fff,#fff) padding-box;border-bottom:1px dashed #e2e6f0}.signature-tools{display:flex;justify-content:space-between;align-items:center;color:#a0a7b8;font-size:10px;padding:7px 3px 0}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:24px}.approval-list{display:grid;gap:18px}.approval-card{margin:0}.approval-card .panel-head h3{margin:12px 0 6px}.amount-large{font:800 18px Manrope;color:#26314e}.approval-signatures{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:16px 0;border-bottom:1px solid var(--line)}.approval-signatures small,.signature-grid small{display:block;color:#929bb0;font-size:9px;letter-spacing:.06em}.approval-form{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px}.approval-form .signature-pad{grid-row:span 2}.approval-form>input{align-self:start}.compact canvas{height:82px}.approval-form .form-actions{margin:0;align-self:end}.invoice-toolbar{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:18px}.invoice-toolbar>div{display:flex;align-items:center;gap:10px}.inline-form{display:inline-flex}.invoice-paper{max-width:900px;margin:0 auto;background:#fff;border:1px solid #e9ecf3;padding:clamp(20px,4vw,48px);color:#25304b}.paper-brand{display:flex;align-items:center;gap:13px;padding-bottom:25px;border-bottom:2px solid #28335a}.paper-brand h2{font-size:17px;margin:0 0 5px}.paper-brand p{font-size:11px;color:#8a93a8;margin:0}.paper-no{margin-left:auto;text-align:right}.paper-no small,.paper-meta small{display:block;font-size:9px;letter-spacing:.08em;color:#8c95aa;margin-bottom:7px}.paper-no strong{font:800 16px Manrope}.paper-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;padding:25px 0}.paper-meta strong{font-size:11px}.invoice-paper h3{font-size:13px;margin:15px 0}.invoice-paper table th{background:#f7f8fc}.invoice-paper td{padding:12px 14px}.right{text-align:right}.totals{margin:18px 0 28px auto;width:min(300px,100%)}.totals>div{display:flex;justify-content:space-between;padding:9px 0;font-size:11px}.grand-total{border-top:1px solid #dfe3ed;font-size:13px!important;color:#292e60}.signature-grid{display:grid;grid-template-columns:1fr 1fr;gap:35px;margin-top:45px;padding-top:20px;border-top:1px solid #e7eaf2}.signature-grid>div{min-height:100px}.signature-grid b{display:block;font-size:11px;margin-top:5px}.sig-image{display:block;max-width:200px;width:100%;height:65px;object-fit:contain;object-position:left center;margin:7px 0}.unsigned{height:65px;display:flex;align-items:center;color:#a2a9b9;font-size:11px;font-style:italic}.paper-footer{border-top:1px solid #eef0f5;padding-top:15px;margin-top:25px;color:#a0a7b8;font-size:9px}.alert{padding:12px 15px;background:#fff0f1;color:#bd3e4b;border:1px solid #ffdadd;border-radius:10px;margin-bottom:18px;font-size:12px}.alert.warning{background:#fff7e6;color:#97680f;border-color:#f7e5b5}.small-btn{padding:7px 9px;font-size:10px}.enter{animation:fadeUp .45s ease both}@keyframes fadeUp{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}@keyframes cardIn{from{opacity:0;transform:translateY(18px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes float{to{transform:translate(25px,30px) scale(1.05)}}
@media(max-width:1100px){.sidebar{width:215px}.stat-grid{grid-template-columns:repeat(2,1fr)}.dashboard-grid{grid-template-columns:1fr}.money-stat{font-size:18px!important}}@media(max-width:720px){.app-body{display:block}.sidebar{position:relative;width:100%;height:auto;padding:12px;display:block;border-right:0;border-bottom:1px solid var(--line)}.brand{padding:0 5px 12px}.sidebar nav{display:flex;overflow:auto}.nav-caption,.sidebar-bottom{display:none}.nav-link{white-space:nowrap;padding:10px}.main{padding:20px 13px}.topbar{align-items:flex-start}.topbar h1{font-size:22px}.top-user{font-size:0}.role-chip{font-size:9px}.welcome-row{align-items:flex-start;flex-direction:column}.stat-grid{gap:10px}.stat-card{padding:14px}.stat-card>strong{font-size:22px}.stat-card .money-stat{font-size:15px!important}.panel{padding:16px}.table-panel{padding:0}.table-panel>.panel-head{padding:17px 15px 0}.line-row{grid-template-columns:1fr 1fr 35px}.line-row input:nth-child(3){grid-column:span 1}.line-row input:nth-child(4){grid-column:span 1}.signature-block{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr}.span-2{grid-column:auto}.approval-form{grid-template-columns:1fr}.approval-form .signature-pad{grid-row:auto}.paper-meta{grid-template-columns:1fr 1fr}.invoice-toolbar{align-items:flex-start;flex-direction:column}.login-wrap{grid-template-columns:1fr;gap:25px;padding:25px 0;width:min(450px,92vw)}.login-brand .eyebrow{margin-top:20px}.login-brand h1{font-size:34px}.login-brand p{font-size:13px}.login-points{margin-top:15px;gap:7px}.login-points span{font-size:10px}.login-card{padding:25px}.topbar .eyebrow{max-width:230px}.approval-card .panel-head{align-items:flex-start}.paper-brand{flex-wrap:wrap}.paper-no{margin-left:0;width:100%;text-align:left}.signature-grid{gap:15px}}
@media print{body{background:#fff}.sidebar,.topbar,.invoice-toolbar,.alert,.btn,.text-link,.approval-form{display:none!important}.main{padding:0;max-width:none}.invoice-detail{border:0;box-shadow:none;padding:0}.invoice-paper{border:0;padding:0;max-width:none}.paper-footer{position:fixed;bottom:0}.status{border:1px solid #ddd}.invoice-paper table{white-space:normal}.sig-image{print-color-adjust:exact;-webkit-print-color-adjust:exact}}

/* ===== KCL brand + technology theme (logo colours: navy #283991, green #00a44e) ===== */
:root{--purple:#283991;--purple-dark:#1c2a75;--green:#00a44e;--navy:#0b1437;--glow:0 0 24px rgba(0,164,78,.45)}
#techBg{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
.app-body #techBg{opacity:.35}
.sidebar,.main,.login-wrap{position:relative;z-index:1}
.app-body{background:linear-gradient(rgba(40,57,145,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(40,57,145,.045) 1px,transparent 1px),#f3f6fb;background-size:36px 36px;animation:gridmove 30s linear infinite}
@keyframes gridmove{to{background-position:36px 36px}}
.login-page{background:radial-gradient(ellipse at 15% 15%,#1d2f8a 0,transparent 45%),radial-gradient(ellipse at 90% 85%,#007a3a 0,transparent 38%),#070d26}
.login-page::after{content:"";position:absolute;left:0;right:0;height:140px;top:-140px;background:linear-gradient(transparent,rgba(0,164,78,.14),transparent);animation:scan 7s linear infinite;pointer-events:none}
@keyframes scan{to{top:105%}}
.orb-one{border-color:#00a44e;box-shadow:0 0 100px #00a44e44}.orb-two{background:linear-gradient(135deg,#283991aa,#00a44e55)}
.logo-card{width:178px;height:auto;background:#fff;border-radius:18px;padding:12px 16px;box-shadow:0 0 0 1px rgba(255,255,255,.25),0 0 40px rgba(0,164,78,.45),0 20px 50px rgba(0,0,0,.35);animation:logoPulse 4s ease-in-out infinite,floaty 6s ease-in-out infinite alternate;display:block}
@keyframes logoPulse{50%{box-shadow:0 0 0 1px rgba(255,255,255,.4),0 0 70px rgba(0,164,78,.7),0 20px 50px rgba(0,0,0,.35)}}
@keyframes floaty{to{transform:translateY(-8px)}}
.login-brand h1 span{background:linear-gradient(90deg,#4cd98b,#6f86ff,#4cd98b);background-size:200% auto;-webkit-background-clip:text;background-clip:text;color:transparent;animation:shine 4s linear infinite}
@keyframes shine{to{background-position:200% center}}
.login-card{backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.18);position:relative;overflow:hidden}
.login-card::before{content:"";position:absolute;inset:-2px;background:conic-gradient(from 0deg,transparent 0 70%,#00a44e,#283991,transparent);animation:spin 6s linear infinite;z-index:-1;opacity:.7}
@keyframes spin{to{transform:rotate(360deg)}}
.logo-side{width:46px;height:46px;object-fit:cover;object-position:left center;background:#fff;border-radius:12px;padding:3px;box-shadow:var(--glow)}
.logo-paper{height:54px;width:auto}
.sidebar{background:linear-gradient(180deg,#0b1437,#14226b 70%,#0b1437);border-right:1px solid rgba(0,164,78,.35)}
.sidebar *{color:#dbe3ff}.sidebar .brand small,.sidebar .nav-caption{color:#7f8fcf}
.nav-link{transition:.25s}.nav-link:hover{transform:translateX(4px);background:rgba(255,255,255,.08)}
.nav-link.active{background:linear-gradient(90deg,#00a44e,#0b8f6a)!important;color:#fff!important;box-shadow:var(--glow)}
.btn.primary{background:linear-gradient(135deg,#283991,#1c2a75)!important;color:#fff;box-shadow:0 8px 22px rgba(40,57,145,.35);position:relative;overflow:hidden;transition:.25s}
.btn.primary:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(0,164,78,.4)}
.btn .ripple{position:absolute;border-radius:50%;background:rgba(255,255,255,.5);transform:scale(0);animation:rip .6s ease-out;pointer-events:none}
@keyframes rip{to{transform:scale(4);opacity:0}}
.stat-card,.panel{transition:transform .3s,box-shadow .3s;border-top:2px solid transparent;border-image:linear-gradient(90deg,#283991,#00a44e) 1}
.stat-card:hover,.panel:hover{transform:translateY(-3px);box-shadow:0 18px 40px rgba(40,57,145,.14)}
.stat-card strong{font-variant-numeric:tabular-nums}
.online-dot{background:#00a44e;box-shadow:0 0 0 0 rgba(0,164,78,.7);animation:blip 1.8s infinite}
@keyframes blip{70%{box-shadow:0 0 0 9px rgba(0,164,78,0)}100%{box-shadow:0 0 0 0 rgba(0,164,78,0)}}
.enter{animation:rise .55s cubic-bezier(.2,.8,.2,1) both}@keyframes rise{from{opacity:0;transform:translateY(16px)}}
.status-pending{animation:blip 2.4s infinite}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
