:root{--color-primary:#1565c0;--color-primary-hover:#1251a3;--color-primary-subtle:#e8f0fe;--color-primary-dark:#003087;--color-accent:#d97706;--color-accent-subtle:#fef3c7;--color-destructive:#c0152a;--color-destructive-hover:#a8111f;--color-bg:#f4f6f9;--color-surface:#fff;--color-surface-raised:#fff;--color-border:#e2e8f0;--color-border-strong:#cbd5e1;--color-text-primary:#0f172a;--color-text-secondary:#475569;--color-text-muted:#7b8fa8;--color-text-inverse:#fff;--color-status-active:#1565c0;--color-status-active-bg:#e8f0fe;--color-status-done:#166534;--color-status-done-bg:#dcfce7;--color-status-hold:#92400e;--color-status-hold-bg:#fef3c7;--color-status-cancelled:#475569;--color-status-cancelled-bg:#f1f5f9;--color-status-draft:#475569;--color-status-draft-bg:#f1f5f9;--color-status-overdue:#991b1b;--color-status-overdue-bg:#fee2e2;--color-band-outstanding:#d97706;--color-band-outstanding-bg:#fef3c7;--color-band-exceeds:#1565c0;--color-band-exceeds-bg:#e8f0fe;--color-band-meets:#166534;--color-band-meets-bg:#dcfce7;--color-band-needs:#92400e;--color-band-needs-bg:#fef3c7;--color-band-unsat:#475569;--color-band-unsat-bg:#f1f5f9;--color-sidebar-bg:#fff;--color-sidebar-text:#64748b;--color-sidebar-text-active:#0f172a;--color-sidebar-item-active:#e8f0fe;--color-sidebar-border:#e2e8f0;--color-sidebar-icon-active:#1565c0;--logo-mark-bg:#1a1a1a;--logo-mark-lines:#fff;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-full:9999px;--shadow-sm:0 1px 2px 0 #0000000d;--shadow-md:0 2px 8px 0 #00000014;--shadow-lg:0 4px 16px 0 #0000001a;--z-base:10;--z-dropdown:20;--z-sticky:30;--z-modal:50;--z-toast:60;--font-family:"Inter", system-ui, -apple-system, sans-serif;--font-family-display:"Outfit", system-ui, -apple-system, sans-serif;--text-display-size:2.25rem;--text-display-height:1.2;--text-display-weight:700;--text-h1-size:1.875rem;--text-h1-height:1.25;--text-h1-weight:700;--text-h2-size:1.5rem;--text-h2-height:1.3;--text-h2-weight:600;--text-h3-size:1.25rem;--text-h3-height:1.35;--text-h3-weight:600;--text-h4-size:1.125rem;--text-h4-height:1.4;--text-h4-weight:600;--text-body-lg-size:1rem;--text-body-lg-height:1.625;--text-body-lg-weight:400;--text-body-size:.9375rem;--text-body-height:1.6;--text-body-weight:400;--text-body-sm-size:.875rem;--text-body-sm-height:1.5;--text-body-sm-weight:400;--text-label-size:.75rem;--text-label-height:1.4;--text-label-weight:600;--text-label-spacing:.05em;--text-caption-size:.6875rem;--text-caption-height:1.4;--text-caption-weight:500;--text-caption-spacing:.04em;--text-code-size:.875rem;--text-code-family:"JetBrains Mono", "Fira Code", monospace;--text-display:var(--text-display-size);--text-h1:var(--text-h1-size);--text-h2:var(--text-h2-size);--text-h3:var(--text-h3-size);--text-h4:var(--text-h4-size);--text-body-lg:var(--text-body-lg-size);--text-body:var(--text-body-size);--text-body-sm:var(--text-body-sm-size);--text-label:var(--text-label-size);--text-caption:var(--text-caption-size);--font-regular:400;--font-medium:500;--font-semibold:600;--font-bold:700;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-body:1.6;--leading-relaxed:1.625}[data-theme=dark]{--color-bg:#1e1e1e;--color-surface:#252526;--color-surface-raised:#2d2d30;--color-border:#3e3e42;--color-border-strong:#454545;--color-text-primary:#d4d4d4;--color-text-secondary:#9d9d9d;--color-text-muted:#6b6b6b;--color-text-inverse:#1e1e1e;--color-primary:#4f8ef7;--color-primary-hover:#3b7de8;--color-primary-subtle:#263448;--color-primary-dark:#252526;--color-accent:#f59e0b;--color-accent-subtle:#352a10;--color-destructive:#dc2626;--color-destructive-hover:#c0152a;--color-status-active:#5895f7;--color-status-done:#22c55e;--color-status-hold:#f59e0b;--color-status-cancelled:#a1a1aa;--color-status-draft:#a1a1aa;--color-status-overdue:#f87171;--color-status-active-bg:#263448;--color-status-done-bg:#1a3326;--color-status-hold-bg:#352a10;--color-status-cancelled-bg:#2d2d30;--color-status-draft-bg:#2d2d30;--color-status-overdue-bg:#3d1e1e;--color-band-outstanding:#f59e0b;--color-band-exceeds:#5895f7;--color-band-meets:#22c55e;--color-band-needs:#f59e0b;--color-band-unsat:#a1a1aa;--color-band-outstanding-bg:#352a10;--color-band-exceeds-bg:#263448;--color-band-meets-bg:#1a3326;--color-band-needs-bg:#352a10;--color-band-unsat-bg:#2d2d30;--color-sidebar-bg:#252526;--color-sidebar-text:#bbb;--color-sidebar-text-active:#fff;--color-sidebar-item-active:#37373d;--color-sidebar-border:#3e3e42;--color-sidebar-icon-active:#4f8ef7;--logo-mark-bg:#fff;--logo-mark-lines:#1e1e1e;--shadow-sm:0 1px 2px 0 #0000004d;--shadow-md:0 2px 8px 0 #0006;--shadow-lg:0 8px 24px 0 #00000080}.sidebar{background:var(--color-sidebar-bg);border-right:1px solid var(--color-sidebar-border);width:240px;height:100vh;z-index:var(--z-sticky);flex-direction:column;transition:width .2s;display:flex;position:fixed;top:0;left:0;overflow:hidden}.sidebar.collapsed{width:56px}.sidebar-logo{align-items:center;gap:var(--space-3);padding:var(--space-5) var(--space-4);border-bottom:1px solid var(--color-sidebar-border);flex-shrink:0;display:flex}.sidebar-logo-mark{background:var(--color-primary);border-radius:var(--radius-md);flex-shrink:0;place-items:center;width:32px;height:32px;display:grid}.sidebar-logo-name{color:var(--color-sidebar-text-active);font-size:var(--text-h4-size);letter-spacing:.05em;white-space:nowrap;font-weight:700}.sidebar-nav{padding:var(--space-3) var(--space-2);gap:var(--space-1);flex-direction:column;flex:1;display:flex;overflow-y:auto}.sidebar-section-label{padding:var(--space-3) var(--space-2) var(--space-1);color:var(--color-sidebar-text);font-size:var(--text-caption-size);letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;font-weight:600;overflow:hidden}.sidebar-separator{background:var(--color-sidebar-border);height:1px;margin:var(--space-2) var(--space-2)}.nav-item{align-items:center;gap:var(--space-3);padding:0 var(--space-3);border-radius:var(--radius-md);cursor:pointer;height:36px;color:var(--color-sidebar-text);font-size:var(--text-body-sm-size);white-space:nowrap;font-weight:500;text-decoration:none;transition:background .15s,color .15s;display:flex}.nav-item:hover{color:var(--color-sidebar-text-active);background:#ffffff0f}.nav-item.active{background:var(--color-sidebar-item-active);color:var(--color-sidebar-text-active);font-weight:600}.nav-item.active svg{color:var(--color-sidebar-icon-active)}.nav-item svg{flex-shrink:0;width:20px;height:20px}.sidebar-footer{padding:var(--space-3) var(--space-2);border-top:1px solid var(--color-sidebar-border);align-items:center;gap:var(--space-3);cursor:pointer;display:flex}.sidebar-footer:hover{background:#ffffff0a}.sidebar-footer-name{color:var(--color-sidebar-text);font-size:var(--text-body-sm-size);white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:500;overflow:hidden}.page-layout{min-height:100vh;display:flex}.main-content{background:var(--color-bg);flex:1;min-height:100vh;margin-left:240px;transition:margin-left .2s}.main-content.sidebar-collapsed{margin-left:56px}.page-header{padding:var(--space-6) var(--space-8);border-bottom:1px solid var(--color-border);background:var(--color-surface);justify-content:space-between;align-items:center;display:flex}.page-body{padding:var(--space-6) var(--space-8)}.topbar{background:var(--color-sidebar-bg);height:52px;padding:0 var(--space-4);z-index:var(--z-sticky);justify-content:space-between;align-items:center;display:none;position:sticky;top:0}.topbar-title{color:var(--color-text-inverse);font-size:var(--text-h4-size);letter-spacing:.05em;font-weight:700}.topbar-actions{align-items:center;gap:var(--space-2);display:flex}.bottom-taskbar{background:var(--color-surface);border-top:1px solid var(--color-border);height:56px;z-index:var(--z-sticky);padding-bottom:env(safe-area-inset-bottom);display:none;position:fixed;bottom:0;left:0;right:0}.bottom-taskbar-items{height:56px;display:flex}.taskbar-item{cursor:pointer;color:var(--color-text-muted);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:2px;text-decoration:none;transition:color .15s;display:flex}.taskbar-item.active{color:var(--color-primary)}.taskbar-item svg{width:24px;height:24px}.taskbar-label{font-size:10px;font-weight:500}@media (width<=768px){.sidebar{display:none}.main-content{margin-left:0;padding-bottom:56px}.topbar{display:flex}.bottom-taskbar{display:block}.page-header,.page-body{padding:var(--space-4)}}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4);box-shadow:var(--shadow-sm)}.card-header{margin-bottom:var(--space-4);padding-bottom:var(--space-4);border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;display:flex}.card-title{font-size:var(--text-body-lg-size);color:var(--color-text-primary);font-weight:600}.btn{justify-content:center;align-items:center;gap:var(--space-2);height:36px;padding:0 var(--space-4);border-radius:var(--radius-md);font-size:var(--text-body-sm-size);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;border:1px solid #0000;font-weight:600;text-decoration:none;transition:background .15s,border-color .15s,opacity .15s;display:inline-flex}.btn:active{transform:scale(.98)}.btn:disabled,.btn.loading{opacity:.55;cursor:not-allowed;pointer-events:none}.btn svg{flex-shrink:0;width:16px;height:16px}.btn-primary{background:var(--color-primary);color:var(--color-text-inverse);border-color:var(--color-primary)}.btn-primary:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover)}.btn-secondary{background:var(--color-surface);color:var(--color-text-primary);border-color:var(--color-border-strong)}.btn-secondary:hover{background:var(--color-bg)}.btn-destructive{background:var(--color-destructive);color:#fff;border-color:var(--color-destructive)}.btn-destructive:hover{background:var(--color-destructive-hover);border-color:var(--color-destructive-hover)}.btn-ghost{color:var(--color-text-secondary);background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--color-bg);color:var(--color-text-primary)}.btn-sm{height:32px;padding:0 var(--space-3);font-size:var(--text-label-size);text-transform:none;letter-spacing:0}.btn-icon{border-radius:var(--radius-md);width:32px;height:32px;color:var(--color-text-secondary);background:0 0;border-color:#0000;padding:0}.btn-icon:hover{background:var(--color-bg);color:var(--color-text-primary)}.btn-icon svg{width:18px;height:18px}.btn-spinner{border:2px solid;border-top-color:#0000;border-radius:50%;width:14px;height:14px;animation:.6s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.form-field{gap:var(--space-1);flex-direction:column;display:flex}.form-label{font-size:var(--text-body-sm-size);color:var(--color-text-primary);font-weight:500}.form-label .required{color:var(--color-status-overdue);margin-left:2px}.form-input,.form-textarea,.form-select{height:36px;padding:0 var(--space-3);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);font-size:var(--text-body-sm-size);font-family:var(--font-family);color:var(--color-text-primary);outline:none;width:100%;transition:border-color .15s,box-shadow .15s}.form-input::placeholder,.form-textarea::placeholder,.input-plain::placeholder{color:var(--color-text-muted)}.form-input:focus,.form-textarea:focus,.form-select:focus{border-color:var(--color-primary);box-shadow:none}.form-input.error,.form-textarea.error,.form-select.error{border-color:var(--color-status-overdue)}.form-input.error:focus,.form-textarea.error:focus{box-shadow:0 0 0 2px var(--color-status-overdue-bg)}.form-input:disabled,.form-textarea:disabled,.form-select:disabled{background:var(--color-bg);color:var(--color-text-muted);cursor:not-allowed}.form-textarea{height:auto;min-height:80px;padding:var(--space-2) var(--space-3);resize:vertical;line-height:var(--text-body-height)}.form-input-wrapper{position:relative}.form-input-wrapper .form-input{padding-right:36px}.form-input-action{right:var(--space-2);cursor:pointer;color:var(--color-text-muted);padding:var(--space-1);background:0 0;border:none;display:flex;position:absolute;top:50%;transform:translateY(-50%)}.form-input-action:hover{color:var(--color-text-secondary)}.form-input-action svg{width:16px;height:16px}.form-select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%2394A3B8' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--space-2) center;padding-right:var(--space-8);cursor:pointer;background-size:16px}.form-helper{font-size:var(--text-caption-size);color:var(--color-text-muted)}.form-error{font-size:var(--text-caption-size);color:var(--color-status-overdue)}.form-check{align-items:center;gap:var(--space-2);cursor:pointer;-webkit-user-select:none;user-select:none;display:flex}.form-check input[type=checkbox],.form-check input[type=radio]{border:1.5px solid var(--color-border-strong);border-radius:var(--radius-sm);background:var(--color-surface);appearance:none;cursor:pointer;flex-shrink:0;place-items:center;width:16px;height:16px;transition:background .15s,border-color .15s;display:grid}.form-check input[type=radio]{border-radius:var(--radius-full)}.form-check input[type=checkbox]:checked,.form-check input[type=radio]:checked{background:var(--color-primary);border-color:var(--color-primary)}.form-check input[type=checkbox]:checked:after{content:"";border-bottom:2px solid #fff;border-left:2px solid #fff;width:9px;height:6px;display:block;transform:rotate(-45deg)translate(1px,-1px)}.form-check input[type=radio]:checked:after{content:"";background:#fff;border-radius:50%;width:6px;height:6px;display:block}.form-check input:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.form-check-label{font-size:var(--text-body-sm-size);color:var(--color-text-primary)}.badge{align-items:center;gap:var(--space-1);height:20px;padding:0 var(--space-2);border-radius:var(--radius-full);font-size:var(--text-caption-size);letter-spacing:.02em;white-space:nowrap;font-weight:600;display:inline-flex}.badge-draft{background:var(--color-status-draft-bg);color:var(--color-status-draft)}.badge-active{background:var(--color-status-active-bg);color:var(--color-status-active)}.badge-on-hold{background:var(--color-status-hold-bg);color:var(--color-status-hold)}.badge-completed{background:var(--color-status-done-bg);color:var(--color-status-done)}.badge-cancelled{background:var(--color-status-cancelled-bg);color:var(--color-status-cancelled)}.badge-overdue{background:var(--color-status-overdue-bg);color:var(--color-status-overdue)}.badge-gh{background:var(--color-primary-subtle);color:var(--color-primary)}.badge-dh{background:var(--color-accent-subtle);color:var(--color-accent)}.badge-tl{background:var(--color-status-done-bg);color:var(--color-status-done)}.badge-member{background:var(--color-bg);color:var(--color-text-secondary);border:1px solid var(--color-border)}.badge-outstanding{background:var(--color-band-outstanding-bg);color:var(--color-band-outstanding)}.badge-exceeds{background:var(--color-band-exceeds-bg);color:var(--color-band-exceeds)}.badge-meets{background:var(--color-band-meets-bg);color:var(--color-band-meets)}.badge-needs{background:var(--color-band-needs-bg);color:var(--color-band-needs)}.badge-unsat{background:var(--color-band-unsat-bg);color:var(--color-band-unsat)}.avatar{border-radius:var(--radius-full);color:#fff;font-weight:600;font-family:var(--font-family);flex-shrink:0;place-items:center;display:grid}.avatar-xs{width:24px;height:24px;font-size:9px}.avatar-sm{width:32px;height:32px;font-size:12px}.avatar-md{width:40px;height:40px;font-size:14px}.avatar-lg{width:56px;height:56px;font-size:18px}.avatar-group{display:flex}.avatar-group .avatar{border:2px solid var(--color-surface);margin-left:-6px}.avatar-group .avatar:first-child{margin-left:0}.avatar-count{border-radius:var(--radius-full);background:var(--color-bg);border:2px solid var(--color-surface);width:32px;height:32px;color:var(--color-text-secondary);place-items:center;margin-left:-6px;font-size:11px;font-weight:600;display:grid}.table-wrapper{border-radius:var(--radius-lg);overflow-x:auto}.table{border-collapse:collapse;width:100%}.table thead tr{background:var(--color-bg);height:36px}.table thead th{padding:0 var(--space-4);text-align:left;font-size:var(--text-label-size);color:var(--color-text-secondary);letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;border-bottom:1px solid var(--color-border);font-weight:600}.table tbody tr{border-bottom:1px solid var(--color-border);height:40px;transition:background .1s}.table tbody tr:last-child{border-bottom:none}.table tbody tr:hover{background:var(--color-bg)}.table td{padding:0 var(--space-4);font-size:var(--text-body-sm-size);color:var(--color-text-primary);white-space:nowrap}.table-row-actions{align-items:center;gap:var(--space-1);opacity:0;transition:opacity .15s;display:flex}.table tbody tr:hover .table-row-actions{opacity:1}.pagination{align-items:center;gap:var(--space-1);display:flex}.page-btn{border-radius:var(--radius-md);cursor:pointer;width:32px;height:32px;font-size:var(--text-body-sm-size);color:var(--color-text-secondary);background:0 0;border:1px solid #0000;place-items:center;transition:all .15s;display:grid}.page-btn:hover{background:var(--color-bg);color:var(--color-text-primary)}.page-btn.active{background:var(--color-primary-subtle);border-color:var(--color-primary);color:var(--color-primary);font-weight:600}.page-btn:disabled{opacity:.4;cursor:not-allowed}.filter-bar{align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.filter-search{flex:1;min-width:200px;max-width:320px;position:relative}.filter-search svg{left:var(--space-3);width:16px;height:16px;color:var(--color-text-muted);position:absolute;top:50%;transform:translateY(-50%)}.filter-search .form-input{padding-left:var(--space-8)}.filter-chips{gap:var(--space-2);margin-top:var(--space-2);flex-wrap:wrap;display:flex}.filter-chip{align-items:center;gap:var(--space-1);height:24px;padding:0 var(--space-2);background:var(--color-primary-subtle);border-radius:var(--radius-full);font-size:var(--text-caption-size);color:var(--color-primary);font-weight:500;display:inline-flex}.filter-chip svg{cursor:pointer;width:12px;height:12px}.filter-chip svg:hover{color:var(--color-primary-hover)}.toast-container{bottom:var(--space-6);z-index:var(--z-toast);align-items:center;gap:var(--space-2);pointer-events:none;flex-direction:column-reverse;display:flex;position:fixed;left:50%;transform:translate(-50%)}.toast{align-items:center;gap:var(--space-3);background:var(--color-surface);color:var(--color-text-primary);border:1px solid var(--color-border);border-radius:var(--radius-full);padding:var(--space-3) var(--space-4);box-shadow:var(--shadow-lg);pointer-events:all;white-space:nowrap;min-width:240px;max-width:480px;animation:.22s cubic-bezier(.34,1.56,.64,1) toastUp;display:flex}[data-theme=dark] .toast{color:#ebebeb;background:#222;border-color:#333}.toast:before{content:"";border-radius:var(--radius-full);flex-shrink:0;width:8px;height:8px}.toast-success:before{background:#4ade80;box-shadow:0 0 6px #4ade80}.toast-error:before{background:#f87171;box-shadow:0 0 6px #f87171}.toast-info:before{background:#60a5fa;box-shadow:0 0 6px #60a5fa}.toast-warning:before{background:#fbbf24;box-shadow:0 0 6px #fbbf24}.toast-body{flex:1;overflow:hidden}.toast-title{font-size:var(--text-body-sm-size);color:var(--color-text-primary);text-overflow:ellipsis;font-weight:600;overflow:hidden}.toast-message{font-size:var(--text-caption-size);color:var(--color-text-secondary);text-overflow:ellipsis;margin-top:1px;overflow:hidden}.toast-close{background:var(--color-bg);border-radius:var(--radius-full);cursor:pointer;color:var(--color-text-muted);border:none;flex-shrink:0;padding:4px;transition:background .15s,color .15s;display:flex}.toast-close:hover{background:var(--color-border);color:var(--color-text-primary)}.toast-close svg{width:12px;height:12px}.toast-progress{border-radius:0 0 var(--radius-full) var(--radius-full);height:2px;animation:4s linear forwards toastProgress;position:absolute;bottom:0;left:0}.toast-success .toast-progress{background:#4ade80}.toast-error .toast-progress{background:#f87171}.toast-info .toast-progress{background:#60a5fa}.toast-warning .toast-progress{background:#fbbf24}@keyframes toastUp{0%{opacity:0;transform:translateY(12px)scale(.95)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes toastProgress{0%{width:100%}to{width:0%}}@media (width<=768px){.toast-container{bottom:calc(56px + var(--space-3));left:var(--space-3);right:var(--space-3);transform:none}.toast{white-space:normal;border-radius:var(--radius-lg);width:100%;min-width:0}}.alert{align-items:flex-start;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-radius:var(--radius-lg);font-size:var(--text-body-sm-size);border:1px solid;display:flex}.alert svg{flex-shrink:0;width:18px;height:18px;margin-top:1px}.alert-success{background:var(--color-status-done-bg);border-color:var(--color-status-done);color:var(--color-status-done)}.alert-error{background:var(--color-status-overdue-bg);border-color:var(--color-status-overdue);color:var(--color-status-overdue)}.alert-info{background:var(--color-primary-subtle);border-color:var(--color-primary);color:var(--color-primary)}.alert-warning{background:var(--color-status-hold-bg);border-color:var(--color-status-hold);color:var(--color-status-hold)}.empty-state{text-align:center;padding:var(--space-12) var(--space-8);justify-content:center;align-items:center;gap:var(--space-3);flex-direction:column;display:flex}.empty-state-icon{width:48px;height:48px;color:var(--color-border)}.empty-state-title{font-size:var(--text-h4-size);color:var(--color-text-primary);font-weight:600}.empty-state-body{font-size:var(--text-body-sm-size);color:var(--color-text-secondary);max-width:36ch}.skeleton{background:linear-gradient(90deg, var(--color-border) 25%, var(--color-bg) 50%, var(--color-border) 75%);border-radius:var(--radius-md);background-size:200% 100%;animation:1.5s linear infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton-row{width:100%;height:16px;margin-bottom:var(--space-2)}.skeleton-row.short{width:60%}.skeleton-row.medium{width:80%}.skeleton-card{border-radius:var(--radius-lg);width:100%;height:80px}.skeleton-avatar{border-radius:var(--radius-full);flex-shrink:0;width:32px;height:32px}.tabs{border-bottom:1px solid var(--color-border);gap:0;display:flex}.tab{align-items:center;gap:var(--space-2);padding:0 var(--space-4);height:40px;font-size:var(--text-body-sm-size);color:var(--color-text-secondary);cursor:pointer;white-space:nowrap;border-bottom:2px solid #0000;margin-bottom:-1px;font-weight:500;text-decoration:none;transition:color .15s,border-color .15s;display:flex}.tab:hover{color:var(--color-text-primary)}.tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary);font-weight:600}.tab svg{width:16px;height:16px}.breadcrumb{align-items:center;gap:var(--space-1);font-size:var(--text-body-sm-size);display:flex}.breadcrumb-item{color:var(--color-text-muted);text-decoration:none}.breadcrumb-item:hover{color:var(--color-text-secondary)}.breadcrumb-item.current{color:var(--color-text-primary);font-weight:500}.breadcrumb-sep{color:var(--color-text-muted);width:14px;height:14px}.modal-overlay{z-index:var(--z-modal);padding:var(--space-4);background:#0006;place-items:center;animation:.15s ease-out fadeIn;display:grid;position:fixed;inset:0}.modal{background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);flex-direction:column;width:100%;max-width:560px;max-height:calc(100vh - 2rem);animation:.15s ease-out modalIn;display:flex}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes modalIn{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.modal-header{padding:var(--space-4) var(--space-6);border-bottom:1px solid var(--color-border);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.modal-title{font-size:var(--text-h4-size);color:var(--color-text-primary);font-weight:600}.modal-close{cursor:pointer;color:var(--color-text-muted);padding:var(--space-1);border-radius:var(--radius-md);background:0 0;border:none;transition:background .15s,color .15s;display:flex}.modal-close:hover{background:var(--color-bg);color:var(--color-text-primary)}.modal-close svg{width:20px;height:20px}.modal-body{padding:var(--space-6);flex:1;overflow-y:auto}.modal-footer{justify-content:flex-end;align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-6);border-top:1px solid var(--color-border);flex-shrink:0;display:flex}@media (width<=768px){.modal{border-radius:var(--radius-lg) var(--radius-lg) 0 0;max-width:none;margin-top:auto}.modal-overlay{align-items:flex-end;padding:0}}.drawer-overlay{z-index:var(--z-modal);background:#0006;animation:.15s ease-out fadeIn;position:fixed;inset:0}.drawer{background:var(--color-surface);width:400px;box-shadow:var(--shadow-lg);z-index:var(--z-modal);flex-direction:column;animation:.2s ease-out drawerIn;display:flex;position:fixed;top:0;bottom:0;right:0}@keyframes drawerIn{0%{transform:translate(100%)}to{transform:translate(0)}}.drawer-header{padding:var(--space-4) var(--space-6);border-bottom:1px solid var(--color-border);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.drawer-body{padding:var(--space-6);flex:1;overflow-y:auto}.drawer-footer{padding:var(--space-4) var(--space-6);border-top:1px solid var(--color-border);justify-content:flex-end;gap:var(--space-3);flex-shrink:0;display:flex}@media (width<=768px){.drawer{width:100%}}.dropdown-wrapper{display:inline-block;position:relative}.dropdown-menu{top:calc(100% + var(--space-1));background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-lg);min-width:160px;box-shadow:var(--shadow-lg);z-index:var(--z-dropdown);padding:var(--space-1);animation:.12s ease-out dropIn;position:absolute;right:0}@keyframes dropIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.dropdown-item{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:var(--text-body-sm-size);color:var(--color-text-primary);cursor:pointer;text-align:left;background:0 0;border:none;width:100%;transition:background .1s;display:flex}.dropdown-item:hover{background:var(--color-bg)}.dropdown-item.danger{color:var(--color-status-overdue)}.dropdown-item.danger:hover{background:var(--color-status-overdue-bg)}.dropdown-item svg{width:16px;height:16px;color:var(--color-text-muted)}.dropdown-item.danger svg{color:var(--color-status-overdue)}.dropdown-separator{background:var(--color-border);height:1px;margin:var(--space-1) 0}.dropdown-item-danger{color:var(--color-destructive)!important}.dropdown-item-danger:hover{background:var(--color-status-overdue-bg)!important}.dropdown-item-danger svg{color:var(--color-destructive)!important}.table-row-hover:hover{background:var(--color-bg)}.stepper-rail{padding-bottom:var(--space-2);align-items:flex-start;display:flex;overflow-x:auto}.stepper-step{flex-direction:column;flex:1;align-items:center;min-width:80px;display:flex;position:relative}.stepper-step:not(:last-child):after{content:"";background:var(--color-border);z-index:0;width:100%;height:2px;position:absolute;top:14px;left:50%}.stepper-step.completed:not(:last-child):after{background:var(--color-primary)}.stepper-circle{border-radius:var(--radius-full);z-index:1;border:2px solid var(--color-border);background:var(--color-surface);place-items:center;width:28px;height:28px;transition:all .2s;display:grid}.stepper-circle svg{width:14px;height:14px}.stepper-step.completed .stepper-circle{background:var(--color-primary);border-color:var(--color-primary);color:#fff}.stepper-step.active .stepper-circle{border-color:var(--color-primary);color:var(--color-primary);background:var(--color-surface);border-width:2px}.stepper-step.pending .stepper-circle{border-color:var(--color-border);color:var(--color-text-muted)}.stepper-label{font-size:var(--text-caption-size);color:var(--color-text-muted);text-align:center;margin-top:var(--space-2);max-width:80px;font-weight:500;line-height:1.3}.stepper-step.active .stepper-label{color:var(--color-primary);font-weight:600}.stepper-step.completed .stepper-label{color:var(--color-text-secondary)}.note-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4);transition:border-color .15s}.note-card.closed{opacity:.65;background:var(--color-bg)}.note-card-header{justify-content:space-between;align-items:flex-start;gap:var(--space-3);margin-bottom:var(--space-3);display:flex}.note-card-author{align-items:center;gap:var(--space-2);display:flex}.note-card-meta{font-size:var(--text-caption-size);color:var(--color-text-muted)}.note-card-title{font-size:var(--text-body-sm-size);color:var(--color-text-primary);margin-bottom:var(--space-2);font-weight:600}.note-card-body{font-size:var(--text-body-sm-size);color:var(--color-text-secondary);margin-bottom:var(--space-3);line-height:1.6}.note-card-link{align-items:center;gap:var(--space-1);font-size:var(--text-body-sm-size);color:var(--color-primary);text-decoration:none;display:inline-flex}.note-card-link:hover{text-decoration:underline}.note-card-link svg{width:14px;height:14px}.comment-thread{padding-left:var(--space-6);border-left:2px solid var(--color-border);margin-top:var(--space-3);gap:var(--space-3);flex-direction:column;display:flex}.comment{gap:var(--space-2);display:flex}.comment-body-wrap{flex:1}.comment-meta{align-items:center;gap:var(--space-2);margin-bottom:var(--space-1);display:flex}.comment-author{font-size:var(--text-body-sm-size);font-weight:600}.comment-time{font-size:var(--text-caption-size);color:var(--color-text-muted)}.comment-body{font-size:var(--text-body-sm-size);color:var(--color-text-secondary);line-height:1.5}.comment-add{align-items:center;gap:var(--space-2);margin-top:var(--space-2);padding-left:var(--space-6);display:flex}.comment-add .form-input{flex:1}.project-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4);box-shadow:var(--shadow-sm);cursor:pointer;transition:border-color .15s,box-shadow .15s}.project-card:hover{border-color:var(--color-border-strong);box-shadow:var(--shadow-md)}.project-card-top{margin-bottom:var(--space-2);justify-content:space-between;align-items:flex-start;gap:var(--space-2);display:flex}.project-card-name{font-size:var(--text-body-sm-size);color:var(--color-text-primary);font-weight:600;line-height:1.3}.project-card-meta{margin-top:var(--space-3);justify-content:space-between;align-items:center;display:flex}.project-card-date{font-size:var(--text-caption-size);color:var(--color-text-muted)}.project-card-date.overdue{color:var(--color-status-overdue)}.mini-stepper{margin:var(--space-2) 0;align-items:center;gap:3px;display:flex}.mini-step{background:var(--color-border);border-radius:2px;flex:1;height:4px}.mini-step.completed{background:var(--color-primary)}.mini-step.active{background:var(--color-primary-subtle)}.score-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-6);box-shadow:var(--shadow-sm)}.score-main{align-items:baseline;gap:var(--space-3);margin-bottom:var(--space-4);display:flex}.score-number{color:var(--color-text-primary);font-size:3rem;font-weight:700;line-height:1}.score-max{font-size:var(--text-h4-size);color:var(--color-text-muted)}.score-dimensions{gap:var(--space-3);flex-direction:column;display:flex}.dimension-row{align-items:center;gap:var(--space-3);display:flex}.dimension-label{font-size:var(--text-body-sm-size);color:var(--color-text-secondary);flex-shrink:0;width:140px}.dimension-bar-wrap{background:var(--color-border);border-radius:var(--radius-full);flex:1;height:6px;overflow:hidden}.dimension-bar{background:var(--color-primary);border-radius:var(--radius-full);height:100%;transition:width .3s}.dimension-score{font-size:var(--text-body-sm-size);color:var(--color-text-primary);text-align:right;flex-shrink:0;width:36px;font-weight:600}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.flex-center{justify-content:center;align-items:center;display:flex}.gap-2{gap:var(--space-2)}.gap-3{gap:var(--space-3)}.gap-4{gap:var(--space-4)}@media (width<=767px){table{min-width:600px}.table-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}.modal-overlay{align-items:flex-end!important}.modal-panel{border-radius:12px 12px 0 0!important;width:100%!important;max-width:100%!important;max-height:90vh!important;overflow-y:auto!important}button,a,[role=button]{min-height:44px}nav button,nav a{min-height:auto}.reports-layout{grid-template-columns:1fr!important}}@keyframes notifSlideIn{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.text-display{font-family:var(--font-family-display);font-size:var(--text-display-size);line-height:var(--text-display-height);font-weight:var(--text-display-weight);color:var(--color-text-primary)}.text-h1{font-family:var(--font-family-display);font-size:var(--text-h1-size);line-height:var(--text-h1-height);font-weight:var(--text-h1-weight);color:var(--color-text-primary);margin:0}.text-h2{font-size:var(--text-h2-size);line-height:var(--text-h2-height);font-weight:var(--text-h2-weight);color:var(--color-text-primary);margin:0}.text-h3{font-size:var(--text-h3-size);line-height:var(--text-h3-height);font-weight:var(--text-h3-weight);color:var(--color-text-primary);margin:0}.text-h4{font-size:var(--text-h4-size);line-height:var(--text-h4-height);font-weight:var(--text-h4-weight);color:var(--color-text-primary);margin:0}.text-body-lg{font-size:var(--text-body-lg-size);line-height:var(--text-body-lg-height);font-weight:var(--text-body-lg-weight);color:var(--color-text-primary)}.text-body{font-size:var(--text-body-size);line-height:var(--text-body-height);font-weight:var(--text-body-weight);color:var(--color-text-primary)}.text-body-sm{font-size:var(--text-body-sm-size);line-height:var(--text-body-sm-height);font-weight:var(--text-body-sm-weight);color:var(--color-text-primary)}.text-label{font-size:var(--text-label-size);line-height:var(--text-label-height);font-weight:var(--text-label-weight);letter-spacing:var(--text-label-spacing);color:var(--color-text-secondary);text-transform:uppercase}.text-caption{font-size:var(--text-caption-size);line-height:var(--text-caption-height);font-weight:var(--text-caption-weight);letter-spacing:var(--text-caption-spacing);color:var(--color-text-muted)}.text-code{font-family:var(--text-code-family);font-size:var(--text-code-size)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;font-size:16px}body{font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif;font-size:var(--text-body);line-height:var(--leading-body);color:var(--color-text-primary);background:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}img,svg{max-width:100%;display:block}button{cursor:pointer;font-family:inherit}input,textarea,select{font-family:inherit;font-size:inherit}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
