:root{--brand:#0b2b66;--brand-dark:#061a44;--brand-soft:#eef4ff;--brand-gold:#c9aa6a;--brand-gold-soft:#f7f1e3;--success:#16a34a;--success-soft:#f0fdf4;--warning:#d97706;--warning-soft:#fffbeb;--danger:#dc2626;--danger-soft:#fef2f2;--ink:#101828;--ink-2:#334155;--ink-3:#667085;--ink-4:#98a2b3;--border:#e2e8f0;--border-2:#cbd5e1;--bg:#f5f7fb;--bg-2:#fbfcff;--surface:#fff;--sidebar-w:224px;--radius:10px;--radius-lg:16px;--shadow:0 1px 3px #0f172a14, 0 1px 2px #0f172a0f;--shadow-md:0 4px 16px #0f172a1a;--shadow-lg:0 12px 40px #0f172a24}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Helvetica Neue,sans-serif;font-size:14px;line-height:1.6}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}input,select,textarea{font-family:inherit}.app-shell{height:100%;display:flex}.sidebar{width:var(--sidebar-w);border-right:1px solid var(--border);z-index:40;background:linear-gradient(#061a44 0%,#0b2b66 100%);flex-direction:column;flex-shrink:0;display:flex;position:fixed;top:0;bottom:0;left:0;overflow-y:auto}.sidebar-logo{border-bottom:1px solid #ffffff1a;padding:16px 12px}.sidebar-logo h1{color:#fff;font-size:14px;font-weight:800}.sidebar-logo p{color:#ffffff94;margin-top:1px;font-size:11px}.sidebar-brand{align-items:center;gap:10px;display:flex}.sidebar-brand-mark{color:#061a44;background:linear-gradient(135deg,#c9aa6af2,#f4d99af2);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:38px;height:38px;font-size:15px;font-weight:900;display:flex;box-shadow:0 8px 24px #0000002e}.sidebar-section{padding:16px 8px 4px}.sidebar-section-label{letter-spacing:.08em;text-transform:uppercase;color:#ffffff6b;margin-bottom:4px;padding:0 8px;font-size:10px;font-weight:600}.nav-item{color:#ffffffad;border-radius:7px;align-items:center;gap:9px;margin-bottom:1px;padding:7px 10px;font-size:13px;font-weight:500;transition:background .12s,color .12s;display:flex}.nav-item:hover{color:#fff;background:#ffffff14}.nav-item.active{color:#f4d99a;background:#c9aa6a2e;font-weight:700}.nav-item .icon{opacity:.65;flex-shrink:0;width:15px;height:15px}.nav-item:hover .icon{opacity:.85}.nav-item.active .icon{opacity:1}.sidebar-footer{border-top:1px solid #ffffff1a;margin-top:auto;padding:12px 8px}.user-chip{cursor:pointer;text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;gap:8px;width:100%;padding:8px 10px;display:flex}.user-chip:hover{background:#ffffff14}.user-chip .icon{opacity:.35;flex-shrink:0;width:14px;height:14px;margin-left:auto}.user-chip:hover .icon{opacity:.7}.user-avatar{background:var(--brand-gold-soft);width:28px;height:28px;color:var(--brand-dark);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;font-weight:700;display:flex;overflow:hidden}.user-avatar img{object-fit:cover;width:100%;height:100%}.user-info{min-width:0}.user-name{color:#fff;white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:700;overflow:hidden}.user-role{color:#ffffff8f;font-size:11px}.sidebar-logout{color:#ffffffc2;background:#ffffff0f;border:1px solid #ffffff24;border-radius:8px;justify-content:center;align-items:center;gap:6px;width:100%;margin-top:6px;padding:7px 10px;font-size:12px;font-weight:700;display:flex}.sidebar-logout:hover{color:#fff;background:#ffffff1f}.sidebar-logout .icon{width:14px;height:14px}.main-content{margin-left:var(--sidebar-w);flex-direction:column;flex:1;min-width:0;min-height:100%;display:flex}.topbar{border-bottom:1px solid var(--border);z-index:30;background:#fffffff0;justify-content:space-between;align-items:center;gap:12px;min-height:52px;padding:8px 24px;display:flex;position:sticky;top:0}.topbar-title{color:var(--ink);flex-shrink:0;font-size:15px;font-weight:700}.topbar-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.notification-wrap{position:relative}.notification-button{justify-content:center;width:34px;height:34px;position:relative}.notification-mark{font-size:15px;line-height:1}.notification-count{background:var(--danger);color:#fff;border:2px solid var(--surface);border-radius:999px;justify-content:center;align-items:center;min-width:17px;height:17px;padding:0 4px;font-size:10px;font-weight:800;line-height:1;display:inline-flex;position:absolute;top:-5px;right:-5px}.notification-dropdown{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:min(360px,100vw - 32px);box-shadow:var(--shadow-lg);z-index:80;position:absolute;top:calc(100% + 8px);right:0;overflow:hidden}.notification-dropdown-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;padding:12px 14px;display:flex}.notification-dropdown-list{max-height:360px;overflow-y:auto}.notification-menu-item{border:none;border-bottom:1px solid var(--border);background:var(--surface);width:100%;color:var(--ink-2);text-align:left;gap:3px;padding:11px 14px 11px 20px;display:grid;position:relative}.notification-menu-item:hover{background:var(--bg-2)}.notification-menu-item.unread:before,.notification-page-item.unread:before{content:"";background:var(--brand);border-radius:50%;width:7px;height:7px;position:absolute}.notification-menu-item.unread:before{top:17px;left:8px}.notification-menu-title{color:var(--ink);font-size:13px;font-weight:800}.notification-menu-body{color:var(--ink-3);overflow-wrap:anywhere;font-size:12px;line-height:1.45}.notification-menu-time{color:var(--ink-4);font-size:11px}.notification-empty{color:var(--ink-3);text-align:center;padding:28px 16px;font-size:13px}.notification-more{background:var(--bg-2);width:100%;color:var(--brand);border:none;padding:11px;font-size:13px;font-weight:700}.page{flex:1;padding:24px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow)}.card-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:16px 20px;display:flex}.card-title{color:var(--ink);font-size:14px;font-weight:700}.card-body{padding:20px}.stat-grid{grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px;display:grid}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:20px}.stat-label{color:var(--ink-3);margin-bottom:8px;font-size:12px;font-weight:500}.stat-value{color:var(--ink);font-size:28px;font-weight:800;line-height:1}.stat-sub{color:var(--ink-3);margin-top:6px;font-size:12px}.stat-card.green .stat-value{color:var(--success)}.stat-card.yellow .stat-value{color:var(--warning)}.stat-card.red .stat-value{color:var(--danger)}.stat-card.blue .stat-value{color:var(--brand)}.stat-card.blue{border-top:3px solid var(--brand)}.stat-card.green{border-top:3px solid var(--success)}.stat-card.red{border-top:3px solid var(--danger)}.stat-card.yellow{border-top:3px solid var(--warning)}.table-wrap{overflow-x:auto}.table{border-collapse:collapse;width:100%;font-size:13px}.table th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);background:var(--bg-2);border-bottom:1px solid var(--border);white-space:nowrap;padding:10px 16px;font-size:11px;font-weight:600}.table td{border-bottom:1px solid var(--border);color:var(--ink-2);vertical-align:middle;padding:12px 16px}.table tr:last-child td{border-bottom:none}.table tr:hover td{background:var(--bg-2)}.table .cell-main{color:var(--ink);font-weight:600}.table .cell-sub{color:var(--ink-3);margin-top:2px;font-size:12px}.btn{white-space:nowrap;border:none;border-radius:8px;align-items:center;gap:6px;padding:8px 14px;font-size:13px;font-weight:600;line-height:1;transition:all .15s;display:inline-flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--brand-dark);color:#fff}.btn-primary:hover:not(:disabled){background:var(--brand)}.btn-ghost{color:var(--ink-2);border:1px solid var(--border);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--bg)}.btn-danger{background:var(--danger-soft);color:var(--danger);border:1px solid #fca5a5}.btn-danger:hover:not(:disabled){background:#fee2e2}.btn-sm{border-radius:6px;padding:5px 10px;font-size:12px}.btn-icon{padding:7px}.badge{white-space:nowrap;border-radius:999px;align-items:center;padding:2px 8px;font-size:11px;font-weight:600;display:inline-flex}.badge-blue{background:var(--brand-soft);color:var(--brand)}.badge-green{background:var(--success-soft);color:var(--success)}.badge-yellow{background:var(--warning-soft);color:var(--warning)}.badge-red{background:var(--danger-soft);color:var(--danger)}.badge-gray{background:var(--bg);color:var(--ink-3);border:1px solid var(--border)}.status-dot{align-items:center;gap:5px;font-size:12px;font-weight:500;display:inline-flex}.status-dot:before{content:"";background:currentColor;border-radius:50%;flex-shrink:0;width:6px;height:6px}.status-dot.pending{color:var(--ink-3)}.status-dot.progress{color:var(--brand)}.status-dot.done{color:var(--success)}.status-dot.blocked{color:var(--danger)}.status-dot.waiting{color:var(--warning)}.status-dot.cancelled{color:var(--ink-4)}.health-bar{align-items:center;gap:8px;display:flex}.health-bar-track{background:var(--border);border-radius:999px;flex:1;height:4px;overflow:hidden}.health-bar-fill{border-radius:999px;height:100%;transition:width .3s}.health-bar-fill.green{background:var(--success)}.health-bar-fill.yellow{background:var(--warning)}.health-bar-fill.red{background:var(--danger)}.field{gap:5px;display:grid}.label{color:var(--ink-2);font-size:12px;font-weight:600}.input,.select,.textarea{border:1px solid var(--border-2);width:100%;color:var(--ink);background:var(--surface);border-radius:8px;outline:none;padding:9px 12px;font-size:13px;transition:border-color .15s,box-shadow .15s}.input:focus,.select:focus,.textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px #2563eb1f}.textarea{resize:vertical;min-height:80px}.input-group{grid-template-columns:1fr 1fr;gap:12px;display:grid}.input-group.cols-3{grid-template-columns:1fr 1fr 1fr}.search-wrap{position:relative}.search-input{border:1px solid var(--border);background:var(--bg-2);border-radius:8px;outline:none;width:100%;padding:8px 12px 8px 36px;font-size:13px}.search-input:focus{border-color:var(--brand);background:var(--surface)}.search-icon{color:var(--ink-4);pointer-events:none;position:absolute;top:50%;left:10px;transform:translateY(-50%)}.modal-mask{z-index:100;background:#0f172a80;justify-content:center;align-items:center;padding:24px;animation:.15s fadeIn;display:flex;position:fixed;inset:0}.modal{background:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:min(560px,100%);max-height:90vh;animation:.2s slideUp;overflow-y:auto}.modal-lg{width:min(800px,100%)}.modal-header{border-bottom:1px solid var(--border);background:var(--surface);z-index:1;justify-content:space-between;align-items:flex-start;gap:12px;padding:20px 24px 16px;display:flex;position:sticky;top:0}.modal-title{color:var(--ink);font-size:16px;font-weight:700}.modal-body{gap:16px;padding:20px 24px;display:grid}.modal-footer{border-top:1px solid var(--border);justify-content:flex-end;gap:8px;padding:16px 24px;display:flex}.system-dialog-mask{z-index:180}.system-dialog{width:min(440px,100%)}.system-dialog-message{color:var(--ink-2);white-space:pre-line;font-size:14px;line-height:1.65}.system-dialog-input{resize:vertical;min-height:42px}.empty{text-align:center;color:var(--ink-3);padding:48px 24px}.empty-icon{margin-bottom:12px;font-size:32px}.empty-text{font-size:14px;font-weight:500}.empty-sub{color:var(--ink-4);margin-top:4px;font-size:13px}.tabs{border-bottom:1px solid var(--border);gap:0;margin-bottom:20px;display:flex}.tab{color:var(--ink-3);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:10px 16px;font-size:13px;font-weight:600;transition:color .15s,border-color .15s}.tab:hover{color:var(--ink)}.tab.active{color:var(--brand);border-bottom-color:var(--brand)}.filters{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;display:flex}.page-header{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:20px;display:flex}.page-title{color:var(--ink);font-size:18px;font-weight:800}.page-sub{color:var(--ink-3);margin-top:3px;font-size:13px}.team-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;display:grid}.team-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);gap:16px;min-width:0;padding:18px;display:grid}.team-card-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.team-name{color:var(--ink);overflow-wrap:anywhere;font-size:16px;font-weight:800;line-height:1.35}.team-desc{color:var(--ink-3);overflow-wrap:anywhere;margin-top:4px;font-size:12px;line-height:1.5}.team-leader{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-2);gap:8px;padding:10px 12px;display:grid}.team-label{color:var(--ink-4);font-size:11px;line-height:1.2}.team-leader-name{color:var(--ink-2);margin-top:1px;font-size:13px;font-weight:700}.team-leader-list{flex-wrap:wrap;gap:8px;min-width:0;display:flex}.team-leader-pill{border:1px solid var(--border);background:var(--surface);max-width:100%;color:var(--ink-2);border-radius:999px;align-items:center;gap:7px;padding:5px 9px 5px 5px;font-size:12px;font-weight:800;display:inline-flex}.team-leader-pill span:last-child{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:120px;overflow:hidden}.team-scope{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-2);gap:8px;padding:10px 12px;display:grid}.team-scope-list,.team-leader-editor,.team-scope-editor{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.team-leader-editor,.team-scope-editor{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-2);align-items:flex-start;max-height:180px;padding:10px;overflow:auto}.team-leader-option{border:1px solid var(--border);background:var(--surface);border-radius:8px;min-width:150px;padding:6px 8px}.team-avatar{background:var(--brand-soft);width:34px;height:34px;color:var(--brand);object-fit:cover;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:13px;font-weight:800;display:inline-flex}.team-avatar.sm{width:26px;height:26px;font-size:11px}.team-members{flex-wrap:wrap;gap:8px;min-height:34px;display:flex}.team-member-pill{border:1px solid var(--border);background:var(--bg-2);border-radius:999px;align-items:center;gap:7px;max-width:100%;padding:5px 8px 5px 5px;display:inline-flex}.team-member-name{color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;max-width:92px;font-size:12px;font-weight:700;overflow:hidden}.team-member-empty{color:var(--ink-4);padding:8px 0;font-size:13px}.team-card-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;padding-top:2px;display:flex}.member-add-panel{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;align-items:end;gap:12px;display:grid}.member-manage-list{gap:10px;display:grid}.member-manage-row{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-2);justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;display:flex}.member-manage-main{align-items:center;gap:10px;min-width:0;display:flex}.member-manage-name{color:var(--ink);margin-bottom:3px;font-size:13px;font-weight:700}@media (width<=720px){.team-grid,.member-add-panel{grid-template-columns:1fr}.member-add-panel .btn{justify-content:center}}.task-board{gap:16px;display:grid}.board-group{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.board-group-header{background:var(--bg-2);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:10px 16px;display:flex}.board-group-title{color:var(--ink);font-size:13px;font-weight:700}.executor-toolbar{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.executor-view-tabs{border:1px solid var(--border);border-radius:8px;flex-shrink:0;display:flex;overflow:hidden}.executor-focus-grid{grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:10px;margin-bottom:16px;display:grid}.executor-focus-card{border:1px solid var(--border);border-left:4px solid var(--focus-color);background:var(--surface);text-align:left;cursor:pointer;border-radius:8px;gap:3px;min-width:0;min-height:66px;padding:10px 12px;display:grid}.executor-focus-card:hover,.executor-focus-card.active{border-color:color-mix(in srgb, var(--focus-color) 45%, var(--border));background:color-mix(in srgb, var(--focus-color) 8%, var(--surface))}.executor-focus-value{color:var(--focus-color);font-size:22px;font-weight:800;line-height:1}.executor-focus-label{color:var(--ink-2);white-space:nowrap;font-size:12px;font-weight:700}.task-kanban{align-items:stretch;gap:12px;padding-bottom:8px;display:flex;overflow-x:auto}.task-kanban-column{border:1px solid var(--border);border-top:4px solid var(--column-color);background:var(--bg-2);border-radius:10px;flex-direction:column;flex:0 0 320px;min-width:320px;max-width:370px;max-height:calc(100vh - 250px);display:flex;overflow:hidden}.task-kanban-column.is-drop-enabled{transition:box-shadow .15s,background .15s}.task-kanban-column.is-drop-enabled:hover{box-shadow:0 8px 22px #0f172a14}.manager-kanban .task-kanban-column{flex-basis:300px}.task-kanban-column-head{background:color-mix(in srgb, var(--column-bg) 65%, var(--surface));border-bottom:1px solid var(--border);min-height:46px;color:var(--ink);justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;font-size:13px;font-weight:800;display:flex}.task-kanban-column-head>span,.task-kanban-title-wrap span{white-space:nowrap}.task-kanban-title-wrap{align-items:center;gap:8px;min-width:0;display:inline-flex}.task-kanban-alert{color:#dc2626;background:#fef2f2;border-bottom:1px solid #fecaca;padding:6px 12px;font-size:12px;font-weight:700}.task-kanban-column-body{align-content:start;gap:10px;padding:10px;display:grid;overflow:auto}.task-kanban-empty{border:1px dashed var(--border-2);min-height:74px;color:var(--ink-4);border-radius:8px;justify-content:center;align-items:center;font-size:12px;display:flex}.executor-task-card,.kanban-task-card{border:1px solid var(--border);border-left:4px solid var(--card-status-color,var(--border-2));background:var(--surface);border-radius:8px;padding:10px;box-shadow:0 1px 2px #0f172a0a}.executor-task-card[draggable=true],.kanban-task-card[draggable=true],.calendar-task-chip[draggable=true],.calendar-day-modal-task[draggable=true]{cursor:grab}.executor-task-card[draggable=true]:active,.kanban-task-card[draggable=true]:active,.calendar-task-chip[draggable=true]:active,.calendar-day-modal-task[draggable=true]:active{cursor:grabbing}.executor-task-card.is-locked,.kanban-task-card.is-locked,.calendar-task-chip.is-locked,.calendar-day-modal-task.is-locked{cursor:not-allowed;opacity:.78}.executor-task-card{margin-bottom:0}.executor-task-card-inner{flex-direction:column;align-items:stretch;gap:10px;display:flex}.executor-task-actions{flex-direction:row;justify-content:space-between;align-items:center;gap:6px;min-width:0;display:flex}.executor-task-buttons{flex-wrap:wrap;justify-content:flex-end;gap:4px;min-width:0;display:flex}.executor-task-actions .fi-status{flex:0 0 96px;width:96px}.executor-task-card .input{min-width:0}.kanban-task-card.selected{border-color:#bfdbfe;border-left-color:var(--brand);background:#eff6ff}.kanban-task-card.batch-mode{cursor:pointer;-webkit-user-select:none;user-select:none}.kanban-task-top{align-items:flex-start;gap:8px;display:flex}.kanban-task-title{min-width:0;color:var(--ink);overflow-wrap:break-word;flex:1;font-size:13px;font-weight:800;line-height:1.45}.kanban-task-meta{color:var(--ink-3);flex-wrap:wrap;gap:5px 8px;margin-top:6px;font-size:12px;display:flex}.kanban-task-client{color:var(--brand);cursor:pointer;font-weight:700}.kanban-task-progress{background:var(--bg-2);color:var(--ink-2);border-radius:6px;margin-top:7px;padding:6px 8px;font-size:12px;line-height:1.5}.kanban-task-fields{grid-template-columns:1fr 1fr;gap:6px;margin-top:9px;display:grid}.kanban-task-fields .fi,.kanban-task-fields .fi-date,.kanban-task-fields .fi-assignee,.kanban-task-fields .fi-status{width:100%}.kanban-task-chip{border:1px solid var(--border);min-height:28px;color:var(--ink-2);background:var(--bg-2);border-radius:6px;align-items:center;padding:4px 6px;font-size:12px;display:inline-flex}.kanban-task-chip.is-danger,.fi-date.is-danger{color:#dc2626;background:#fef2f2;border-color:#fecaca}.kanban-task-footer{justify-content:space-between;align-items:center;gap:8px;margin-top:9px;display:flex}.manager-view-tabs{flex-wrap:wrap;gap:6px;margin-bottom:12px;display:flex}.calendar-panel{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden}.calendar-toolbar{border-bottom:1px solid var(--border);background:var(--bg-2);justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex}.calendar-title{color:var(--ink);font-size:18px;font-weight:800}.calendar-sub{color:var(--ink-3);margin-top:2px;font-size:12px}.calendar-tools,.calendar-mode-tabs{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.calendar-mode-tabs{border:1px solid var(--border);border-radius:8px;gap:0;overflow:hidden}.calendar-mode-tabs .btn{border-radius:0}.client-legend{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:8px 14px;padding:10px 16px;display:flex}.client-legend-item{min-width:0;color:var(--ink-2);align-items:center;gap:6px;font-size:12px;display:inline-flex}.client-legend-dot{border-radius:50%;flex-shrink:0;width:9px;height:9px}.client-legend-more{color:var(--ink-4);font-size:12px}.calendar-grid{background:var(--border);grid-template-columns:repeat(7,minmax(128px,1fr));gap:1px;display:grid}.calendar-week-head{background:var(--bg-2);min-height:36px;color:var(--ink-3);text-align:center;padding:8px 10px;font-size:12px;font-weight:800}.calendar-cell{background:var(--surface);flex-direction:column;gap:6px;min-width:0;min-height:142px;padding:8px;display:flex}.calendar-cell.is-drop-enabled{transition:background .15s,box-shadow .15s}.calendar-cell.is-drop-enabled:hover{background:color-mix(in srgb, var(--brand) 4%, var(--surface))}.calendar-grid.week .calendar-cell{min-height:520px}.calendar-cell.muted{background:#f8fafc}.calendar-cell.today{box-shadow:inset 0 0 0 2px var(--brand)}.calendar-day-head{min-height:20px;color:var(--ink);justify-content:space-between;align-items:center;gap:6px;font-size:12px;font-weight:800;display:flex}.calendar-cell.muted .calendar-day-head{color:var(--ink-4)}.calendar-count{background:var(--bg);min-width:18px;height:18px;color:var(--ink-3);border-radius:999px;justify-content:center;align-items:center;padding:0 5px;font-size:10px;display:inline-flex}.calendar-task-list{align-content:start;gap:5px;display:grid}.calendar-task-chip{border:1px solid color-mix(in srgb, var(--client-color) 35%, var(--border));border-left:4px solid var(--client-color);background:color-mix(in srgb, var(--client-color) 7%, var(--surface));text-align:left;border-radius:7px;gap:2px;width:100%;padding:6px 7px;display:grid}.calendar-task-chip:hover{background:color-mix(in srgb, var(--client-color) 12%, var(--surface))}.calendar-task-client,.calendar-task-title,.calendar-task-meta{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.calendar-task-client{color:var(--client-color);font-size:11px;font-weight:800}.calendar-task-title{color:var(--ink);font-size:12px;font-weight:700}.calendar-task-meta{color:var(--ink-3);font-size:11px}.calendar-more,.calendar-more-btn{color:var(--ink-4);padding:2px 4px;font-size:12px}.calendar-more-btn{cursor:pointer;text-align:left;background:0 0;border:0;border-radius:6px;width:fit-content}.calendar-more-btn:hover{background:var(--bg);color:var(--brand)}.calendar-day-modal-list{gap:10px;display:grid}.calendar-day-modal-task{border:1px solid color-mix(in srgb, var(--client-color) 28%, var(--border));border-left:4px solid var(--client-color);background:color-mix(in srgb, var(--client-color) 6%, var(--surface));text-align:left;cursor:pointer;border-radius:8px;gap:8px;width:100%;padding:10px 12px;display:grid}.calendar-day-modal-task:hover{background:color-mix(in srgb, var(--client-color) 10%, var(--surface))}.calendar-day-modal-main{gap:3px;min-width:0;display:grid}.calendar-day-modal-client{color:var(--client-color);font-size:12px;font-weight:800}.calendar-day-modal-title{color:var(--ink);font-size:14px;font-weight:800;line-height:1.45}.calendar-day-modal-meta{color:var(--ink-3);flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:12px;display:flex}.calendar-modal-drag-hidden{opacity:0;pointer-events:none}.calendar-drag-cancel-zone{z-index:140;width:min(420px,100vw - 32px);min-height:58px;box-shadow:var(--shadow-lg);color:var(--ink-2);pointer-events:auto;background:#fffffff5;border:2px dashed #94a3b8;border-radius:12px;justify-content:center;align-items:center;font-size:15px;font-weight:800;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.calendar-task-detail{gap:14px;display:grid}.calendar-task-detail-head{border:1px solid color-mix(in srgb, var(--client-color) 28%, var(--border));border-left:4px solid var(--client-color);background:color-mix(in srgb, var(--client-color) 6%, var(--surface));border-radius:8px;justify-content:space-between;align-items:flex-start;gap:12px;padding:14px 16px;display:flex}.calendar-task-detail-client{color:var(--client-color);margin-bottom:4px;font-size:12px;font-weight:800}.calendar-task-detail-title{color:var(--ink);font-size:18px;font-weight:800;line-height:1.45}.calendar-task-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.calendar-task-detail-field{border:1px solid var(--border);background:var(--bg-2);border-radius:8px;gap:5px;min-width:0;padding:10px 12px;display:grid}.calendar-task-detail-field span{color:var(--ink-4);font-size:11px;font-weight:700}.calendar-task-detail-field strong{color:var(--ink-2);overflow-wrap:anywhere;font-size:13px}.calendar-task-detail-field .fi-status{width:140px}.calendar-task-detail-progress{border:1px solid var(--border);background:var(--surface);color:var(--ink-2);border-radius:8px;padding:10px 12px;font-size:13px;line-height:1.6}.manager-overview{gap:16px;display:grid}.manager-health-grid{grid-template-columns:repeat(6,minmax(0,1fr));gap:12px;display:grid}.manager-health-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;gap:4px;min-width:0;padding:14px 16px;display:grid}.manager-health-value{font-size:26px;font-weight:900;line-height:1}.manager-health-card span{color:var(--ink);font-size:13px;font-weight:800}.manager-health-card em{color:var(--ink-3);overflow-wrap:anywhere;font-size:11px;font-style:normal}.manager-overview-stats{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.manager-stat-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:14px 16px}.manager-stat-card div{font-size:26px;font-weight:900;line-height:1}.manager-stat-card span{color:var(--ink-3);margin-top:5px;font-size:12px;font-weight:700;display:block}.manager-overview-grid{grid-template-columns:minmax(0,1.15fr) minmax(360px,.85fr);align-items:start;gap:16px;display:grid}.manager-overview-grid-wide{grid-template-columns:minmax(0,1.35fr) minmax(380px,.65fr)}.manager-panel{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden}.manager-panel-head{background:var(--bg-2);border-bottom:1px solid var(--border);padding:14px 16px}.manager-panel-title{color:var(--ink);font-size:15px;font-weight:800}.manager-panel-sub{color:var(--ink-3);margin-top:2px;font-size:12px}.workload-list{gap:10px;padding:12px;display:grid}.workload-card{border:1px solid var(--border);background:var(--surface);border-radius:8px;gap:9px;padding:12px;display:grid}.workload-head{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.workload-name{color:var(--ink);font-size:14px;font-weight:900}.workload-sub{color:var(--ink-3);margin-top:2px;font-size:12px}.workload-track{background:var(--bg);border-radius:999px;height:8px;overflow:hidden}.workload-track span{border-radius:inherit;background:linear-gradient(90deg,#2563eb,#ea580c);height:100%;display:block}.workload-metrics{grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;display:grid}.workload-metrics span{border:1px solid var(--border);background:var(--bg-2);color:var(--ink-3);white-space:nowrap;border-radius:7px;padding:6px 8px;font-size:11px}.workload-metrics strong{color:var(--ink);font-size:12px}.workload-task-list{gap:6px;display:grid}.workload-task{border:1px solid color-mix(in srgb, var(--client-color) 28%, var(--border));border-left:4px solid var(--client-color);background:var(--bg-2);text-align:left;border-radius:7px;grid-template-columns:minmax(92px,.34fr) minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 8px;display:grid}.workload-task span,.workload-task strong,.workload-task em{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.workload-task span{color:var(--client-color);font-size:12px;font-weight:800}.workload-task strong{color:var(--ink);font-size:12px}.workload-task em{color:var(--ink-3);font-size:11px;font-style:normal}.risk-task-list{gap:8px;padding:12px;display:grid}.risk-task-row{border:1px solid color-mix(in srgb, var(--client-color) 25%, var(--border));border-left:4px solid var(--client-color);background:var(--surface);text-align:left;border-radius:8px;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:10px;width:100%;padding:9px 10px;display:grid}.risk-task-row strong,.risk-task-row em{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.risk-task-row strong{color:var(--ink);font-size:13px;font-weight:800;display:block}.risk-task-row em{color:var(--ink-3);margin-top:2px;font-size:11px;font-style:normal;display:block}.executor-progress-list{gap:10px;padding:12px;display:grid}.executor-progress-card{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:10px}.executor-progress-head{justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:8px;display:flex}.executor-progress-name{color:var(--ink);font-size:14px;font-weight:800}.executor-progress-sub{color:var(--ink-3);font-size:12px}.executor-progress-tasks{gap:6px;display:grid}.executor-progress-task{border:1px solid color-mix(in srgb, var(--client-color) 28%, var(--border));border-left:4px solid var(--client-color);background:var(--bg-2);text-align:left;border-radius:7px;grid-template-columns:minmax(92px,.4fr) minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 8px;display:grid}.executor-progress-task span,.executor-progress-task strong,.executor-progress-task em{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.executor-progress-task span{color:var(--client-color);font-size:12px;font-weight:800}.executor-progress-task strong{color:var(--ink);font-size:12px}.executor-progress-task em{color:var(--ink-3);font-size:11px;font-style:normal}.completion-bars{border-bottom:1px solid var(--border);gap:9px;padding:14px 16px;display:grid}.completion-bar-row{grid-template-columns:44px minmax(0,1fr) 28px;align-items:center;gap:8px;font-size:12px;display:grid}.completion-bar-track{background:var(--bg);border-radius:999px;height:10px;overflow:hidden}.completion-bar-fill{border-radius:inherit;background:linear-gradient(90deg,#16a34a,#0891b2);height:100%}.completion-bar-fill.is-due{background:linear-gradient(90deg,#2563eb,#ea580c)}.completion-bar-row strong{text-align:right}.completion-table-wrap{overflow-x:auto}.completion-table{border-collapse:collapse;width:100%;font-size:12px}.completion-table th,.completion-table td{border-bottom:1px solid var(--border);text-align:center;white-space:nowrap;padding:9px 10px}.completion-table th:first-child,.completion-table td:first-child{text-align:left;font-weight:700}.status-structure-list,.client-risk-list{gap:10px;padding:14px 16px;display:grid}.status-structure-row{grid-template-columns:80px minmax(0,1fr) 36px;align-items:center;gap:10px;font-size:12px;display:grid}.status-structure-row span{color:var(--ink-2);font-weight:800}.status-structure-row div{background:var(--status-bg);border-radius:999px;height:10px;overflow:hidden}.status-structure-row i{border-radius:inherit;background:var(--status-color);height:100%;display:block}.status-structure-row strong{text-align:right}.client-risk-row{border:1px solid var(--border);background:var(--surface);text-align:left;border-radius:8px;gap:8px;width:100%;padding:10px 12px;display:grid}.client-risk-row strong{color:var(--ink);font-size:13px;font-weight:900;display:block}.client-risk-row span{color:var(--ink-3);margin-top:2px;font-size:12px;display:block}.client-risk-track{background:var(--bg);border-radius:999px;height:8px;overflow:hidden}.client-risk-track i{border-radius:inherit;background:linear-gradient(90deg,#0f766e,#ea580c);height:100%;display:block}.task-row{border-bottom:1px solid var(--border);border-left:3px solid #0000;align-items:center;gap:6px;min-height:52px;padding:9px 16px;transition:background .12s;display:flex}.task-row:last-of-type{border-bottom:none}.task-row:hover{background:var(--bg-2)}.task-row.selected{border-left-color:var(--brand);background:#eff6ff}.task-row.batch-mode{cursor:pointer;-webkit-user-select:none;user-select:none}.task-row-title{flex:1;min-width:0}.task-row-title .t-name{color:var(--ink);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}.task-row-title .t-sub{color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;margin-top:2px;font-size:11px;overflow:hidden}.task-row-title .t-progress{color:var(--brand);margin-top:2px;font-size:11px}.task-row-expand{border-bottom:1px solid var(--border);background:var(--bg-2);padding:12px 16px 14px 19px}.fi{color:var(--ink-2);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;max-width:100%;padding:4px 6px;font-family:inherit;font-size:12px;transition:border-color .1s,background .1s}.fi:hover{border-color:var(--border-2);background:var(--surface)}.fi:focus{border-color:var(--brand);background:var(--surface);outline:none}.fi-date{width:108px;font-size:11px}.fi-assignee{width:90px}.fi-status{text-align:center;border-radius:99px;width:82px;font-size:12px;font-weight:600}@media (width<=900px){.task-kanban{grid-template-columns:1fr;display:grid;overflow:visible}.task-kanban-column{min-width:0;max-width:none;max-height:none}.executor-task-card-inner{flex-direction:column}.executor-task-actions{flex-direction:column;align-items:stretch;width:100%}.executor-task-buttons{justify-content:flex-start}.executor-task-actions .fi-status{flex-basis:auto;width:100%}.calendar-toolbar{flex-direction:column;align-items:flex-start}.calendar-grid{grid-template-columns:repeat(7,minmax(104px,1fr));overflow-x:auto}.calendar-cell{min-height:128px}.manager-health-grid,.manager-overview-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.manager-overview-grid{grid-template-columns:1fr}.workload-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.workload-task,.risk-task-row,.executor-progress-task{grid-template-columns:1fr}}.task-item{border-bottom:1px solid var(--border);grid-template-columns:1fr auto;align-items:start;gap:8px;padding:12px 16px;transition:background .1s;display:grid}.task-item:last-child{border-bottom:none}.task-item:hover{background:var(--bg-2)}.task-title{color:var(--ink);font-size:13px;font-weight:600}.task-meta{color:var(--ink-3);margin-top:3px;font-size:12px}.task-actions{align-items:center;gap:6px;display:flex}.plan-wrap{border:1px solid var(--border);border-radius:12px;overflow-x:auto}.plan-table{border-collapse:collapse;table-layout:fixed;width:100%}.plan-th-client{text-align:left;background:var(--bg-2);width:148px;min-width:148px;color:var(--ink-3);border-bottom:2px solid var(--border);border-right:2px solid var(--border-2);z-index:2;padding:8px 12px;font-size:11px;font-weight:600;position:sticky;left:0}.plan-th-day{text-align:center;background:var(--bg-2);color:var(--ink-3);border-bottom:2px solid var(--border);border-right:1px solid var(--border);min-width:120px;padding:7px 4px;font-size:11px;font-weight:600}.plan-th-day.today{color:var(--brand);background:#eff6ff}.plan-td-client{border-bottom:1px solid var(--border);border-right:2px solid var(--border-2);background:var(--bg-2);vertical-align:middle;z-index:1;padding:8px 12px;position:sticky;left:0}.plan-td-day{border-bottom:1px solid var(--border);border-right:1px solid var(--border);vertical-align:top;min-height:56px;padding:5px}.plan-td-day:last-child{border-right:none}.plan-td-day.today{background:#fafcff}.plan-td-day.past{background:var(--bg-2)}.plan-chip{cursor:pointer;border-radius:6px;margin-bottom:3px;padding:4px 7px;font-size:11px}.plan-chip:hover{filter:brightness(.95)}.plan-draft-chip{border:1.5px dashed;border-radius:6px;align-items:center;gap:4px;margin-bottom:3px;padding:4px 7px;font-size:11px;display:flex}.plan-add-btn{width:100%;color:var(--ink-4);cursor:pointer;background:0 0;border:1px dashed #0000;border-radius:6px;padding:5px 2px;font-size:13px;transition:all .15s;display:block}.plan-add-btn:hover{color:var(--brand);border-color:var(--brand);background:var(--brand-soft)}.plan-cell-form{background:var(--surface);border:1px solid var(--border-2);border-radius:8px;padding:6px;box-shadow:0 2px 8px #0000001a}.week-grid{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--border);grid-template-columns:repeat(7,minmax(130px,1fr));gap:1px;display:grid;overflow:hidden}.week-col{background:var(--surface);flex-direction:column;min-height:420px;display:flex}.week-col-header{background:var(--bg-2);border-bottom:1px solid var(--border);text-align:center;z-index:1;padding:10px 10px 8px;position:sticky;top:0}.week-col-header.today{background:#eff6ff}.week-col-header.past{opacity:.6}.week-day-name{color:var(--ink-3);margin-bottom:2px;font-size:11px;font-weight:600}.week-day-date{color:var(--ink);font-size:17px;font-weight:800;line-height:1}.week-day-date.today{color:var(--brand)}.week-col-body{flex-direction:column;flex:1;gap:6px;padding:6px;display:flex}.week-add-btn{border:1px dashed var(--border-2);width:100%;color:var(--ink-4);cursor:pointer;background:0 0;border-radius:8px;margin-top:auto;padding:6px 0;font-size:11px;transition:all .15s}.week-add-btn:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}.sched-card{cursor:pointer;background:var(--surface);border-left:3px solid;border-radius:8px;padding:8px 10px;font-size:12px;transition:box-shadow .15s,transform .1s;box-shadow:0 1px 3px #0000000f}.sched-card:hover{transform:translateY(-1px);box-shadow:0 3px 10px #0000001a}.sched-card.cancelled{opacity:.45}.risk-tag{border-radius:4px;align-items:center;padding:2px 7px;font-size:11px;font-weight:700;display:inline-flex}.risk-overdue{color:#dc2626;background:#fef2f2}.risk-urgent{color:#c2410c;background:#fff7ed}.risk-soon{color:#b45309;background:#fffbeb}.progress-bar{background:var(--border);border-radius:999px;height:6px;overflow:hidden}.progress-fill{background:var(--brand);border-radius:999px;height:100%;transition:width .3s}.progress-fill.green{background:var(--success)}.project-hero{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);justify-content:space-between;align-items:center;gap:20px;margin-bottom:20px;padding:20px;display:flex}.project-hero-main{min-width:0}.project-title-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.project-title-row h2{overflow-wrap:anywhere;font-size:22px;font-weight:800;line-height:1.25}.project-subline{color:var(--ink-3);flex-wrap:wrap;gap:10px;margin-top:8px;font-size:13px;display:flex}.project-subline span{border:1px solid var(--border);background:var(--bg-2);border-radius:999px;padding:3px 8px}.project-progress-panel{flex-shrink:0;align-items:center;gap:14px;display:flex}.progress-ring{border-radius:50%;place-items:center;width:72px;height:72px;display:grid}.progress-ring-inner{background:var(--surface);width:52px;height:52px;color:var(--success);border-radius:50%;place-items:center;font-size:15px;font-weight:800;display:grid}.project-progress-text{font-size:20px;font-weight:800;line-height:1.2}.project-card-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;display:grid}.project-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);gap:14px;padding:16px;display:grid}.project-card-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.project-card-title{overflow-wrap:anywhere;font-size:15px;font-weight:800;line-height:1.35}.project-card-meta{color:var(--ink-3);margin-top:6px;font-size:12px}.project-card-actions{justify-content:flex-end;gap:8px;display:flex}.info-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.schedule-row-main{align-items:flex-start;gap:10px;min-width:0;display:flex}.schedule-type-icon{background:var(--brand-soft);width:28px;height:28px;color:var(--brand);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;font-weight:800;display:inline-flex}.attachment-panel{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-2);gap:10px;margin-top:10px;padding:10px 12px;display:grid}.notification-page-list{display:grid}.notification-page-item{border:none;border-bottom:1px solid var(--border);background:var(--surface);text-align:left;justify-content:space-between;align-items:flex-start;gap:16px;width:100%;padding:16px 20px 16px 28px;display:flex;position:relative}.notification-page-item:last-child{border-bottom:none}.notification-page-item:hover{background:var(--bg-2)}.notification-page-item.unread:before{top:24px;left:14px}.notification-page-main{gap:4px;min-width:0;display:grid}.notification-page-title{color:var(--ink);font-size:14px;font-weight:800}.notification-page-body{color:var(--ink-2);overflow-wrap:anywhere;font-size:13px}.notification-page-time{color:var(--ink-4);font-size:12px}.attachment-panel-title{color:var(--ink-2);font-size:12px;font-weight:800}.attachment-list{gap:8px;display:grid}.attachment-row{border:1px solid var(--border);background:var(--surface);border-radius:8px;justify-content:space-between;align-items:flex-start;gap:10px;padding:8px 10px;display:flex}.attachment-name{color:var(--brand);overflow-wrap:anywhere;font-size:12px;font-weight:700}.attachment-upload{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;display:grid}.attachment-upload-full{grid-column:1/-1}.attachment-upload textarea{resize:vertical;min-height:64px}.attachment-upload-actions{flex-wrap:wrap;grid-column:1/-1;align-items:center;gap:12px;display:flex}.checkbox-line,.deliverable-switch{color:var(--ink-2);align-items:center;gap:6px;font-size:12px;display:inline-flex}.deliverable-note{min-width:180px;min-height:48px}.template-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;display:grid}.template-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);gap:16px;padding:18px;display:grid}.template-card-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.template-name{color:var(--ink);overflow-wrap:anywhere;font-size:18px;font-weight:800;line-height:1.3}.template-desc{color:var(--ink-3);overflow-wrap:anywhere;margin-top:6px;font-size:12px;line-height:1.5}.template-stats,.template-actions,.template-detail-actions,.template-toolbar,.template-toolbar-left,.template-toolbar-right,.template-row-actions,.template-package-cell,.template-checks{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.template-actions,.template-detail-actions{justify-content:flex-end}.template-detail-title{color:var(--ink);overflow-wrap:anywhere;margin-top:10px;font-size:22px;font-weight:800;line-height:1.25}.template-toolbar{justify-content:space-between;margin-bottom:16px}.template-toolbar-left,.template-toolbar-right{min-height:34px}.template-batch-float{z-index:60;background:var(--surface);border:1px solid var(--border);max-width:min(920px,100vw - 32px);box-shadow:var(--shadow-lg);border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.template-item-table th:first-child,.template-item-table td:first-child{text-align:center}.inline-select{align-items:center;gap:6px;min-width:120px;display:inline-flex}.inline-select .select{min-width:132px;padding:5px 8px;font-size:12px}.inline-select-display{text-align:left;background:0 0;border:none;padding:2px 0}.inline-spinner{width:14px;height:14px}.divider{background:var(--border);height:1px;margin:16px 0}.text-muted{color:var(--ink-3)}.text-sm{font-size:12px}.font-bold{font-weight:700}.flex{display:flex}.flex-center{align-items:center;display:flex}.gap-8{gap:8px}.gap-12{gap:12px}.mt-4{margin-top:4px}.mt-8{margin-top:8px}.mt-16{margin-top:16px}.grid-2{grid-template-columns:1fr 1fr;gap:16px;display:grid}.grid-3{grid-template-columns:1fr 1fr 1fr;gap:16px;display:grid}.user-stat-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px;display:grid}.user-stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px 16px}.user-stat span{color:var(--ink-3);margin-bottom:4px;font-size:12px;display:block}.user-stat strong{color:var(--ink);font-size:24px;line-height:1}.user-toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;display:flex}.user-search{width:min(360px,100%)}.user-filter-select{width:150px}.user-role-filters{margin-bottom:16px}.login-page{background:radial-gradient(circle at 18% 18%,#c9aa6a38,#0000 28%),linear-gradient(135deg,#061a44 0%,#0b2b66 48%,#f5f7fb 48% 100%);justify-content:center;align-items:center;min-height:100vh;padding:32px;display:flex}.login-shell{background:#fff;border-radius:18px;grid-template-columns:1.08fr 420px;width:min(980px,100%);min-height:620px;display:grid;overflow:hidden;box-shadow:0 24px 80px #061a4442}.login-brand-panel{color:#fff;background:linear-gradient(135deg,#061a44f5,#0a275cf0),url(/brand/logo-mark-blue.png) 50%/70% no-repeat;flex-direction:column;justify-content:space-between;padding:42px;display:flex;position:relative}.login-brand-panel:after{content:"";background:linear-gradient(90deg,#0000,#c9aa6ab3,#0000);height:1px;position:absolute;inset:auto 42px 120px}.login-brand-wordmark{color:#f3d58d;letter-spacing:.18em;align-self:flex-start;font-size:22px;font-weight:900}.login-brand-copy{z-index:1;max-width:440px;position:relative}.login-brand-kicker{color:#d9bd7a;margin-bottom:14px;font-size:13px;font-weight:800}.login-brand-copy h1{color:#fff;letter-spacing:0;margin-bottom:14px;font-size:36px;line-height:1.18}.login-brand-copy p{color:#ffffffbd;font-size:15px}.login-brand-values{z-index:1;flex-wrap:wrap;gap:8px;display:flex;position:relative}.login-brand-values span{color:#f3d58d;border:1px solid #c9aa6a61;border-radius:999px;padding:6px 12px;font-size:12px;font-weight:700}.login-card{background:var(--surface);box-shadow:none;border-radius:0;align-self:center;width:100%;padding:44px 40px}.login-logo{text-align:center;margin-bottom:28px}.login-logo img{object-fit:contain;width:188px;height:auto}.login-logo h1{color:var(--brand);font-size:22px;font-weight:800}.login-logo p{color:var(--ink-3);margin-top:4px;font-size:13px}.login-tabs{background:var(--bg);border-radius:10px;grid-template-columns:repeat(3,1fr);gap:4px;margin-bottom:18px;padding:4px;display:grid}.login-tabs button{color:var(--ink-3);background:0 0;border:none;border-radius:8px;padding:8px 4px;font-size:13px;font-weight:700}.login-tabs button.active{background:var(--surface);color:var(--brand-dark);box-shadow:var(--shadow)}.login-form{gap:16px;display:grid}.login-btn{border-radius:10px;justify-content:center;width:100%;margin-top:4px;padding:11px;font-size:14px}.login-err{background:var(--danger-soft);color:var(--danger);border-radius:8px;padding:10px 14px;font-size:13px}.login-tip{background:var(--brand-soft);color:var(--brand);border-radius:8px;padding:10px 14px;font-size:13px}.login-code-row{grid-template-columns:1fr auto;align-items:center;gap:8px;display:grid}.profile-grid{grid-template-columns:minmax(0,1fr) minmax(320px,.8fr);align-items:start;gap:16px;display:grid}.profile-form{gap:16px;display:grid}.profile-head{border:1px solid var(--border);background:var(--bg-2);border-radius:8px;align-items:center;gap:12px;padding:12px;display:flex}.profile-avatar{width:48px;height:48px;font-size:18px}.profile-name{color:var(--ink);font-size:15px;font-weight:800}.profile-meta{color:var(--ink-3);margin-top:2px;font-size:12px}.profile-readonly{border:1px solid var(--border);background:var(--bg-2);color:var(--ink-3);border-radius:8px;justify-content:space-between;align-items:center;gap:12px;padding:12px;font-size:13px;display:flex}.profile-readonly strong{color:var(--ink)}.profile-submit{justify-content:center}.notice{border-radius:8px;padding:10px 14px;font-size:13px}.notice-ok{background:var(--success-soft);color:var(--success)}.notice-err{background:var(--danger-soft);color:var(--danger)}.notice-warn{background:var(--warning-soft);color:var(--warning)}.notice-info{background:var(--brand-soft);color:var(--brand)}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:2px solid var(--border);border-top-color:var(--brand);border-radius:50%;width:20px;height:20px;animation:.6s linear infinite spin}.loading{justify-content:center;align-items:center;padding:48px;display:flex}@media (width<=780px){.login-page{background:linear-gradient(#061a44 0%,#0b2b66 34%,#f5f7fb 34% 100%);align-items:flex-start;padding:18px}.login-shell{grid-template-columns:1fr;min-height:0}.login-brand-panel{min-height:260px;padding:28px}.login-brand-wordmark{font-size:18px}.login-brand-copy h1{font-size:26px}.login-brand-panel:after{inset:auto 28px 92px}.login-card{padding:30px 24px}.login-logo img{width:164px}.profile-grid{grid-template-columns:1fr}.user-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.user-toolbar{flex-direction:column;align-items:stretch}.user-search,.user-filter-select{width:100%}.project-hero{flex-direction:column;align-items:flex-start}.project-progress-panel{justify-content:space-between;width:100%}.info-grid,.attachment-upload{grid-template-columns:1fr}.attachment-row{flex-direction:column}.template-toolbar{flex-direction:column;align-items:stretch}.template-toolbar-left,.template-toolbar-right{align-items:stretch}.template-batch-float{align-items:stretch;bottom:12px;left:12px;right:12px;transform:none}.template-batch-float .btn{flex:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.portal-page{max-width:860px;margin:0 auto;padding:32px 24px 80px}.portal-hero{background:linear-gradient(135deg, var(--brand) 0%, #1e40af 100%);color:#fff;border-radius:20px;margin-bottom:24px;padding:32px}.portal-hero h1{font-size:24px;font-weight:800}.portal-hero p{opacity:.85;margin-top:8px;font-size:14px}.portal-metrics{grid-template-columns:repeat(4,1fr);gap:10px;margin-top:20px;display:grid}.portal-metric{text-align:center;background:#ffffff26;border-radius:12px;padding:12px}.portal-metric strong{font-size:22px;font-weight:800;display:block}.portal-metric span{opacity:.8;font-size:11px}.portal-root{-webkit-font-smoothing:antialiased;color:#0f172a;background:#f7f5ef;min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Helvetica Neue,sans-serif}.portal-loading{color:#64748b;flex-direction:column;justify-content:center;align-items:center;gap:16px;min-height:100vh;font-size:14px;display:flex}.portal-spinner{border:3px solid #e2e8f0;border-top-color:var(--brand,#2563eb);border-radius:50%;width:36px;height:36px;animation:.7s linear infinite portalSpin}@keyframes portalSpin{to{transform:rotate(360deg)}}.portal-error{text-align:center;color:#64748b;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:100vh;padding:32px;display:flex}.portal-error-icon{margin-bottom:8px;font-size:48px}.portal-error h2{color:#0f172a;margin:0;font-size:22px;font-weight:700}.portal-error p{margin:0;font-size:14px}.portal-hero{color:#fff;position:relative;overflow:hidden}.portal-hero:after{content:"";opacity:.08;filter:grayscale()brightness(2.5);pointer-events:none;background:url(/brand/logo-mark-blue.png) 50%/contain no-repeat;width:520px;height:520px;position:absolute;top:-160px;right:-120px}.portal-hero-inner{z-index:1;max-width:880px;margin:0 auto;padding:52px 32px 44px;position:relative}.portal-brand-line{border-bottom:1px solid #c9aa6a47;justify-content:space-between;align-items:center;gap:20px;margin-bottom:34px;padding-bottom:18px;display:flex}.portal-brand-line strong{color:#f3d58d;letter-spacing:.18em;white-space:nowrap;font-size:20px;font-weight:900}.portal-brand-line span{color:#e8d39b;letter-spacing:.04em;font-size:12px;font-weight:800}.portal-hero-top{align-items:center;gap:20px;margin-bottom:32px;display:flex}.portal-hero-logo{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#fff;background:#ffffff24;border:1.5px solid #ffffff40;border-radius:16px;flex-shrink:0;justify-content:center;align-items:center;width:68px;height:68px;font-size:26px;font-weight:800;display:flex;overflow:hidden}.portal-hero-logo img{object-fit:cover;width:100%;height:100%}.portal-hero-info{flex:1;min-width:0}.portal-hero-eyebrow{letter-spacing:.12em;text-transform:uppercase;color:#e8d39b;opacity:1;margin-bottom:7px;font-size:11px;font-weight:600}.portal-hero-name{letter-spacing:-.02em;margin:0 0 7px;font-size:30px;font-weight:800;line-height:1.1}.portal-hero-package{opacity:.8;font-size:14px;font-weight:500}.portal-hero-period{opacity:.65;margin-top:14px;font-size:12px}.portal-hero-stats{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#ffffff1a;border:1px solid #c9aa6a40;border-radius:12px;flex-wrap:wrap;align-items:center;gap:8px;padding:20px 24px;display:flex}.portal-hero-stat{flex:1;align-items:center;gap:12px;min-width:90px;display:flex}.portal-hero-stat.center{text-align:center;flex-direction:column;align-items:center;gap:4px}.portal-hero-stat-sep{background:#fff3;flex-shrink:0;width:1px;height:36px}.portal-hero-stat-num{color:#fffffff2;font-size:32px;font-weight:800;line-height:1}.portal-hero-stat-label{opacity:.75;font-size:12px;font-weight:500}.portal-hero-stat-val{opacity:.9;margin-top:3px;font-size:14px;font-weight:700}.portal-nav-sticky{z-index:50;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#fffffff7;border-bottom:1px solid #e2e8f0;position:sticky;top:0;box-shadow:0 1px 8px #0f172a0f}.portal-nav-inner{scrollbar-width:none;max-width:880px;margin:0 auto;padding:0 32px;display:flex;overflow-x:auto}.portal-nav-inner::-webkit-scrollbar{display:none}.portal-nav-btn{color:#64748b;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2.5px solid #0000;align-items:center;gap:6px;padding:15px 14px;font-size:13px;font-weight:600;transition:color .15s,border-color .15s;display:flex;position:relative}.portal-nav-btn:hover{color:#0f172a}.portal-nav-btn.active{color:var(--brand);border-bottom-color:var(--brand)}.portal-nav-dot{border-radius:50%;flex-shrink:0;width:7px;height:7px;animation:1.8s ease-in-out infinite pulseDot}@keyframes pulseDot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.75)}}.portal-nav-badge{color:#fff;border-radius:99px;justify-content:center;align-items:center;min-width:18px;height:18px;padding:0 5px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.portal-main{max-width:880px;margin:0 auto;padding:0 32px 64px}.portal-section{padding-top:52px}.portal-section-header{align-items:flex-start;gap:14px;margin-bottom:20px;display:flex}.portal-section-icon{border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;margin-top:2px;font-size:16px;font-weight:800;display:flex}.portal-section-icon.action{color:#d97706;background:#fffbeb}.portal-section-icon.done{color:#16a34a;background:#f0fdf4}.portal-section-icon.future{color:#8a6f36;background:#f7f1e3}.portal-section-title{color:#0f172a;letter-spacing:-.02em;margin:0 0 5px;font-size:20px;font-weight:800}.portal-section-sub{color:#64748b;margin:0;font-size:13px;line-height:1.5}.portal-no-action{text-align:center;background:#fff;border:1px solid #dcfce7;border-radius:20px;flex-direction:column;align-items:center;padding:52px 24px;display:flex}.portal-no-action-check{color:#16a34a;background:#f0fdf4;border:2px solid #bbf7d0;border-radius:50%;justify-content:center;align-items:center;width:52px;height:52px;margin-bottom:16px;font-size:22px;display:flex}.portal-no-action h3{color:#15803d;margin:0 0 8px;font-size:16px;font-weight:700}.portal-no-action p{color:#4ade80;margin:0;font-size:13px}.portal-action-list{gap:12px;display:grid}.portal-action-card{background:#fff;border:1px solid #fde68a;border-left:4px solid #f59e0b;border-radius:14px;padding:20px 22px;transition:box-shadow .2s;box-shadow:0 2px 12px #f59e0b14}.portal-action-card:hover{box-shadow:0 6px 24px #f59e0b24}.portal-action-card.overdue{border-color:#fca5a5 #fca5a5 #fca5a5 #ef4444;box-shadow:0 2px 12px #ef444414}.portal-action-top{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.portal-action-tag{border-radius:99px;padding:3px 10px;font-size:12px;font-weight:700}.portal-action-due{font-size:12px;font-weight:600}.portal-action-title{color:#0f172a;margin-bottom:8px;font-size:16px;font-weight:700;line-height:1.45}.portal-action-desc{color:#64748b;margin-bottom:10px;font-size:13px;line-height:1.7}.portal-action-meta{color:#94a3b8;border-top:1px solid #fef9c3;flex-wrap:wrap;gap:16px;margin-top:12px;padding-top:12px;font-size:12px;display:flex}.portal-phases{gap:10px;display:grid}.portal-phase{background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden;box-shadow:0 1px 3px #0f172a0a}.portal-phase-header{cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:16px;padding:18px 22px;transition:background .15s;display:flex}.portal-phase-header:hover{background:#f8fafc}.portal-phase-left{flex:1;align-items:center;gap:14px;min-width:0;display:flex}.portal-phase-name{color:#0f172a;margin-bottom:4px;font-size:15px;font-weight:700}.portal-phase-meta{color:#64748b;font-size:12px}.portal-phase-waiting{color:#d97706;font-weight:600}.portal-chevron{color:#94a3b8;flex-shrink:0;font-size:18px;transition:transform .2s;display:inline-block}.portal-phase-tasks{border-top:1px solid #f1f5f9}.portal-task-row{border-bottom:1px solid #f8fafc;align-items:flex-start;gap:12px;padding:13px 22px;transition:background .12s;display:flex}.portal-task-row:last-child{border-bottom:none}.portal-task-row:hover{background:#f8fafc}.portal-task-row.highlight{background:#fffbeb}.portal-task-row.highlight:hover{background:#fef9c3}.portal-task-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px;margin-top:5px}.portal-task-body{flex:1;min-width:0}.portal-task-title{color:#0f172a;font-size:13.5px;font-weight:500;line-height:1.5}.portal-task-note{border-radius:6px;margin-top:5px;padding:5px 9px;font-size:12px;line-height:1.6}.portal-task-note.done{color:#15803d;background:#f0fdf4}.portal-task-note.action{color:#92400e;background:#fffbeb}.portal-task-files{gap:6px;margin-top:8px;display:grid}.portal-task-file{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;padding:7px 10px;display:flex}.portal-task-file-name{color:#334155;overflow-wrap:anywhere;min-width:0;font-size:12px;font-weight:600}.portal-task-file-actions{flex-shrink:0;gap:6px;display:flex}.portal-task-right{text-align:right;flex-shrink:0}.portal-task-badge{white-space:nowrap;border-radius:99px;padding:3px 10px;font-size:11.5px;font-weight:600}.portal-task-date{color:#94a3b8;margin-top:5px;font-size:11px}.portal-badge{background:var(--brand-soft,#eff6ff);color:var(--brand,#2563eb);white-space:nowrap;border-radius:99px;flex-shrink:0;padding:4px 11px;font-size:12px;font-weight:700;text-decoration:none;transition:opacity .15s}.portal-badge:hover{opacity:.8}.portal-badge.green{color:#16a34a;background:#f0fdf4}.portal-badge.blue{color:#2563eb;background:#eff6ff}.portal-deliverables{gap:10px;display:grid}.portal-deliverable{background:#fff;border:1px solid #e2e8f0;border-radius:16px;align-items:flex-start;gap:16px;padding:18px 20px;transition:box-shadow .2s;display:flex;box-shadow:0 1px 3px #0f172a0a}.portal-deliverable:hover{box-shadow:0 4px 20px #0f172a14}.portal-deliverable-icon{letter-spacing:.04em;text-transform:uppercase;color:var(--brand);background:var(--brand-soft);border-radius:8px;flex-shrink:0;margin-top:2px;padding:6px 8px;font-size:11px;font-weight:800}.portal-deliverable-body{flex:1;min-width:0}.portal-deliverable-title{color:#0f172a;margin-bottom:5px;font-size:14px;font-weight:700}.portal-deliverable-content{color:#64748b;margin-bottom:8px;font-size:13px;line-height:1.7}.portal-deliverable-meta{color:#94a3b8;flex-wrap:wrap;gap:12px;font-size:12px;display:flex}.portal-deliverable-actions{flex-shrink:0;align-self:flex-start;gap:8px;display:flex}.portal-upcoming{gap:8px;display:grid}.portal-upcoming-item{background:#fff;border:1px solid #e2e8f0;border-radius:14px;align-items:flex-start;gap:14px;padding:16px 20px;display:flex;box-shadow:0 1px 3px #0f172a0a}.portal-upcoming-num{border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:30px;height:30px;font-size:13px;font-weight:800;display:flex}.portal-upcoming-body{flex:1}.portal-upcoming-title{color:#0f172a;font-size:14px;font-weight:600;line-height:1.45}.portal-upcoming-meta{color:#94a3b8;flex-wrap:wrap;gap:12px;margin-top:5px;font-size:12px;display:flex}.portal-future-list{gap:10px;display:grid}.portal-future-month{background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden;box-shadow:0 1px 3px #0f172a0a}.portal-future-header{cursor:pointer;text-align:left;background:#fff;border:none;justify-content:space-between;align-items:center;gap:16px;width:100%;padding:18px 22px;transition:background .15s;display:flex}.portal-future-header:hover{background:#f8fafc}.portal-future-title{color:#0f172a;font-size:15px;font-weight:700}.portal-future-meta{color:#64748b;margin-top:3px;font-size:12px}.portal-future-right{flex-shrink:0;align-items:center;gap:12px;font-size:15px;display:flex}.portal-future-body{background:#f8fafc;border-top:1px solid #f1f5f9;gap:10px;padding:14px;display:grid}.portal-contact{padding-bottom:0}.portal-contact-inner{background:#fff;border:1px solid;border-radius:20px;flex-wrap:wrap;align-items:center;gap:20px;padding:28px;display:flex;box-shadow:0 1px 3px #0f172a0a}.portal-contact-icon{border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;font-size:22px;display:flex}.portal-contact-text{flex:1;min-width:160px}.portal-contact-text h3{color:#0f172a;margin:0 0 5px;font-size:15px;font-weight:700}.portal-contact-text p{color:#64748b;margin:0;font-size:13px;line-height:1.5}.portal-contact-btn{color:#fff;white-space:nowrap;border-radius:10px;justify-content:center;align-items:center;gap:6px;padding:10px 22px;font-size:14px;font-weight:700;text-decoration:none;transition:opacity .15s,transform .1s;display:inline-flex}.portal-contact-btn:hover{opacity:.9;transform:translateY(-1px)}.portal-contact-btn:active{transform:translateY(0)}.portal-footer{text-align:center;color:#94a3b8;background:#fff;border-top:1px solid #e2e8f0;margin-top:64px;padding:28px;font-size:12px}@media (width<=640px){.portal-hero-inner{padding:32px 20px 28px}.portal-brand-line{flex-direction:column;align-items:flex-start;gap:10px;margin-bottom:24px}.portal-brand-line strong{font-size:17px}.portal-brand-line span{font-size:11px}.portal-hero-name{font-size:24px}.portal-hero-logo{border-radius:14px;width:56px;height:56px;font-size:22px}.portal-hero-stats{padding:16px 18px}.portal-hero-stat-sep{display:none}.portal-hero-stat{min-width:70px}.portal-hero-stat-num{font-size:26px}.portal-nav-inner{padding:0 20px}.portal-main{padding:0 20px 48px}.portal-section{padding-top:40px}.portal-section-title{font-size:18px}.portal-phase-header{padding:16px 18px}.portal-task-row{padding:12px 16px}.portal-contact-inner{flex-direction:column;align-items:flex-start;gap:16px}.portal-contact-btn{width:100%}}
