@import "https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Fira+Sans:wght@400;500;600;700&display=swap";:root{--primary:#2563eb;--primary-dark:#1d4ed8;--accent:#059669;--ink:#0f172a;--muted-ink:#526176;--canvas:#f8fafc;--surface:#fff;--subtle:#f1f5fd;--border:#dce6f5;--danger:#b42318;--warning:#9a6700;--ring:#2563eb;--radius:14px;--shadow:0 8px 24px #0f172a0f;color:var(--ink);background:var(--canvas);font-synthesis:none;font-family:Fira Sans,system-ui,sans-serif}*{box-sizing:border-box}html{background:var(--canvas)}body{min-width:320px;margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}a{color:var(--primary)}.skip-link{z-index:100;color:#fff;background:var(--ink);border-radius:8px;padding:10px 14px;transition:transform .2s;position:fixed;top:8px;left:8px;transform:translateY(-200%)}.skip-link:focus{transform:translateY(0)}.shell{min-height:100dvh}.topbar{background:#0f1f38;gap:32px;min-height:76px;padding:10px max(24px,50% - 620px);box-shadow:0 2px #ffffff0a}.brand,.topbar{color:#fff;align-items:center;display:flex}.brand{letter-spacing:-.02em;white-space:nowrap;gap:10px;font-size:17px;font-weight:700;text-decoration:none}.brand-mark{letter-spacing:-.08em;background:linear-gradient(135deg,#3b82f6,#14b8a6);border-radius:9px;place-items:center;width:34px;height:34px;font-family:Fira Code,monospace;font-size:11px;display:grid}.account small,.brand small{letter-spacing:.1em;color:#8ea4c5;margin-top:2px;font-family:Fira Code,monospace;font-size:9px;display:block}.topbar nav{align-items:center;gap:4px;min-width:0;display:flex}.topbar nav a{color:#b9c7dc;white-space:nowrap;border-radius:8px;padding:11px 10px;font-size:14px;font-weight:600;text-decoration:none;transition:background .18s,color .18s;position:relative}.topbar nav a:hover{color:#fff;background:#1e3557}.topbar nav a.router-link-active{color:#fff;background:#1c3252}.topbar nav a.router-link-active:after{content:"";background:#38bdf8;border-radius:2px;height:2px;position:absolute;bottom:4px;left:10px;right:10px}.account{color:#d4dfef;white-space:nowrap;align-items:center;gap:9px;margin-left:auto;font-size:13px;display:flex}.account strong{text-overflow:ellipsis;max-width:160px;display:block;overflow:hidden}.avatar{color:#e6f4ff;background:#2c4670;border-radius:50%;place-items:center;width:32px;height:32px;font-weight:700;display:grid}.link{color:#b9c7dc;background:0 0;border:0;border-radius:7px;padding:9px;font-size:13px}.link:hover{color:#fff;background:#1e3557}.page{width:min(1240px,100%);margin:0 auto;padding:48px 28px 84px}.page:focus{outline:0}.page-heading{justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:28px;display:flex}.eyebrow{color:#197150;letter-spacing:.08em;font-family:Fira Code,monospace;font-size:11px;font-weight:700}h1,h2,h3{color:var(--ink)}h1{letter-spacing:-.035em;margin:7px 0 8px;font-size:clamp(28px,4vw,38px);line-height:1.15}h2{margin:0 0 5px;font-size:18px;line-height:1.3}p{color:var(--muted-ink);margin:0 0 18px;font-size:15px;line-height:1.55}.page-heading p{max-width:650px}.date-picker{color:var(--muted-ink);white-space:nowrap;font-size:12px;font-weight:700;display:block}.date-picker input{min-width:154px;margin-top:6px;display:block}input,select,textarea{border:1px solid var(--border);width:100%;min-height:44px;color:var(--ink);background:#fff;border-radius:9px;padding:10px 12px;transition:border-color .18s,box-shadow .18s;box-shadow:0 1px 1px #0f172a05}textarea{resize:vertical;min-height:112px;line-height:1.5}input:hover,select:hover,textarea:hover{border-color:#b7c9e2}input:focus,select:focus,textarea:focus{outline-offset:0;border-color:var(--primary);outline:3px solid #2563eb2e}input[type=checkbox],input[type=radio]{width:18px;min-height:18px;accent-color:var(--primary);box-shadow:none}label{color:#26364d}.input-help{margin:8px 0 0;font-size:13px}.password-field{margin-top:7px;display:block;position:relative}.password-field input{padding-right:64px}.field-action{min-height:36px;color:var(--primary);background:0 0;border:0;border-radius:6px;padding:0 10px;font-size:12px;font-weight:700;position:absolute;top:4px;right:4px}.field-action:hover{background:#edf3ff}.error{color:var(--danger);background:#fff2f0;border:1px solid #fecaca;border-radius:8px;margin:14px 0;padding:10px 12px;font-size:14px;font-weight:600}.danger{font-weight:700;color:var(--danger)!important}.danger:after{content:" Cần xử lý";font-size:11px;font-weight:600;display:block}.primary,.secondary{border:1px solid #0000;border-radius:9px;min-height:44px;padding:10px 16px;font-size:14px;font-weight:700;transition:transform .18s,background .18s,border-color .18s,box-shadow .18s}.primary{color:#fff;background:var(--primary);box-shadow:0 3px 7px #2563eb3b}.primary:hover:not(:disabled){background:var(--primary-dark);transform:translateY(-1px);box-shadow:0 6px 13px #2563eb40}.secondary{color:#1e4fb4;background:#edf3ff;border-color:#d5e3fc}.secondary:hover:not(:disabled){background:#e0ecff;border-color:#bcd1f8}.wide{width:100%}.small{min-height:36px;margin:0;padding:6px 10px;font-size:12px}a:focus-visible,button:focus-visible{outline-offset:2px;outline:3px solid #38bdf8e6}.form-card,.table-card,.task-section{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:20px;padding:24px}.form-card>h2{margin-bottom:7px}.section-intro,.section-title{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.section-intro p{margin:3px 0 0;font-size:13px}.task-count{color:#315fa8;background:#edf3ff;border-radius:999px;flex:none;padding:5px 9px;font-family:Fira Code,monospace;font-size:11px;font-weight:600}.task-row{grid-template-columns:30px minmax(0,1fr) minmax(190px,.55fr) auto;align-items:center;gap:10px;margin:11px 0;display:grid}.row-number{color:#47607e;background:#eef3fb;border-radius:50%;place-items:center;width:28px;height:28px;font-family:Fira Code,monospace;font-size:12px;display:grid}.icon-button{color:#af332c;background:#fff7f6;border:1px solid #f2d3d0;border-radius:8px;min-height:40px;padding:0 10px;font-size:12px;font-weight:700}.icon-button:hover:not(:disabled){background:#fff0ef}.icon-button:disabled{visibility:hidden}.empty-state{border-radius:var(--radius);box-shadow:var(--shadow);background:#fff;border:1px dashed #b7c9e2;padding:32px}.empty-state h2{margin-bottom:8px}.narrow{max-width:620px}.import{max-width:920px}.member-form{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.form-card label,.member-form label{font-size:13px;font-weight:600;display:block}.form-card label input,.form-card label select,.member-form label input,.member-form label select{margin-top:7px}.member-form button{align-self:end}.checkbox-label{align-items:center;gap:9px;min-height:44px;display:flex!important}.checkbox-label input{width:auto;margin:0!important}.table-card{padding:0;overflow:hidden}table{border-collapse:collapse;table-layout:auto;width:100%}td,th{text-align:left;vertical-align:top;word-break:break-word;border-bottom:1px solid #e6edf7;padding:14px 16px;font-size:14px}th{letter-spacing:.025em;text-transform:uppercase;color:#526176;white-space:nowrap;background:#f7faff;font-family:Fira Code,monospace;font-size:11px}tbody tr:last-child td{border-bottom:0}tbody tr{transition:background .16s}tbody tr:hover{background:#f8fbff}td input{min-height:38px;padding:7px 9px}code{color:#335274;background:#edf3fb;border-radius:4px;padding:3px 5px;font-family:Fira Code,monospace;font-size:.86em}.login-page{background:radial-gradient(circle at 8% 10%,#245aa0 0,#0000 30%),radial-gradient(circle at 92% 86%,#0a746f 0,#0000 31%),#0f1f38;place-items:center;min-height:100dvh;padding:24px;display:grid}.login-card{background:#fff;border:1px solid #ffffff59;border-radius:18px;width:min(440px,100%);padding:38px;box-shadow:0 25px 65px #00000047}.login-card h1{font-size:31px}.login-card label{margin:18px 0;font-size:13px;font-weight:600;display:block}.login-card label>input{margin-top:7px}.login-help{text-align:center;color:#65748b;margin:18px 0 0;font-size:12px}@media (width<=900px){.topbar{gap:14px;padding-inline:20px}.account strong{max-width:100px}.topbar nav{overflow-x:auto}.page{padding-inline:20px}}@media (width<=700px){.topbar{z-index:20;grid-template-columns:1fr auto;gap:7px;padding:10px 16px;display:grid;position:sticky;top:0}.brand{font-size:15px}.brand-mark{width:30px;height:30px}.account{margin-left:0}.account span,.link{display:none}.topbar nav{grid-column:1/-1;grid-template-columns:repeat(3,minmax(0,1fr));gap:3px;width:100%;display:grid;overflow:visible}.topbar nav a{text-align:center;padding:8px 2px;font-size:11px}.topbar nav a.router-link-active:after{bottom:1px;left:18%;right:18%}.page{padding:28px 16px 54px}.page-heading{flex-direction:column;align-items:stretch;gap:16px;margin-bottom:22px}.date-picker input{width:100%}.form-card,.task-section{padding:18px}.member-form{grid-template-columns:1fr;gap:14px}.task-row{grid-template-columns:28px minmax(0,1fr) auto;gap:8px}.task-row input:nth-of-type(2){grid-column:2/4}.task-row .icon-button{grid-column:3}.task-row input:first-of-type{grid-column:2/3}.task-row input:nth-of-type(2){grid-row:2}.task-row .icon-button{grid-row:1}table{min-width:0}td,th{white-space:normal;padding:12px 10px;font-size:13px}.table-card{overflow-x:auto}.login-card{padding:28px 22px}.section-title{flex-direction:column}.danger:after{content:" (Cần xử lý)";display:inline}}@media (prefers-reduced-motion:reduce){*,:after,:before{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.project-picker{background:#edf3ff;border:1px solid #d9e6fc;border-radius:12px;align-items:flex-end;gap:16px;margin-bottom:20px;padding:16px 18px;display:flex}.project-picker label{min-width:min(420px,100%);font-size:13px;font-weight:700}.project-picker select{margin-top:7px}.project-picker>span{color:#365678;padding-bottom:11px;font-size:13px}.work-toggle{flex-wrap:wrap;gap:8px;margin-top:14px;display:flex}.work-toggle label{border:1px solid var(--border);cursor:pointer;background:#f8fbff;border-radius:8px;align-items:center;gap:7px;padding:8px 10px;font-size:13px;margin:0!important;display:inline-flex!important}.work-toggle label:has(input:checked){color:#174ea6;background:#edf3ff;border-color:#9bbcf8}.absence-note{color:var(--warning);align-self:center;font-size:13px;font-weight:700}.project-layout{grid-template-columns:280px minmax(0,1fr);gap:20px;display:grid}.project-list{align-content:start;gap:8px;display:grid}.project-card{border:1px solid var(--border);text-align:left;background:#fff;border-radius:10px;padding:14px;transition:border-color .18s,box-shadow .18s,transform .18s}.project-card:hover{border-color:#adc7f5;transform:translateY(-1px);box-shadow:0 5px 14px #0f172a0f}.project-card strong{font-size:14px;display:block}.project-card span{color:#718096;margin-top:6px;font-family:Fira Code,monospace;font-size:11px;display:block}.project-card.selected{border-color:var(--primary);box-shadow:inset 3px 0 var(--primary);background:#edf3ff}.allocation-form{margin:24px 0}.daily-title{border-top:1px solid var(--border);margin-top:20px;padding-top:24px}.daily-title .date-picker{min-width:150px}.narrow .form-card{margin-top:24px}@media (width<=700px){.project-layout{grid-template-columns:1fr}.project-list{grid-auto-columns:minmax(175px,75%);grid-auto-flow:column;padding-bottom:4px;overflow-x:auto}.project-picker{flex-direction:column;align-items:stretch}.project-picker label{min-width:0}.project-picker>span{padding:0}.work-toggle{flex-direction:column;align-items:stretch}.work-toggle label{min-height:44px}.daily-title .date-picker{width:100%}}.assigned-section,.resource-board{border-top:1px solid var(--border);margin-top:26px;padding-top:24px}.resource-grid{grid-template-columns:minmax(0,1.5fr) minmax(210px,.7fr);gap:16px;margin-top:16px;display:grid}.resource-pool{gap:8px;display:grid}.person-card{border:1px solid var(--border);cursor:grab;background:#fff;border-radius:10px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:11px 12px;transition:border-color .18s,box-shadow .18s;display:grid}.person-card:hover{border-color:#9bbcf8;box-shadow:0 4px 10px #0f172a0d}.person-card:active{cursor:grabbing}.assigned-card strong,.member-summary strong,.person-card strong{font-size:14px;display:block}.member-summary span,.person-card span{color:var(--muted-ink);margin-top:2px;font-size:12px;display:block}.person-avatar{color:#2457a6;background:#e0ecff;border-radius:50%;place-items:center;width:34px;height:34px;font-weight:700;display:grid}.drop-zone{text-align:center;background:#f7faff;border:2px dashed #9bbcf8;border-radius:12px;place-content:center;min-height:140px;padding:20px;transition:background .18s,border-color .18s;display:grid}.drop-zone strong{color:#174ea6}.drop-zone span{color:#526176;margin-top:6px;font-size:12px;line-height:1.45}.drop-zone.active,.drop-zone:hover{background:#edf3ff;border-color:#2563eb}.assigned-list{gap:8px;margin-top:12px;display:grid}.assigned-card{border-bottom:1px solid var(--border);grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:16px;padding:13px 0;display:grid}.assigned-card:last-child{border-bottom:0}.role-tags{flex-wrap:wrap;gap:6px;margin-top:7px;display:flex}.role-tag{color:#47607e;background:#eef3fb;border-radius:999px;padding:3px 7px;font-family:Fira Code,monospace;font-size:11px}.primary-role{color:#17633a;background:#dcfce7}.assignment-meta{text-align:right}.assignment-meta strong{color:#174ea6;font-family:Fira Code,monospace}.assignment-meta span{color:#64748b;margin-top:3px;font-size:11px;display:block}.danger-link{color:#b42318}.compact{padding:20px}.compact p{margin-bottom:0}.modal-backdrop{z-index:50;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#0f172a85;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.assignment-modal{background:#fff;border-radius:18px;width:min(620px,100%);max-height:calc(100dvh - 40px);padding:30px;position:relative;overflow:auto;box-shadow:0 20px 45px #0f172a40}.assignment-modal h2{margin-top:7px;font-size:23px}.modal-close{color:#2457a6;background:#edf3ff;border:0;border-radius:7px;min-height:36px;padding:0 10px;font-size:12px;font-weight:700;position:absolute;top:16px;right:16px}.member-summary{border:1px solid var(--border);background:#f7faff;border-radius:10px;align-items:center;gap:11px;margin:18px 0;padding:13px;display:flex}.assignment-modal fieldset{border:0;margin:0;padding:0}.assignment-modal legend{font-size:13px;font-weight:700}.assignment-modal legend span{color:#64748b;font-weight:400}.chip-picker{flex-wrap:wrap;gap:8px;margin-top:10px;display:flex}.role-chip{color:#355273;background:#fff;border:1px solid #c9d8ee;border-radius:999px;min-height:38px;padding:6px 12px;font-size:13px;font-weight:600;transition:background .18s,border-color .18s}.role-chip:hover{background:#edf3ff}.role-chip.selected{color:#174ea6;background:#e0ecff;border-color:#2563eb}.modal-form{margin-top:22px}.modal-actions{justify-content:flex-end;gap:10px;margin-top:24px;display:flex}@media (width<=700px){.resource-grid{grid-template-columns:1fr}.drop-zone{min-height:110px}.person-card{grid-template-columns:auto minmax(0,1fr)}.person-card .secondary{grid-column:1/-1;width:100%}.assigned-card{grid-template-columns:minmax(0,1fr) auto}.assigned-card .danger-link{grid-column:1/-1;justify-self:start;padding-left:0}.assignment-modal{padding:26px 18px}.modal-form{grid-template-columns:1fr}.modal-actions{flex-direction:column-reverse}.modal-actions button{width:100%}}.portfolio-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px;display:grid}.portfolio-card{border:1px solid var(--border);min-height:180px;color:var(--ink);box-shadow:var(--shadow);background:#fff;border-radius:14px;padding:20px;text-decoration:none;transition:transform .18s,box-shadow .18s;display:block}.portfolio-card:hover{transform:translateY(-2px);box-shadow:0 10px 20px #0f172a1a}.portfolio-card h2{margin:9px 0}.portfolio-card>div{justify-content:space-between;align-items:center;display:flex}.project-status{color:#526176;font-size:12px}.allocation-board{grid-template-columns:300px minmax(0,1fr);gap:20px;display:grid}.global-pool{border:1px solid var(--border);box-shadow:var(--shadow);background:#fff;border-radius:14px;align-self:start;gap:10px;padding:18px;display:grid;position:sticky;top:95px}.global-pool label{font-size:13px;font-weight:600}.project-lanes{grid-template-columns:repeat(auto-fit,minmax(250px,1fr));align-items:start;gap:16px;display:grid}.allocation-lane{border:1px solid var(--border);min-height:270px;box-shadow:var(--shadow);background:#fff;border-radius:14px;padding:16px}.allocation-lane header{justify-content:space-between;gap:8px;display:flex}.allocation-lane header strong{color:#174ea6}.allocation-lane header span{color:#64748b;font-size:12px}.lane-drop{color:#47607e;text-align:center;background:#f7faff;border:1px dashed #9bbcf8;border-radius:9px;margin:13px 0;padding:13px;font-size:12px}.allocation-lane .assigned-card{grid-template-columns:minmax(0,1fr) auto}.allocation-lane .assigned-card:last-child{border-bottom:0}@media (width<=850px){.allocation-board{grid-template-columns:1fr}.global-pool{position:static}.project-lanes{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}}.success{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;margin:14px 0;padding:10px 12px;font-size:14px;font-weight:600}.portfolio-card .status-control{color:#526176;margin-top:16px;font-size:12px;font-weight:700;display:block}.portfolio-card .status-control select{min-height:38px;margin-top:5px;padding:6px 9px}.project-status{background:#eef3fb;border-radius:999px;padding:4px 7px}.project-status.active{color:#166534;background:#dcfce7}.project-status.paused{color:#92400e;background:#fef3c7}.project-status.completed{color:#475569;background:#e5e7eb}.preview-banner{color:#704d00;background:#fff7d6;border-bottom:1px solid #f4d477;justify-content:center;align-items:center;gap:12px;padding:10px 24px;font-size:13px;display:flex}.preview-banner strong{font-weight:700}.preview-banner span{color:#7a5c12}.preview-banner .secondary{flex:none;min-height:34px;padding:5px 9px}.table-actions{flex-wrap:wrap;gap:8px;display:flex}@media (width<=700px){.preview-banner{flex-wrap:wrap;justify-content:flex-start;align-items:flex-start;padding:10px 16px}.preview-banner span{width:100%}}.metric-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin:16px 0 20px;display:grid}.metric-card{border:1px solid var(--border);min-height:120px;box-shadow:var(--shadow);background:#fff;border-radius:12px;padding:16px}.metric-card small,.metric-card span{color:#526176;font-size:12px;line-height:1.4;display:block}.metric-card strong{color:#174ea6;margin:9px 0 5px;font-family:Fira Code,monospace;font-size:27px;display:block}.metric-card.warning strong{color:#9a6700}.task-summary{color:#334155;margin:0;padding-left:18px;line-height:1.5}.task-summary li+li{margin-top:5px}@media (width<=1000px){.metric-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=700px){.metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.metric-card{min-height:104px;padding:13px}.metric-card strong{font-size:23px}.report-table{margin-top:16px}}
