:root{color-scheme:light;--bg: #F5F6FA;--card: #FFFFFF;--text: #1A1D26;--text-muted: #8A90A0;--text-light: #B8BDC9;--border: #EFF1F5;--brand: #4B3FE3;--brand-soft: #EFEDFE;--brand-text: #4437D4;--success: #16A34A;--success-soft: #E9F9F0;--danger: #E5484D;--danger-soft: #FDEFF0;--warning: #E08B16;--warning-soft: #FDF3E2;--radius: 14px;--shadow: 0 1px 3px rgba(20, 24, 40, .05);--shadow-md: 0 8px 24px rgba(20, 24, 40, .1);--font-sans: "SF Pro Text", "PingFang SC", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}*{margin:0;padding:0;box-sizing:border-box}html{-webkit-tap-highlight-color:transparent}body{font:400 15px/22px var(--font-sans);color:var(--text);background:#e8eaf1;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font-family:var(--font-sans)}.app-shell{max-width:460px;margin:0 auto;min-height:100vh;background:var(--bg);position:relative;padding-bottom:110px}@media (min-width: 480px){.app-shell{box-shadow:0 0 0 1px #1418280a,var(--shadow-md)}}.app-bar{position:sticky;top:0;z-index:20;height:54px;background:#f5f6faeb;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);display:flex;align-items:center;gap:10px;padding:0 16px}.app-bar .title{flex:1;font-size:17px;font-weight:600;letter-spacing:-.2px}.app-bar .bar-right{display:flex;align-items:center;gap:14px}.icon-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:var(--text);position:relative}.icon-btn .dot-badge{position:absolute;top:2px;right:2px;min-width:15px;height:15px;padding:0 4px;background:var(--danger);color:#fff;border-radius:999px;font-size:10px;line-height:15px;text-align:center}.role-pill{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--text-muted);background:var(--card);border:1px solid var(--border);border-radius:999px;padding:5px 10px;cursor:pointer}.role-pill select{border:none;outline:none;background:transparent;font:500 12px/16px var(--font-sans);color:var(--text);cursor:pointer}.back-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:var(--text)}.page{padding:12px 16px 24px}.sec-title{display:flex;align-items:center;justify-content:space-between;margin:20px 4px 10px}.sec-title span{font-size:13px;font-weight:600;color:var(--text)}.sec-title .more{font-size:13px;color:var(--text-muted)}.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:12px}.card-title{font-size:14px;font-weight:600;margin-bottom:12px}.overview{display:flex;align-items:center}.ov-cell{flex:1;text-align:center;position:relative;padding:4px 0}.ov-cell+.ov-cell:before{content:"";position:absolute;left:0;top:12%;bottom:12%;width:1px;background:var(--border)}.ov-num{font-size:22px;font-weight:700;letter-spacing:-.5px}.ov-num.danger{color:var(--danger)}.ov-num.success{color:var(--success)}.ov-label{font-size:12px;color:var(--text-muted);margin-top:2px}.li{display:flex;align-items:center;gap:12px;padding:13px 0;border-bottom:1px solid var(--border)}.li:last-child{border-bottom:none}.li-main{flex:1;min-width:0}.li-title{font-size:15px;font-weight:500;line-height:20px;display:flex;align-items:center;gap:6px}.li-sub{font-size:12px;color:var(--text-muted);margin-top:2px}.li-right{display:flex;align-items:center;gap:10px;flex-shrink:0}.chev{color:var(--text-light);font-size:18px}.lv{width:7px;height:7px;border-radius:50%;flex-shrink:0}.lv-high{background:var(--danger)}.lv-mid{background:var(--brand)}.lv-low{background:var(--text-light)}.tag{display:inline-flex;align-items:center;font-size:12px;line-height:20px;padding:0 9px;border-radius:7px;white-space:nowrap}.act{display:inline-flex;align-items:center;gap:4px;padding:5px 11px;border-radius:8px;font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;line-height:16px}.act:active{opacity:.8}.act-primary{color:var(--brand-text);background:var(--brand-soft)}.act-ghost{color:var(--text-muted);background:var(--surface)}.act-danger,.tag-high{color:var(--danger);background:var(--danger-soft)}.tag-mid{color:var(--brand-text);background:var(--brand-soft)}.tag-low,.tag-s-todo{color:var(--text-muted);background:#f0f1f6}.tag-s-doing{color:var(--brand-text);background:var(--brand-soft)}.tag-s-done{color:var(--success);background:var(--success-soft)}.tag-s-overdue{color:var(--danger);background:var(--danger-soft)}.tag-rejected{color:var(--warning);background:var(--warning-soft)}.prog{display:flex;align-items:center;gap:8px;width:96px}input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:6px;border-radius:999px;background:var(--border);outline:none;margin:10px 0}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:22px;height:22px;border-radius:50%;background:#fff;border:2px solid var(--brand);box-shadow:0 1px 4px #14182833;cursor:pointer}input[type=range]::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:#fff;border:2px solid var(--brand);box-shadow:0 1px 4px #14182833;cursor:pointer}input[type=range]::-moz-range-track{height:6px;border-radius:999px;background:var(--border)}.prog-track{flex:1;height:5px;border-radius:999px;background:var(--border);overflow:hidden}.prog-fill{height:100%;border-radius:999px;background:var(--brand)}.prog-fill.done{background:var(--success)}.prog-num{font-size:12px;color:var(--text-muted);width:30px;text-align:right;font-variant-numeric:tabular-nums}.seg{display:flex;background:#eceff5;border-radius:11px;padding:3px;margin-bottom:14px}.seg-item{flex:1;text-align:center;padding:8px 0;font-size:13px;color:var(--text-muted);border-radius:9px;cursor:pointer}.seg-item.active{background:var(--card);color:var(--text);font-weight:600;box-shadow:0 1px 3px #14182814}.chip-row{display:flex;gap:8px;overflow-x:auto;padding:2px 0 14px;scrollbar-width:none}.chip-row::-webkit-scrollbar{display:none}.chip{flex-shrink:0;padding:7px 14px;font-size:13px;color:var(--text-muted);background:var(--card);border:1px solid var(--border);border-radius:999px;cursor:pointer}.chip.active{color:#fff;background:var(--brand);border-color:var(--brand);font-weight:500}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:11px 16px;border-radius:12px;border:none;font:600 15px/20px var(--font-sans);cursor:pointer}.btn-primary{background:var(--brand);color:#fff}.btn-primary:active{opacity:.9}.btn-ghost{background:var(--card);color:var(--text);border:1px solid var(--border)}.btn-danger{color:var(--danger)}.btn-sm{padding:8px 14px;font-size:13px;border-radius:10px}.btn-block{width:100%}.btn-disabled{background:#e6e8f0;color:var(--text-light)}.link{color:var(--brand-text);font-size:14px;font-weight:500}.link-danger{color:var(--danger)}.fab{position:fixed;bottom:96px;right:max(16px,calc(50% - 214px));z-index:30;width:54px;height:54px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 20px #4b3fe359}.fab:active{transform:scale(.96)}.action-bar{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:460px;z-index:28;display:flex;gap:10px;padding:10px 16px calc(10px + env(safe-area-inset-bottom));background:#fffffff0;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--border)}.action-bar .btn{flex:1}.bnav{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:460px;z-index:30;display:flex;background:#fffffff5;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--border);padding:6px 0 calc(6px + env(safe-area-inset-bottom))}.bnav-item{flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;color:var(--text-muted);font-size:11px;padding:4px 0}.bnav-item.active{color:var(--brand);font-weight:600}.bnav-item svg{display:block}.form-card{padding:20px 16px}.field{margin-bottom:16px}.field label{display:flex;align-items:baseline;justify-content:space-between;font-size:13px;font-weight:600;margin-bottom:8px}.field .hint{font-size:12px;color:var(--text-light);font-weight:400}.field input[type=text],.field input[type=password],.field input[type=date],.field textarea,.field select{width:100%;padding:13px 14px;border:1px solid var(--border);border-radius:12px;font:400 15px/21px var(--font-sans);background:var(--card);color:var(--text)}.field input:focus,.field textarea:focus,.field select:focus{outline:none;border-color:var(--brand)}.select,.field select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background:var(--card) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238A90A0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 12px center / 14px;padding-right:34px;cursor:pointer;box-shadow:0 1px 2px #1418280a;transition:border-color .15s,box-shadow .15s}.select{padding:10px 34px 10px 12px;border:1px solid var(--border);border-radius:10px;color:var(--text);font:500 14px/20px var(--font-sans)}.select:hover,.field select:hover{border-color:var(--text-light)}.select:focus,.field select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.field textarea{resize:none;min-height:96px}.field-row{display:flex;gap:10px}.field-row>div{flex:1}.radio-pills{display:flex;gap:8px}.radio-pill{flex:1;text-align:center;padding:11px 0;border:1px solid var(--border);border-radius:12px;cursor:pointer;font-size:14px;color:var(--text-muted)}.radio-pill.active{border-color:var(--brand);color:var(--brand-text);background:var(--brand-soft);font-weight:600}.upload-box{border:1px dashed var(--border);border-radius:12px;padding:26px 16px;text-align:center;color:var(--text-muted);cursor:pointer;font-size:13px}.upload-box:active{border-color:var(--brand);color:var(--brand)}.switch{display:inline-flex;align-items:center;gap:8px;font-size:14px;color:var(--text);cursor:pointer}.switch input{display:none}.switch .track{width:44px;height:26px;border-radius:999px;background:#d9dce5;position:relative;transition:background .2s;flex-shrink:0}.switch .track:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0003;transition:left .2s}.switch input:checked+.track{background:var(--brand)}.switch input:checked+.track:after{left:21px}.switch-row{display:flex;align-items:center;justify-content:space-between;padding:15px 0;border-bottom:1px solid var(--border)}.switch-row:last-child{border-bottom:none}.switch-row .sr-label{font-size:15px}.switch-row .sr-desc{font-size:12px;color:var(--text-muted);margin-top:1px}.form-submit{position:sticky;bottom:0;padding:12px 16px;margin:0 -16px -20px;background:var(--card);border-top:1px solid var(--border)}.detail-head{padding:18px 16px 14px}.detail-title{font-size:20px;font-weight:700;letter-spacing:-.3px;line-height:28px}.detail-tags{display:flex;gap:8px;margin-top:10px}.meta-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 16px;margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}.meta-item .mk{font-size:12px;color:var(--text-muted)}.meta-item .mv{font-size:14px;font-weight:500;margin-top:1px}.timeline{position:relative;padding-left:18px}.timeline:before{content:"";position:absolute;left:4px;top:8px;bottom:8px;width:1px;background:var(--border)}.tl-item{position:relative;padding:0 0 18px 8px}.tl-item:last-child{padding-bottom:0}.tl-item:before{content:"";position:absolute;left:-16px;top:6px;width:8px;height:8px;border-radius:50%;background:var(--brand)}.tl-item.done:before{background:var(--success)}.tl-title{font-size:14px;font-weight:500}.tl-meta{font-size:12px;color:var(--text-muted);margin-top:2px}.comment{display:flex;gap:10px;padding:14px 0;border-bottom:1px solid var(--border)}.comment:last-child{border-bottom:none}.avatar{width:34px;height:34px;border-radius:50%;background:#e3e0fb;color:var(--brand-text);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;flex-shrink:0}.comment-body{flex:1;min-width:0}.comment-head{display:flex;align-items:baseline;gap:8px;font-size:12px;color:var(--text-muted);margin-bottom:3px}.comment-head .name{color:var(--text);font-weight:600;font-size:14px}.comment-text{font-size:14px;line-height:21px}.comment-input{display:flex;gap:10px;align-items:flex-end;margin-top:14px}.comment-input textarea{flex:1;border:1px solid var(--border);border-radius:12px;padding:11px 14px;resize:none;min-height:46px;font:400 14px/20px var(--font-sans);background:var(--card);color:var(--text)}.comment-input textarea:focus{outline:none;border-color:var(--brand)}.comment-input .btn{padding:11px 16px}.noti{display:flex;gap:12px;padding:15px 0;border-bottom:1px solid var(--border)}.noti:last-child{border-bottom:none}.noti-dot{width:7px;height:7px;border-radius:50%;background:var(--brand);margin-top:7px;flex-shrink:0}.noti.read .noti-dot{background:var(--text-light)}.noti-title{font-size:15px;line-height:21px}.noti.read .noti-title{color:var(--text-muted)}.noti-meta{font-size:12px;color:var(--text-muted);margin-top:3px}.set-card{padding:6px 16px}.set-row{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--border);font-size:15px}.set-row:last-child{border-bottom:none}.set-row .val{color:var(--text-muted);font-size:14px}.set-row .chev{color:var(--text-light)}.login-bg{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg);padding:24px}.login-logo{width:64px;height:64px;border-radius:18px;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:700;box-shadow:0 12px 28px #4b3fe359}.login-title{font-size:22px;font-weight:700;letter-spacing:-.3px;margin-top:18px}.login-sub{font-size:14px;color:var(--text-muted);margin-top:6px}.login-card{width:100%;max-width:360px;margin-top:32px;padding:24px 20px}.login-foot{display:flex;align-items:center;justify-content:space-between;font-size:13px;color:var(--text-muted);margin-top:16px}.login-copy{font-size:12px;color:var(--text-light);margin-top:32px}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#14172873;z-index:100;display:none;align-items:flex-end;justify-content:center}.modal-mask.show{display:flex}.modal{background:var(--card);border-radius:20px 20px 0 0;width:100%;max-width:460px;padding:24px 20px calc(20px + env(safe-area-inset-bottom));animation:slideUp .22s ease-out}@keyframes slideUp{0%{transform:translateY(24px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-title{font-size:17px;font-weight:700;margin-bottom:4px}.modal-desc{font-size:13px;color:var(--text-muted);margin-bottom:18px}.modal-actions{display:flex;gap:10px;margin-top:20px}.modal-actions .btn{flex:1}.toast{position:fixed;left:50%;bottom:96px;transform:translate(-50%);background:#1a1d26eb;color:#fff;font-size:13px;padding:10px 18px;border-radius:999px;z-index:200;opacity:0;pointer-events:none;transition:opacity .2s;white-space:nowrap;max-width:90vw}.toast.show{opacity:1}.kpi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}.kpi-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 12px;text-align:center}.kpi-label{font-size:12px;color:var(--text-muted)}.kpi-num{font-size:24px;font-weight:700;letter-spacing:-.5px;margin-top:4px}.kpi-num.danger{color:var(--danger)}.kpi-num.success{color:var(--success)}.bars{margin-top:4px}.bar-row{display:flex;align-items:center;gap:12px;margin-bottom:14px}.bar-row:last-child{margin-bottom:0}.bar-row .lbl{width:58px;font-size:13px;color:var(--text-muted);flex-shrink:0}.bar-track{flex:1;height:9px;background:var(--border);border-radius:999px;overflow:hidden}.bar-fill{height:100%;border-radius:999px;background:var(--brand)}.bar-row .val{width:38px;text-align:right;font-weight:600;font-size:13px}.donut-wrap{display:flex;align-items:center;gap:24px}.donut{width:104px;height:104px;border-radius:50%;background:conic-gradient(var(--brand) 0 44%,var(--brand-soft) 44% 76%,var(--border) 76% 100%);position:relative;flex-shrink:0}.donut:after{content:"";position:absolute;top:23px;right:23px;bottom:23px;left:23px;background:var(--card);border-radius:50%}.donut-total{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:2}.donut-total .n{font-size:19px;font-weight:700;line-height:22px}.donut-total .t{font-size:11px;color:var(--text-muted)}.donut-legend{font-size:13px}.donut-legend .row{display:flex;align-items:center;gap:8px;margin-bottom:8px}.donut-legend .row:last-child{margin-bottom:0}.donut-legend .dot{width:8px;height:8px;border-radius:3px}.stat-sub{font-size:11px;color:var(--text-light);margin-top:2px}.proto-float{position:fixed;right:max(16px,calc(50% - 214px));top:60px;z-index:40;width:36px;height:36px;border-radius:50%;background:var(--card);color:var(--text-muted);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:15px;box-shadow:var(--shadow)}.proto-float:hover{color:var(--brand)}.landing{max-width:460px;margin:0 auto;padding:40px 20px}.landing-head{text-align:center;margin-bottom:28px}.landing-head .logo{width:60px;height:60px;margin:0 auto 14px;border-radius:18px;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:700;box-shadow:0 12px 28px #4b3fe34d}.landing-head h1{font-size:22px;font-weight:700;letter-spacing:-.3px}.landing-head p{font-size:13px;color:var(--text-muted);margin-top:6px}.sec-label{font-size:13px;font-weight:600;color:var(--text-muted);margin:20px 4px 10px}.page-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.page-card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px;display:flex;align-items:center;gap:12px}.pc-num{width:36px;height:36px;border-radius:11px;background:var(--brand-soft);color:var(--brand-text);display:flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0}.pc-name{font-size:14px;font-weight:600}.pc-desc{font-size:11px;color:var(--text-muted);margin-top:1px}.tip{background:var(--card);border:1px dashed var(--brand);color:var(--brand-text);border-radius:var(--radius);padding:12px 16px;font-size:13px;line-height:22px}.empty{text-align:center;color:var(--text-light);padding:36px 0;font-size:13px}
