@import "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap";:root{--clr-bg:#f4f4f5;--clr-surface:#fff;--clr-surface-2:#fafafa;--clr-border:#e4e4e7;--clr-border-soft:#f4f4f5;--clr-primary:#4f46e5;--clr-primary-dim:#4f46e514;--clr-primary-hover:#4338ca;--clr-accent:#059669;--clr-accent-dim:#05966914;--clr-warning:#d97706;--clr-warning-dim:#d977061a;--clr-danger:#e11d48;--clr-danger-dim:#e11d4814;--clr-text:#0f172a;--clr-text-2:#475569;--clr-text-3:#94a3b8;--clr-text-inv:#fff;--clr-debit:#e11d48;--clr-credit:#059669;--font-sans:"Inter", system-ui, sans-serif;--font-mono:var(--font-sans);--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--r-sm:6px;--r-md:10px;--r-lg:14px;--r-xl:20px;--shadow-sm:0 1px 2px #09090b0d;--shadow-card:0 4px 12px #09090b08, 0 2px 4px #09090b05;--shadow-modal:0 24px 48px -12px #09090b26, 0 8px 24px -8px #09090b1a;--sidebar-w:248px;--header-h:56px}.app-shell.sidebar-hidden{--sidebar-w:64px}.app-shell.sidebar-hidden .logo-text,.app-shell.sidebar-hidden .logo-sub,.app-shell.sidebar-hidden .sidebar-section-label,.app-shell.sidebar-hidden .sidebar-item-label,.app-shell.sidebar-hidden .sidebar-footer-text,.app-shell.sidebar-hidden .ws-name,.app-shell.sidebar-hidden .ws-role,.app-shell.sidebar-hidden .ws-group-link{display:none!important}.app-shell.sidebar-hidden .sidebar-logo{padding:var(--space-3) 0;justify-content:center}.app-shell.sidebar-hidden .sidebar-item{justify-content:center;padding:12px 0}.app-shell.sidebar-hidden .sidebar-item svg{width:20px;height:20px;margin:0!important}.app-shell.sidebar-hidden .ws-icon-collapsed{justify-content:center;display:flex!important}.app-shell.sidebar-hidden .workspace-switcher{justify-content:center;display:flex}.app-shell.sidebar-hidden .sidebar-footer{padding:var(--space-4) 0;align-items:center}.app-shell.sidebar-hidden .sidebar-footer .btn{padding:8px 0}.app-shell.sidebar-hidden .sidebar-footer .btn svg{width:18px;height:18px;margin:0!important}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;font-size:14px}body{font-family:var(--font-sans);background:var(--clr-bg);color:var(--clr-text);-webkit-font-smoothing:antialiased;line-height:1.6}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#94a3b866;border-radius:99px}::-webkit-scrollbar-thumb:hover{background:#94a3b8b3}.app-shell{grid-template-columns:var(--sidebar-w) 1fr;grid-template-rows:var(--header-h) 1fr;height:100vh;display:grid;overflow:hidden}.sidebar{background:var(--clr-surface);border-right:1px solid var(--clr-border);padding:var(--space-4) 0;flex-direction:column;grid-row:1/3;display:flex;overflow:hidden auto}.sidebar-logo{padding:var(--space-3) var(--space-5);margin-bottom:var(--space-4);align-items:center;gap:var(--space-3);display:flex}.sidebar-logo .logo-mark{background:linear-gradient(135deg, var(--clr-primary), #7c3aed);border-radius:var(--r-sm);color:#fff;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:14px;font-weight:800;display:flex;box-shadow:0 2px 8px #2563eb4d}.sidebar-logo .logo-text{letter-spacing:-.3px;color:var(--clr-text);font-size:15px;font-weight:700}.sidebar-logo .logo-sub{color:var(--clr-text-3);letter-spacing:.5px;text-transform:uppercase;font-size:10px}.sidebar-section-label{letter-spacing:1px;text-transform:uppercase;color:var(--clr-text-3);padding:var(--space-3) var(--space-5) var(--space-1);margin-top:var(--space-2);font-size:10px;font-weight:700}.sidebar-section-label.section-t-ng-quan{color:var(--clr-primary)}.sidebar-section-label.section-nghi-p-v-{color:var(--clr-accent)}.sidebar-section-label.section-b-o-c-o{color:var(--clr-warning)}.sidebar-section-label.section-qu-n-l-{color:var(--clr-danger)}.sidebar-section-label.section-c-i---t---v-n-h-nh{color:var(--clr-text-2)}.sidebar-item{align-items:center;gap:var(--space-3);padding:7px var(--space-5);color:var(--clr-text-2);cursor:pointer;text-align:left;background:0 0;border:none;border-left:2px solid #0000;border-radius:0;width:100%;font-size:13px;font-weight:500;text-decoration:none;transition:all .12s;display:flex}.sidebar-item:hover{color:var(--clr-text);background:var(--clr-surface-2)}.sidebar-item.active{color:var(--clr-primary);background:var(--clr-primary-dim);border-left-color:var(--clr-primary);font-weight:600}.sidebar-item svg{flex-shrink:0;width:16px;height:16px}.sidebar-footer{padding:var(--space-4) var(--space-5);border-top:1px solid var(--clr-border);margin-top:auto}.workspace-switcher{background:var(--clr-bg);border:1px solid var(--clr-border);border-radius:var(--r-md);padding:var(--space-3);margin:var(--space-4) var(--space-4) 0;cursor:pointer;transition:border-color .15s,box-shadow .15s}.workspace-switcher:hover{border-color:var(--clr-primary);box-shadow:0 0 0 3px #4f46e526}.workspace-switcher .ws-name{color:var(--clr-text);justify-content:space-between;align-items:center;font-size:12px;font-weight:600;display:flex}.workspace-switcher .ws-role{color:var(--clr-text-3);margin-top:2px;font-size:10px}.app-header{-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--clr-border);padding:0 var(--space-6);z-index:10;background:#ffffffd9;grid-column:2;justify-content:space-between;align-items:center;display:flex;position:relative;box-shadow:0 1px 2px #09090b05}.header-breadcrumb{color:var(--clr-text);font-size:14px;font-weight:600}.header-actions{align-items:center;gap:var(--space-3);display:flex}.dev-role-switcher{border-radius:var(--r-sm);color:#9a3412;white-space:nowrap;background:#fff7ed;border:1px solid #fdba74;align-items:center;gap:6px;height:30px;padding:0 8px;font-size:11px;font-weight:700;display:inline-flex}.dev-role-switcher select{min-width:128px;max-width:170px;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;outline:0}.dev-role-switcher select:disabled{cursor:wait;opacity:.65}.admin-header .dev-role-switcher{color:#fff;background:#ffffff1f;border-color:#ffffff3d}.admin-header .dev-role-switcher select option{color:#111827}.main-content{padding:var(--space-6);background:var(--clr-bg);grid-column:2;overflow-y:auto}.page-header{margin-bottom:var(--space-6);justify-content:space-between;align-items:center;display:flex}.page-title{color:var(--clr-text);letter-spacing:-.3px;font-size:20px;font-weight:700}.page-subtitle{color:var(--clr-text-2);margin-top:2px;font-size:13px}.card{background:var(--clr-surface);border:1px solid var(--clr-border);border-radius:var(--r-lg);padding:var(--space-5);box-shadow:var(--shadow-sm)}.card-header{margin-bottom:var(--space-4);justify-content:space-between;align-items:center;display:flex}.card-title{color:var(--clr-text);font-size:14px;font-weight:600}.kpi-grid{gap:var(--space-4);margin-bottom:var(--space-6);grid-template-columns:repeat(4,1fr);display:grid}.kpi-card{background:var(--clr-surface);border:1px solid var(--clr-border);border-radius:var(--r-lg);padding:var(--space-5);box-shadow:var(--shadow-sm);transition:border-color .2s,transform .15s,box-shadow .15s;position:relative;overflow:hidden}.kpi-card:hover{border-color:var(--clr-primary);box-shadow:var(--shadow-card);transform:translateY(-2px)}.kpi-card:before{content:"";background:linear-gradient(90deg, var(--clr-primary), #7c3aed);height:3px;position:absolute;top:0;left:0;right:0}.kpi-label{letter-spacing:.5px;color:var(--clr-text-3);text-transform:uppercase;font-size:11px;font-weight:600}.kpi-value{margin:var(--space-1) 0;font-size:22px;font-weight:700;font-family:var(--font-mono);color:var(--clr-text)}.kpi-change{align-items:center;gap:4px;font-size:12px;display:flex}.kpi-change.up{color:var(--clr-credit)}.kpi-change.down{color:var(--clr-debit)}.table-wrapper{border:1px solid var(--clr-border);box-shadow:var(--shadow-sm);overflow-x:auto;border-radius:0!important}table{border-collapse:collapse;table-layout:fixed;font-variant-numeric:tabular-nums;min-width:100%}:is(.card:has(table),.card:has(.table-wrapper)){border-radius:0!important}thead th{padding:var(--space-3) var(--space-4);text-align:left;letter-spacing:.5px;text-transform:uppercase;color:var(--clr-text-3);background:var(--clr-bg);border-bottom:1px solid var(--clr-border);white-space:nowrap;font-size:11px;font-weight:700}tbody tr{border-bottom:1px solid var(--clr-border);transition:background-color .15s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:var(--clr-surface-2)}tbody td,tfoot td{padding:var(--space-3) var(--space-4);color:var(--clr-text);font-size:13px}.td-mono{font-family:var(--font-mono);color:var(--clr-text);font-variant-numeric:tabular-nums;font-size:12px}.td-debit{color:var(--clr-debit);font-weight:600;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.td-credit{color:var(--clr-credit);font-weight:600;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.td-warning{color:var(--clr-warning);font-weight:600;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.td-muted{color:var(--clr-text-2)}.td-actions{white-space:nowrap;text-align:right;padding:4px 8px!important}.td-actions .btn-icon,.td-actions button{flex-shrink:0}.td-nowrap{white-space:nowrap}.badge{letter-spacing:.3px;border-radius:99px;align-items:center;padding:2px 8px;font-size:11px;font-weight:600;display:inline-flex}.badge-green{color:#047857;background:#0596691a;border:1px solid #05966933}.badge-blue{color:var(--clr-primary);background:#4f46e51a;border:1px solid #4f46e533}.badge-red{color:var(--clr-danger);background:#e11d481a;border:1px solid #e11d4833}.badge-yellow{color:var(--clr-warning);background:#d977061a;border:1px solid #d9770633}.badge-gray{background:var(--clr-bg);color:var(--clr-text-2);border:1px solid var(--clr-border)}.btn{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);border-radius:var(--r-sm);cursor:pointer;font-size:13px;font-weight:600;font-family:var(--font-sans);white-space:nowrap;border:1px solid #0000;transition:all .12s;display:inline-flex}.btn:disabled,.btn[disabled]{opacity:.6;cursor:not-allowed;pointer-events:none}.btn svg{width:15px;height:15px}.search-box{background:var(--clr-bg-alt);border:1px solid var(--clr-border);border-radius:var(--r-md);color:var(--clr-text-3);align-items:center;gap:8px;padding:0 12px;transition:all .2s;display:flex}.search-box:focus-within{border-color:var(--clr-primary);color:var(--clr-primary);background:#fff;box-shadow:0 0 0 3px #6366f11a}.search-input{width:100%;color:var(--clr-text-1);background:0 0;border:none;outline:none;padding:10px 0;font-size:13.5px}.search-input::placeholder{color:var(--clr-text-3)}.btn-primary{background:var(--clr-primary);color:#fff;border-color:var(--clr-primary);box-shadow:0 1px 2px #4f46e533}.btn-primary:hover{background:var(--clr-primary-hover);transform:translateY(-1px);box-shadow:0 4px 12px #4f46e540}.btn-ghost{color:var(--clr-text-2);background:0 0;border-color:#0000}.btn-ghost:hover{color:var(--clr-text);background:var(--clr-surface-2);border-color:var(--clr-border);transform:translateY(-1px)}.btn-danger{background:var(--clr-surface);color:var(--clr-danger);border-color:var(--clr-border)}.btn-danger:hover{background:var(--clr-danger-dim);border-color:var(--clr-danger);transform:translateY(-1px)}.btn-success{color:var(--clr-accent);background:#0596691a;border-color:#05966933}.btn-success:hover{background:var(--clr-accent);color:#fff}.btn-sm{padding:4px 10px;font-size:12px}.btn-icon{width:30px;height:30px;color:var(--clr-text-3);border-radius:var(--r-sm);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:all .12s;display:inline-flex}.btn-icon:hover{color:var(--clr-text);background:var(--clr-bg)}.form-group{gap:var(--space-1);flex-direction:column;display:flex}.form-label{color:var(--clr-text-2);font-size:12px;font-weight:600}.form-input,.form-select,.form-textarea{background:var(--clr-surface);border:1px solid var(--clr-border);border-radius:var(--r-sm);color:var(--clr-text);font-size:13px;font-family:var(--font-sans);padding:7px var(--space-3);outline:none;width:100%;transition:border-color .12s,box-shadow .12s}.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--clr-primary);box-shadow:0 0 0 3px #4f46e526}.form-input::placeholder{color:var(--clr-text-3)}.form-select{cursor:pointer}.form-table{border-collapse:collapse}.form-table th{text-align:left;letter-spacing:.4px;text-transform:uppercase;color:var(--clr-text-3);background:var(--clr-bg);border-bottom:1px solid var(--clr-border);white-space:nowrap;padding:6px 8px;font-size:11px;font-weight:700}.form-table td{border-bottom:1px solid var(--clr-border-soft);vertical-align:middle;padding:3px 4px}.form-table tr:last-child td{border-bottom:none}.form-table .form-input,.form-table input.form-input,.form-table textarea.form-input{border-radius:var(--r-sm);background:0 0;border-color:#0000;min-width:40px;padding:5px 8px;font-size:12px}.form-table .form-input:hover{background:var(--clr-bg);border-color:var(--clr-border)}.form-table .form-input:focus{background:var(--clr-surface);border-color:var(--clr-primary);box-shadow:0 0 0 2px var(--clr-primary-dim)}.input-grow{min-width:40px;max-width:100%;display:inline-grid}.input-grow:after{content:attr(data-value) " ";visibility:hidden;white-space:pre;font:inherit;pointer-events:none;grid-area:1/1;padding:5px 8px;font-size:12px}.input-grow>input{border-radius:var(--r-sm);width:100%;min-width:0;color:var(--clr-text);font-size:12px;font-family:var(--font-sans);background:0 0;border:1px solid #0000;outline:none;grid-area:1/1;padding:5px 8px;transition:border-color .12s,background .12s}.input-grow>input:hover{background:var(--clr-bg);border-color:var(--clr-border)}.input-grow>input:focus{background:var(--clr-surface);border-color:var(--clr-primary);box-shadow:0 0 0 2px var(--clr-primary-dim)}.input-grow>input::placeholder{color:var(--clr-text-3)}.input-grow.is-number>input,.input-grow.is-number:after{font-family:var(--font-mono);text-align:right}.modal-backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:9999;padding:var(--space-6);background:#0f172a59;justify-content:center;align-items:center;animation:.15s backdropIn;display:flex;position:fixed;inset:0}@keyframes backdropIn{0%{opacity:0}to{opacity:1}}.modal{background:var(--clr-surface);border:1px solid var(--clr-border);border-radius:var(--r-xl);box-shadow:var(--shadow-modal);width:96vw;max-width:1600px;max-height:96vh;animation:.18s modalIn;overflow-y:auto}@keyframes modalIn{0%{opacity:0;transform:translateY(12px)scale(.98)}to{opacity:1;transform:none}}.modal-header{padding:var(--space-5) var(--space-6);border-bottom:1px solid var(--clr-border);justify-content:space-between;align-items:center;display:flex}.modal-body{padding:var(--space-6)}.modal-footer{padding:var(--space-4) var(--space-6);border-top:1px solid var(--clr-border);justify-content:flex-end;gap:var(--space-3);background:var(--clr-bg);border-radius:0 0 var(--r-xl) var(--r-xl);flex-shrink:0;display:flex}.modal-lg{flex-direction:column!important;width:95vw!important;max-width:1320px!important;height:90vh!important;display:flex!important}.modal-lg .modal-body{flex:1!important;overflow-y:auto!important}.modal-full{flex-direction:column!important;width:98vw!important;max-width:1600px!important;height:96vh!important;display:flex!important}.modal-full .modal-body{flex:1!important;overflow-y:auto!important}.drawer{background:var(--clr-surface);flex-direction:column;height:100vh;display:flex;position:absolute;top:0;right:0;box-shadow:-4px 0 24px #0f172a26}.slide-in-right{animation:.3s cubic-bezier(.16,1,.3,1) slideInRight}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}.modal-card{background:var(--clr-surface);border:1px solid var(--clr-border);border-radius:var(--r-xl);box-shadow:var(--shadow-modal);width:96vw;max-width:1600px;max-height:96vh;animation:.18s modalIn;position:relative;overflow-y:auto}.modal-title{color:var(--clr-text);font-size:15px;font-weight:700}.modal-subtitle{color:var(--clr-text-3);margin-top:2px;font-size:12px}.divider{background:var(--clr-border);height:1px;margin:var(--space-4) 0}.alert{padding:var(--space-3) var(--space-4);border-radius:var(--r-sm);border:1px solid;font-size:13px}.alert-error{color:var(--clr-danger);background:#dc26260f;border-color:#dc262633}.alert-success{color:var(--clr-accent);background:#0596690f;border-color:#05966933}.alert-info{color:var(--clr-primary);background:#2563eb0f;border-color:#2563eb33}.table-wrapper th,.form-table th{position:relative}.th-resizer{cursor:col-resize;-webkit-user-select:none;user-select:none;z-index:10;justify-content:center;align-items:center;width:9px;display:flex;position:absolute;top:0;bottom:0;right:0;transform:translate(50%)}.th-resizer:after{content:"";background-color:var(--clr-border);width:1px;height:50%;transition:all .2s;display:block}.th-resizer:hover:after,.th-resizer.is-resizing:after{background-color:var(--clr-primary);width:2px;height:100%}.login-page{background:linear-gradient(135deg,#eff6ff 0%,#f5f3ff 50%,#ecfdf5 100%);justify-content:center;align-items:center;min-height:100vh;display:flex}.login-box{background:var(--clr-surface);border:1px solid var(--clr-border);border-radius:var(--r-xl);width:100%;max-width:420px;padding:var(--space-8);box-shadow:var(--shadow-modal)}.login-logo{align-items:center;gap:var(--space-3);margin-bottom:var(--space-8);justify-content:center;display:flex}.login-logo .lm{background:linear-gradient(135deg, var(--clr-primary), #7c3aed);border-radius:var(--r-md);color:#fff;justify-content:center;align-items:center;width:44px;height:44px;font-size:20px;font-weight:800;display:flex;box-shadow:0 4px 12px #2563eb4d}.login-title{text-align:center;margin-bottom:var(--space-6)}.login-title h2{color:var(--clr-text);font-size:22px;font-weight:700}.login-title p{color:var(--clr-text-2);margin-top:4px;font-size:13px}.tab-list{border-bottom:1px solid var(--clr-border);margin-bottom:var(--space-5);gap:0;display:flex}.tab-item{padding:10px var(--space-5);color:var(--clr-text-2);cursor:pointer;font-size:13px;font-weight:500;font-family:var(--font-sans);background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;transition:all .12s}.tab-item:hover{color:var(--clr-text)}.tab-item.active{color:var(--clr-primary);border-bottom-color:var(--clr-primary);font-weight:600}.admin-shell{grid-template-rows:56px 1fr;grid-template-columns:220px 1fr;height:100vh;display:grid;overflow:hidden}.admin-header{background:linear-gradient(90deg, var(--clr-primary), #7c3aed);padding:0 var(--space-6);color:#fff;grid-column:1/3;justify-content:space-between;align-items:center;display:flex}.admin-sidebar{background:var(--clr-surface);border-right:1px solid var(--clr-border);padding:var(--space-4) 0;overflow-y:auto}.admin-main{background:var(--clr-bg);padding:var(--space-6);overflow-y:auto}.flex{display:flex}.flex-col{flex-direction:column;display:flex}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-2{gap:var(--space-2)}.gap-3{gap:var(--space-3)}.gap-4{gap:var(--space-4)}.grid-2{gap:var(--space-4);grid-template-columns:1fr 1fr;display:grid}.grid-3{gap:var(--space-4);grid-template-columns:1fr 1fr 1fr;display:grid}.mb-4{margin-bottom:var(--space-4)}.mb-6{margin-bottom:var(--space-6)}.text-sm{font-size:12px}.text-muted{color:var(--clr-text-2)}.font-mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.text-right{text-align:right}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.fade-in{animation:.2s forwards fadeIn}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:2px solid var(--clr-border);border-top-color:var(--clr-primary);border-radius:50%;width:16px;height:16px;animation:.6s linear infinite spin;display:inline-block}.empty-state{text-align:center;padding:var(--space-12) var(--space-6);color:var(--clr-text-3)}.empty-state svg{width:48px;height:48px;margin-bottom:var(--space-4);opacity:.25}.empty-state p{font-size:14px}.chart-wrapper{height:240px;margin-top:var(--space-4)}.search-bar{align-items:center;gap:var(--space-2);background:var(--clr-bg);border:1px solid var(--clr-border);border-radius:var(--r-sm);padding:0 var(--space-3);transition:border-color .12s,box-shadow .12s;display:flex}.search-bar:focus-within{border-color:var(--clr-primary);box-shadow:0 0 0 3px var(--clr-primary-dim)}.search-bar input{color:var(--clr-text);font-size:13px;font-family:var(--font-sans);background:0 0;border:none;outline:none;width:100%;padding:7px 0}.search-bar input::placeholder{color:var(--clr-text-3)}.input-with-icon{align-items:center;display:flex;position:relative}.input-with-icon input,.input-with-icon .form-input{width:100%}
