:root{--ink:#142d3f;--ink-2:#173b57;--ink-3:#2e566f;--mint:#45bca9;--mint-soft:#e5f7f3;--blue-soft:#eef5f9;--bg:#f3f7f8;--surface:#ffffff;--surface-2:#f8fbfc;--line:#dce7eb;--muted:#658093;--danger:#c44444;--warning:#c78620;--success:#278f75;--shadow:0 12px 38px rgba(20,45,63,0.08);--radius:16px;--sidebar:248px;color-scheme:light}*{box-sizing:border-box}body,html{margin:0;min-height:100%}body{color:var(--ink);background:var(--bg);font-family:Inter,SF Pro Display,PingFang SC,Microsoft YaHei,system-ui,sans-serif;font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}a,button{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}.app-shell{min-height:100vh;display:grid;grid-template-columns:var(--sidebar) minmax(0,1fr)}.sidebar{position:fixed;inset:0 auto 0 0;width:var(--sidebar);z-index:30;display:flex;flex-direction:column;padding:22px 14px 16px;color:#eaf4f6;background:linear-gradient(168deg,#102f45,#173b57 58%,#16485b);box-shadow:10px 0 30px rgba(15,43,62,.08)}.brand{display:flex;gap:12px;align-items:center;padding:0 8px 22px}.brand img{width:42px;height:42px}.brand strong{display:block;font-size:16px;letter-spacing:.05em}.brand span{display:block;margin-top:2px;color:#9fc3d0;font-size:11px}.nav{display:grid;gap:5px;overflow:auto;padding-right:2px}.nav-section{padding:15px 12px 5px;color:#84a9b7;font-size:11px;letter-spacing:.12em}.nav-link{display:flex;align-items:center;gap:11px;min-height:43px;padding:9px 12px;border-radius:11px;color:#cfe1e7;transition:.18s ease}.nav-link svg{width:18px;height:18px;flex:0 0 auto}.nav-link:hover{color:white;background:rgba(255,255,255,.07)}.nav-link.active{color:white;background:rgba(69,188,169,.18);box-shadow:inset 3px 0 0 var(--mint)}.sidebar-footer{margin-top:auto;padding:14px 8px 0;border-top:1px solid rgba(255,255,255,.09);color:#98b9c4;font-size:12px}.app-main{grid-column:2;min-width:0}.topbar{position:sticky;top:0;z-index:20;height:68px;padding:0 28px;display:flex;align-items:center;gap:16px;justify-content:space-between;background:rgba(255,255,255,.88);border-bottom:1px solid rgba(220,231,235,.9);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.topbar-context{min-width:0}.topbar-context strong{display:block;font-size:15px}.topbar-context span{color:var(--muted);font-size:12px}.topbar-actions{gap:8px}.topbar-actions,.user-chip{display:flex;align-items:center}.user-chip{gap:9px;padding:6px 9px 6px 7px;border-radius:12px}.avatar{display:grid;place-items:center;width:34px;height:34px;border-radius:10px;color:white;background:var(--ink-2);font-weight:700}.user-chip span{display:block;font-size:12px;color:var(--muted)}.mobile-menu{display:none}.page-content{width:min(1600px,100%);margin:0 auto;padding:26px 28px 44px}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:22px}.page-title h1{margin:0;font-size:clamp(22px,2.1vw,30px);letter-spacing:-.03em}.page-title p{margin:6px 0 0;color:var(--muted)}.page-actions{display:flex;flex-wrap:wrap;gap:9px}.breadcrumb{margin-bottom:7px;color:var(--mint);font-size:12px;font-weight:650;letter-spacing:.05em}.grid{display:grid;gap:16px}.card,.card-body,.card-head,.grid>*,.page-actions,.page-head,.page-title{min-width:0}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card-body{padding:19px}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:17px 19px;border-bottom:1px solid var(--line)}.card-head h2,.card-head h3{margin:0;font-size:16px}.metric{position:relative;overflow:hidden;min-height:126px;padding:19px}.metric:after{content:"";position:absolute;width:90px;height:90px;border-radius:50%;right:-28px;top:-32px;background:var(--mint-soft)}.metric-label{color:var(--muted);font-size:13px}.metric-value{margin-top:9px;font-size:29px;line-height:1;font-weight:760;letter-spacing:-.03em}.metric-note{margin-top:12px;color:var(--muted);font-size:12px}.button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:38px;padding:8px 14px;border:1px solid var(--line);border-radius:10px;color:var(--ink);background:var(--surface);cursor:pointer;font-weight:650}.button:hover{border-color:#b7cbd3;background:var(--surface-2)}.button.primary{color:white;border-color:var(--ink-2);background:var(--ink-2)}.button.primary:hover{background:#20506f}.button.ghost{border-color:transparent;background:transparent}.button.danger{color:var(--danger)}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:30px;min-height:30px;padding:0;border:1px solid transparent;border-radius:8px;color:var(--muted);background:transparent;cursor:pointer}.icon-button:hover{color:var(--ink);border-color:var(--line);background:var(--surface-2)}.icon-button:disabled{opacity:.35;cursor:not-allowed}.actions{display:flex;flex-wrap:wrap;align-items:center;gap:4px}.inline-edit-grid{display:grid;grid-template-columns:minmax(180px,1.5fr) minmax(130px,1fr) repeat(3,minmax(120px,.8fr)) auto auto;gap:7px;align-items:center;min-width:980px}.button:disabled{opacity:.55;cursor:not-allowed}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:9px;padding:14px;border-bottom:1px solid var(--line)}.field{display:grid;gap:6px}.field label{color:var(--ink-3);font-size:12px;font-weight:650}.input,.select,.textarea{width:100%;min-height:40px;border:1px solid #cad9df;border-radius:10px;padding:8px 11px;color:var(--ink);background:white;outline:0;transition:.15s}.textarea{min-height:92px;resize:vertical}.input:focus,.select:focus,.textarea:focus{border-color:var(--mint);box-shadow:0 0 0 3px rgba(69,188,169,.13)}.search{min-width:min(320px,100%)}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}.field.full{grid-column:1/-1}.table-wrap{width:100%;max-width:100%;min-width:0;overflow:auto;overscroll-behavior-inline:contain}.table{width:100%;border-collapse:collapse;min-width:760px}.table th{position:sticky;top:0;z-index:1;padding:12px 15px;text-align:left;color:var(--muted);background:#f7fafb;border-bottom:1px solid var(--line);font-size:12px;white-space:nowrap}.table td{padding:13px 15px;border-bottom:1px solid #e9eff2;vertical-align:middle}.table tbody tr:hover{background:#f9fcfc}.table tbody tr:last-child td{border-bottom:0}.cell-title{font-weight:680}.cell-note{margin-top:2px;color:var(--muted);font-size:12px}.badge{display:inline-flex;align-items:center;min-height:25px;padding:3px 9px;border-radius:999px;color:var(--ink-3);background:var(--blue-soft);font-size:12px;font-weight:650;white-space:nowrap}.badge.success{color:var(--success);background:#e5f6ef}.badge.warning{color:var(--warning);background:#fff3dc}.badge.danger{color:var(--danger);background:#feeaea}.progress{width:100%;min-width:90px;height:7px;overflow:hidden;border-radius:999px;background:#e9f0f2}.progress>span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#2f7bdc,#5aa9ff)}.progress.danger>span{background:linear-gradient(90deg,#d9364f,#ff747f)}.daily-summary-image{width:1880px;padding:26px;color:#142d3f;background:#fff}.daily-summary-image-head{display:flex;align-items:flex-end;justify-content:space-between;gap:32px;margin-bottom:20px;padding-bottom:16px;border-bottom:2px solid #173b57}.daily-summary-image-head>div{display:grid;gap:4px}.daily-summary-image-head>div:last-child{justify-items:end;text-align:right}.daily-summary-image-head h2{margin:0;color:#173b57;font-size:28px;line-height:1.2}.daily-summary-image-head span{color:#658093;font-size:13px}.daily-summary-image-head strong{font-size:18px}.daily-summary-image .table{min-width:1800px}.daily-summary-image .table th{position:static}.daily-summary-missing{color:var(--danger);font-weight:750}.daily-summary-image-leader{margin-top:20px;padding:16px 18px;border:1px solid #d7e2e7;border-radius:10px;background:#f7fafb}.daily-summary-image-leader strong{display:block;margin-bottom:8px;color:#173b57;font-size:16px}.daily-summary-image-leader p{margin:0;white-space:pre-wrap;line-height:1.7}.empty{display:grid;place-items:center;min-height:240px;padding:30px;color:var(--muted);text-align:center}.empty svg{width:34px;height:34px;margin-bottom:8px;color:#97b2be}.skeleton{border-radius:10px;min-height:20px;background:linear-gradient(90deg,#edf2f4 25%,#f8fafb 50%,#edf2f4 75%);background-size:200% 100%;animation:shimmer 1.4s infinite}@keyframes shimmer{to{background-position:-200% 0}}.alert{padding:12px 14px;border:1px solid #f2c6c6;border-radius:10px;color:#963737;background:#fff2f2}.tabs{display:flex;gap:4px;overflow:auto;padding:4px;border-radius:11px;background:#eaf1f4}.tab{padding:7px 12px;border-radius:8px;color:var(--muted);white-space:nowrap}.tab.active{color:var(--ink);background:white;box-shadow:0 3px 12px rgba(20,45,63,.08);font-weight:650}.login-page{min-height:100vh;display:grid;grid-template-columns:minmax(440px,1.15fr) minmax(420px,.85fr);background:white}.login-visual{position:relative;overflow:hidden;display:flex;align-items:flex-end;padding:clamp(38px,7vw,92px);color:white;background:radial-gradient(circle at 70% 20%,rgba(69,188,169,.35),transparent 33%),linear-gradient(150deg,#102f45,#173b57 55%,#17616a)}.login-visual:after,.login-visual:before{content:"";position:absolute;border:1px solid rgba(255,255,255,.13);border-radius:50%}.login-visual:before{width:500px;height:500px;right:-170px;top:-100px}.login-visual:after{width:760px;height:760px;right:-260px;top:-230px}.login-message{position:relative;z-index:1;max-width:620px}.login-message h1{margin:20px 0 12px;font-size:clamp(34px,4.8vw,64px);line-height:1.08;letter-spacing:-.045em}.login-message p{color:#b9d3db;font-size:17px}.login-panel{display:grid;place-items:center;padding:34px}.login-box{width:min(410px,100%)}.login-box h2{margin:0;font-size:28px}.login-box>p{margin:8px 0 28px;color:var(--muted)}.login-form{display:grid;gap:16px}.login-help{margin-top:22px;color:var(--muted);font-size:12px}.gantt{--row-h:42px;height:620px;overflow:auto;border-radius:0 0 var(--radius) var(--radius)}.gantt-inner{position:relative;min-width:1040px}.gantt-row{position:absolute;left:0;right:0;height:var(--row-h);display:grid;grid-template-columns:390px minmax(650px,1fr);border-bottom:1px solid #e9eff2;background:white}.gantt-label{display:flex;align-items:center;gap:8px;padding:0 12px;border-right:1px solid var(--line);overflow:hidden}.gantt-label strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gantt-timeline{position:relative;background-image:linear-gradient(90deg,#edf2f4 1px,transparent 0);background-size:calc(100% / 12) 100%}.gantt-bar{position:absolute;top:10px;height:21px;min-width:6px;overflow:hidden;border-radius:6px;color:white;background:var(--ink-2);font-size:10px}.gantt-bar span{display:block;height:100%;background:var(--mint);opacity:.75}.gantt-bar.quality_gate{background:#9b6b35}.gantt-bar.milestone{width:17px!important;transform:rotate(45deg);border-radius:3px}.toast{position:fixed;right:22px;bottom:22px;z-index:100;max-width:min(420px,calc(100vw - 28px));padding:13px 16px;border-radius:12px;color:white;background:var(--ink);box-shadow:0 16px 40px rgba(20,45,63,.24)}@media (max-width:1180px){.grid-3,.grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:860px){:root{--sidebar:0px}.app-shell{display:block}.sidebar{width:min(310px,86vw);transform:translateX(-105%);transition:transform .22s ease;box-shadow:20px 0 60px rgba(15,43,62,.3)}.sidebar.open{transform:translateX(0)}.app-main{min-width:0}.topbar{height:62px;padding:0 16px}.mobile-menu{display:inline-flex}.user-chip>div:last-child{display:none}.page-content{padding:20px 16px 88px}.page-head{align-items:stretch;flex-direction:column}.page-actions .button{flex:1 1 auto}.login-page{grid-template-columns:1fr}.login-visual{min-height:260px;padding:32px 24px;align-items:center}.login-message h1{font-size:36px}.login-message p{font-size:14px}.login-panel{padding:34px 20px}}@media (max-width:620px){body{font-size:13px}.form-grid,.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.field.full{grid-column:auto}.metric{min-height:112px}.metric-value{font-size:26px}.card-body{padding:15px}.card-head{padding:14px 15px}.toolbar{align-items:stretch}.toolbar>*{flex:1 1 100%}.table{min-width:680px}.hide-mobile{display:none!important}.gantt{height:540px}.gantt-row{grid-template-columns:260px minmax(600px,1fr)}}@media (prefers-reduced-motion:reduce){*,:after,:before{scroll-behavior:auto!important;animation:none!important;transition:none!important}}