:root{--ink:#152321;--muted:#6b7b78;--line:#cadbd7;--surface:#f4f7f6;--paper:#fff;--teal:#087f78;--teal-dark:#075d58;--teal-soft:#e4f3f0;--amber:#ad6b08;--amber-soft:#fff3d8;--red:#c43b35;--red-soft:#fff1f0;--blue:#3d66a8;--blue-soft:#e8eef9;--shadow:0 12px 34px rgba(20,49,45,.14);--radius:8px}
*{box-sizing:border-box}html,body{margin:0;background:var(--surface);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;font-size:14px;line-height:1.5}button,input,select,textarea{font:inherit}button{cursor:pointer}svg{width:16px;height:16px;stroke-width:1.8}.hidden{display:none!important}.app-shell{min-height:100vh}.topbar{height:62px;background:var(--paper);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:20px;padding:0 28px;position:sticky;top:0;z-index:30}.brand{display:flex;align-items:center;gap:11px}.brand-mark{width:34px;height:34px;border-radius:8px;background:var(--teal);color:#fff;display:grid;place-items:center;font-weight:700;font-size:17px}.brand strong{font-size:16px}.brand small{display:block;color:var(--muted);font-size:11px}.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:7px}.top-action{border:0;background:transparent;color:var(--muted);display:flex;align-items:center;gap:6px;padding:8px;border-radius:6px}.top-action:hover{background:var(--surface);color:var(--ink)}.avatar{width:32px;height:32px;border-radius:50%;background:#173f3b;color:#fff;display:grid;place-items:center;text-decoration:none;font-size:12px;font-weight:600}.workspace{max-width:1500px;margin:0 auto;padding:20px 28px 40px}.competition-tabs{display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--line);overflow-x:auto;white-space:nowrap}.competition-tab{display:inline-flex;align-items:center;gap:8px;border:0;background:transparent;color:var(--muted);padding:9px 14px 11px;position:relative}.competition-tab.active{color:var(--teal-dark);font-weight:600}.competition-tab.active:after{content:"";position:absolute;height:3px;background:var(--teal);left:12px;right:12px;bottom:-1px;border-radius:2px}.tab-dot{width:7px;height:7px;border-radius:50%;background:#9eada9}.competition-tab.active .tab-dot{background:var(--teal)}.add-tab{border:1px solid var(--line);border-radius:6px;padding:6px 10px;color:var(--teal);background:var(--paper);margin-bottom:5px;display:flex;align-items:center;gap:6px}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin:16px 0 12px}.eyebrow{font-size:12px;color:var(--muted);margin-bottom:3px}.page-head h1{font-size:25px;line-height:1.2;margin:0;font-weight:650}.page-head p{margin:4px 0 0;color:var(--muted)}.head-actions{display:flex;gap:8px;flex-wrap:wrap}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:36px;border-radius:6px;padding:0 13px;border:1px solid var(--line);background:var(--paper);color:var(--ink);font-weight:500;text-decoration:none}.btn:hover{border-color:#9fc0ba;background:#fbfdfc}.btn:focus,input:focus,select:focus,textarea:focus{outline:0;box-shadow:0 0 0 3px rgba(8,127,120,.16)}.btn-primary{background:var(--teal);border-color:var(--teal);color:#fff}.btn-primary:hover{background:var(--teal-dark);border-color:var(--teal-dark)}.btn-ghost{border-color:transparent;background:transparent;color:var(--teal);min-height:28px;padding:0 8px}.btn-danger{color:var(--red);border-color:#f0c3bf;background:#fff9f8}.btn-block{width:100%}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px;align-items:start}.flow-area{min-width:0}.side-stack{display:grid;gap:12px;align-content:start}.section-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.section-title h2{font-size:17px;margin:0}.section-title .hint{font-size:12px;color:var(--muted)}.summary-card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px;min-height:72px}.summary-card .label{color:var(--muted);font-size:12px;display:flex;align-items:center;justify-content:space-between}.summary-card .value{display:inline-block;font-size:23px;font-weight:650;line-height:1.05;margin:5px 8px 0 0}.summary-card .sub{display:inline;font-size:11px;color:var(--muted)}.summary-card .status-pill{padding:2px 6px}.sidebar-progress{min-height:100px}.progress-card .value{color:var(--teal)}.progress-track{height:4px;border-radius:20px;background:#e5efed;overflow:hidden;margin-top:7px}.progress-fill{height:100%;background:var(--teal);border-radius:20px;width:0;transition:width .25s}.flow-section{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.flow-toolbar{padding:13px 15px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px;flex-wrap:wrap}.search-wrap{display:flex;align-items:center;gap:7px;border:1px solid var(--line);height:34px;border-radius:6px;background:#fff;padding:0 9px;min-width:230px}.search-wrap svg{color:var(--muted)}.search-wrap input{border:0;outline:0;min-width:0;width:100%;background:transparent}.filter-select{height:34px;border:1px solid var(--line);border-radius:6px;background:#fff;padding:0 9px}.filter-chip{height:29px;border:1px solid var(--line);border-radius:15px;background:#fff;padding:0 10px;color:var(--muted);font-size:12px;display:flex;align-items:center;gap:5px}.filter-chip.active{background:var(--teal-soft);border-color:#acd8d2;color:var(--teal-dark)}.toolbar-spacer{flex:1}.clear-link{font-size:12px;color:var(--teal);border:0;background:transparent}.selected-filters{padding:8px 15px;color:var(--muted);font-size:12px;border-bottom:1px solid var(--line)}.table-scroll{overflow-x:auto;max-width:100%}.flow-table{width:100%;border-collapse:collapse;min-width:940px}.flow-table th{background:#f6f9f8;color:var(--muted);font-size:12px;font-weight:500;text-align:left;padding:10px 11px;border-bottom:1px solid var(--line);white-space:nowrap}.flow-table td{padding:11px;border-bottom:1px solid var(--line);vertical-align:middle}.flow-table tbody tr:hover{background:#fbfdfc}.flow-table tbody tr.row-done{background:#f0faf6}.flow-table tbody tr.row-done:hover{background:#e8f7f1}.flow-table tbody tr.row-overdue{background:var(--red-soft)}.flow-table tbody tr.row-overdue:hover{background:#ffe9e7}.flow-table .check-col{width:42px;text-align:center}.flow-table .no-col{width:48px;color:var(--muted);font-variant-numeric:tabular-nums}.flow-table .name-col{min-width:230px}.flow-table .action-col{width:60px;text-align:right}.stage-row td{background:#eef6f4;color:var(--teal-dark);font-weight:600;border-bottom:2px solid #b8d7d1;padding:9px 11px}.stage-count{font-weight:400;color:var(--muted);font-size:12px;margin-left:8px}.item-title{font-weight:600;cursor:pointer}.item-title:hover{color:var(--teal)}.item-sub{font-size:12px;color:var(--muted);margin-top:3px;max-width:330px}.checkbox{appearance:none;width:18px;height:18px;border:1.5px solid #b7c7c3;border-radius:4px;background:#fff;vertical-align:middle;position:relative;cursor:pointer}.checkbox:checked{background:var(--teal);border-color:var(--teal)}.checkbox:checked:after{content:"";position:absolute;width:8px;height:4px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg);left:4px;top:4px}.status-pill{display:inline-flex;align-items:center;gap:5px;border-radius:5px;padding:4px 8px;font-size:12px;white-space:nowrap}.status-pill:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.status-pending{background:#f0f3f2;color:#6c7c79}.status-progress{background:var(--amber-soft);color:var(--amber)}.status-done{background:var(--teal-soft);color:var(--teal-dark)}.status-na{background:var(--blue-soft);color:var(--blue)}.date{font-size:12px}.muted{color:var(--muted)}.overdue-text{color:var(--red);font-size:12px;margin-top:2px}.mini-menu{border:0;background:transparent;color:var(--muted);padding:5px}.phase-summary{display:flex;gap:16px;padding:10px 15px;color:var(--muted);font-size:12px;flex-wrap:wrap}.phase-summary strong{color:var(--ink)}.phase-summary .good{color:var(--teal-dark)}.overdue-panel{background:#fffafa;border:1px solid #efbeba;border-radius:var(--radius);padding:15px}.overdue-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}.overdue-head h2{margin:0;font-size:15px;color:#913c36}.overdue-count{font-size:12px;color:var(--red);margin-left:4px}.filter-owner{border:1px solid #ebceca;background:#fff;color:var(--red);border-radius:5px;padding:4px 7px;font-size:12px}.overdue-item{padding:10px 0;border-top:1px solid #efd1ce}.overdue-item:first-of-type{border-top:0;padding-top:0}.overdue-name{font-weight:600;font-size:13px}.overdue-meta{display:flex;gap:7px;align-items:center;margin-top:4px;color:var(--muted);font-size:12px}.overdue-days{color:var(--red);font-weight:600;margin-left:auto}.side-actions{display:grid;gap:8px}.empty-state{text-align:center;background:var(--paper);border:1px solid var(--line);padding:54px 20px;border-radius:8px;margin-top:20px}.empty-state h1{font-size:20px;margin:12px 0 4px}.empty-state p{color:var(--muted);margin:0 0 18px}.empty-icon{width:46px;height:46px;background:var(--teal-soft);color:var(--teal);border-radius:8px;display:grid;place-items:center;margin:auto}.empty-icon svg{width:24px;height:24px}.modal-backdrop,.drawer-backdrop{position:fixed;inset:0;background:rgba(20,38,35,.34);z-index:60;display:grid;place-items:center;padding:18px}.modal{width:min(680px,100%);max-height:92vh;overflow:auto;background:var(--paper);border-radius:8px;box-shadow:var(--shadow);padding:20px}.small-modal{width:min(460px,100%)}.modal-head,.drawer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:18px}.modal-head h2,.drawer-head h2{font-size:20px;margin:0}.icon-button{border:0;background:transparent;color:var(--muted);padding:5px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.field{display:grid;gap:5px}.field.wide{grid-column:1/-1}.field span{font-size:12px;color:var(--muted)}.field input,.field select,.field textarea,.inline-form input{width:100%;border:1px solid var(--line);border-radius:5px;background:#fff;min-height:38px;padding:7px 9px}.field textarea{min-height:78px;resize:vertical}.modal-actions,.drawer-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}.modal-copy{color:var(--muted);margin:-6px 0 16px}.drawer-backdrop{place-items:stretch end;padding:0}.drawer{width:min(520px,100%);height:100%;background:var(--paper);box-shadow:-12px 0 35px rgba(20,49,45,.18);display:flex;flex-direction:column}.drawer-head{padding:20px 22px 16px;border-bottom:1px solid var(--line);margin:0}.drawer-body{padding:18px 22px;overflow:auto;flex:1}.drawer-actions{padding:14px 22px;border-top:1px solid var(--line);margin:0}.asset-section,.audit-section{border-top:1px solid var(--line);margin-top:18px;padding-top:16px}.asset-head{display:flex;align-items:center;justify-content:space-between}.asset-head h3,.audit-section h3,.settings-grid h3{font-size:14px;margin:0 0 10px}.file-button{position:relative}.asset-list{display:flex;gap:8px;flex-wrap:wrap}.asset{border:1px solid var(--line);border-radius:5px;padding:7px 9px;background:#fbfdfc;font-size:12px;color:var(--ink);text-decoration:none}.audit-list{display:grid;gap:8px}.audit-row{font-size:12px;color:var(--muted)}.audit-row strong{color:var(--ink);font-weight:500}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.inline-form{display:flex;gap:7px}.tag-list{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}.tag{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:4px 9px;font-size:12px}.toast{position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);background:#173f3b;color:#fff;padding:10px 14px;border-radius:6px;opacity:0;pointer-events:none;transition:.2s;z-index:90;font-size:13px;box-shadow:var(--shadow)}.toast.show{opacity:1;transform:translate(-50%,0);pointer-events:auto}.login-screen{min-height:100vh;display:grid;place-items:center;background:#edf4f2;padding:20px}.login-box{width:min(390px,100%);background:#fff;border:1px solid var(--line);border-radius:8px;padding:30px;box-shadow:var(--shadow)}.login-brand{justify-content:center;margin-bottom:26px}.login-box h1{text-align:center;font-size:22px;margin:0 0 5px}.login-box p{text-align:center;color:var(--muted);font-size:13px;margin:0 0 22px}.login-label{display:block;color:var(--muted);font-size:12px;margin-bottom:6px}.login-input{width:100%;height:42px;border:1px solid var(--line);border-radius:6px;padding:0 12px;text-align:center;letter-spacing:4px;font-size:18px}.login-box .btn{margin-top:14px;height:42px}.login-foot{text-align:center;color:#90a09d;font-size:11px;margin-top:18px}.login-error{background:var(--red-soft);color:var(--red);padding:9px 10px;border-radius:5px;margin-bottom:12px;text-align:center;font-size:12px}
.drawer{width:min(560px,100%)}.drawer-actions{flex-wrap:wrap}.image-asset{width:96px;height:72px;border:1px solid var(--line);border-radius:5px;overflow:hidden;display:block;background:var(--surface)}.image-asset img{width:100%;height:100%;object-fit:cover;display:block}
@media(max-width:1100px){.dashboard-grid{grid-template-columns:1fr}.side-stack{grid-template-columns:repeat(2,minmax(0,1fr))}.overdue-panel,.side-actions{grid-column:1/-1}}
@media(max-width:720px){.topbar{height:58px;padding:0 14px}.brand{min-width:0;flex:1}.brand-mark{width:30px;height:30px}.brand strong{font-size:14px}.brand small,.desktop-only{display:none}.workspace{padding:14px 12px 28px}.competition-tabs{margin:0 -12px;padding:0 12px}.page-head{display:block;margin:14px 0 10px}.page-head h1{font-size:22px}.head-actions{margin-top:10px}.head-actions .btn{flex:1}.dashboard-grid{display:flex;flex-direction:column}.flow-area{order:0;width:100%}.side-stack{order:1;display:grid;grid-template-columns:1fr 1fr;width:100%}.sidebar-progress,.overdue-panel,.side-actions{grid-column:1/-1}.flow-toolbar{padding:10px;gap:7px}.search-wrap{min-width:100%}.filter-select{flex:1;min-width:0}.toolbar-spacer{display:none}.flow-table{min-width:900px}.flow-table th,.flow-table td{padding:9px}.section-title h2{font-size:16px}.modal{padding:16px}.form-grid,.settings-grid{grid-template-columns:1fr}.field.wide{grid-column:auto}.drawer-head{padding:16px}.drawer-body{padding:15px 16px}.drawer-actions{padding:12px 16px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}
