:root{font-family:Inter,"PingFang SC","Microsoft YaHei",sans-serif;color:#172033;background:#f4f7fb;font-size:14px}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}#app{display:grid;grid-template-columns:190px 1fr;min-height:100vh}aside{background:#142f58;color:#fff;padding:20px 14px;display:flex;flex-direction:column}.brand{font-size:18px;font-weight:700;padding:3px 10px 22px}nav button{display:block;width:100%;border:0;background:transparent;color:#ccd8eb;text-align:left;padding:11px 12px;border-radius:8px;margin:2px 0}nav button.active{background:#2e65b1;color:white;font-weight:600}.aside-foot{margin-top:auto;border-top:1px solid #395170;padding:15px 8px 0}.aside-foot label,.aside-foot small{display:block;color:#c4d0e2;font-size:12px;margin:5px 0}.aside-foot select{width:100%;padding:8px;border-radius:7px;border:0}main{padding:22px;min-width:0}header{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}h1{font-size:23px;margin:0 0 4px}header p,.muted{margin:0;color:#708096;font-size:13px}.primary,.secondary,.danger-btn{border-radius:8px;padding:8px 13px;min-height:38px;border:1px solid #ccd6e4}.primary{background:#2862ad;border-color:#2862ad;color:white}.secondary{background:#fff;color:#28364a}.danger-btn{background:#b93642;border-color:#b93642;color:white}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px}.metric,.panel{background:#fff;border:1px solid #dfe6ef;border-radius:11px}.metric{padding:16px}.metric strong{font-size:27px;display:block;margin-top:7px}.red{color:#bd3440}.orange{color:#b86712}.blue{color:#2862ad}.green{color:#147553}.panel-title{padding:14px 16px;border-bottom:1px solid #e7ecf3;font-weight:650}.task-row{padding:13px 16px;border-bottom:1px solid #edf1f6;display:grid;grid-template-columns:minmax(220px,1.5fr) 120px 120px 1fr auto;gap:12px;align-items:center}.task-row:last-child{border:0}.task-row:hover,.case-table tbody tr:hover{background:#f7f9fc}.client{font-weight:650}.code{font-size:11px;color:#7a889b;margin-top:3px}.badge{display:inline-block;padding:3px 7px;border-radius:12px;font-size:11px;background:#e8f1ff;color:#285e9c}.badge.ext{background:#fff0d8;color:#9a5708}.badge.late{background:#fdebed;color:#ad303b}.toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:11px}.toolbar input,.toolbar select,.form-grid input,.form-grid select,.form-grid textarea{border:1px solid #ccd6e4;border-radius:7px;padding:8px;background:white;min-height:38px}.toolbar input{min-width:230px}.quick{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:12px}.quick button{border:1px solid #d3dce8;border-radius:18px;padding:6px 10px;background:white}.quick button.active{background:#2862ad;color:white;border-color:#2862ad}.table-wrap{overflow:auto;background:white;border:1px solid #dfe6ef;border-radius:11px}.case-table{border-collapse:collapse;width:100%;min-width:1120px}.case-table th,.case-table td{padding:10px;border-bottom:1px solid #edf1f6;text-align:left;white-space:nowrap}.case-table th{font-size:12px;color:#68778b;background:#fafbfc;position:sticky;top:0}.case-table tbody tr{cursor:pointer}.next{max-width:190px;overflow:hidden;text-overflow:ellipsis}.pager{display:flex;justify-content:space-between;align-items:center;margin-top:10px}.tabs{display:flex;gap:7px;margin-bottom:13px}.tabs button{border:1px solid #d2dbe7;background:white;border-radius:8px;padding:8px 12px}.tabs button.active{background:#2862ad;color:#fff;border-color:#2862ad}.calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.day{background:#fff;border:1px solid #dfe6ef;border-radius:8px;min-height:105px;padding:8px}.day b{font-size:12px}.day .event{font-size:11px;background:#eaf2ff;color:#285e9c;padding:5px;border-radius:5px;margin-top:6px}.forecast-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.month-card{padding:18px}.bar-row{display:grid;grid-template-columns:90px 1fr 55px;gap:10px;align-items:center;margin:12px 0}.bar-track{height:9px;background:#e8edf4;border-radius:8px}.bar{height:9px;background:#2d66b2;border-radius:8px}.admin-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.admin-box{padding:18px}.admin-box input{display:block;width:100%;margin:10px 0}.notice{padding:10px;background:#eef4ff;color:#285e9c;border-radius:7px;margin:10px 0}.modal{position:fixed;inset:0;background:rgba(8,15,28,.5);z-index:10;display:flex;justify-content:flex-end}.modal.hidden,.hidden{display:none!important}.modal-card{width:min(600px,100%);height:100%;background:#fff;padding:19px;overflow:auto;box-shadow:-12px 0 30px rgba(0,0,0,.2)}.modal-head{display:flex;justify-content:space-between;border-bottom:1px solid #e2e8f0;padding-bottom:13px}.modal h2{margin:0 0 5px}.modal p{margin:0;color:#718096}.icon{border:0;background:transparent;font-size:25px}.case-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;background:#f4f7fb;border-radius:8px;padding:11px;margin:13px 0}.case-strip span{display:block;font-size:11px;color:#748296}.action-select{display:grid;grid-template-columns:120px 1fr;gap:10px;align-items:center;margin:14px 0}.action-select select{padding:9px;border:1px solid #ccd6e4;border-radius:7px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.field.full{grid-column:1/-1}.field label{display:block;color:#607086;font-size:12px;margin-bottom:5px}.field input,.field select,.field textarea{width:100%}.field textarea{min-height:70px;resize:vertical}.req{color:#bd3440;float:right}.error{background:#fdebed;color:#a82e39;padding:9px;border-radius:7px;margin-top:12px}.modal-actions{border-top:1px solid #e2e8f0;margin-top:16px;padding-top:14px;display:flex;justify-content:flex-end;align-items:center;gap:8px}.modal-actions span{margin-right:auto;color:#147553}.empty{text-align:center;color:#718096;padding:45px}.new-form{padding-top:5px}
@media(max-width:760px){#app{grid-template-columns:1fr}aside{padding:10px}.brand{padding:3px 7px 8px}nav{display:flex;overflow:auto}nav button{width:auto;white-space:nowrap}.aside-foot{display:none}main{padding:13px}header{align-items:flex-start}header .primary{display:none}.metrics{grid-template-columns:1fr 1fr}.task-row{grid-template-columns:1fr auto}.task-row>:nth-child(3),.task-row>:nth-child(4){display:none}.forecast-grid,.admin-grid{grid-template-columns:1fr}.modal{align-items:flex-end}.modal-card{height:auto;max-height:93%;border-radius:14px 14px 0 0}.form-grid{grid-template-columns:1fr}.field.full{grid-column:auto}.case-strip{grid-template-columns:1fr 1fr}.calendar{grid-template-columns:1fr}.day{min-height:auto}.action-select{grid-template-columns:1fr}}

/* Notion-inspired interface */
:root{color:#37352f;background:#fff}body{background:#fff}#app{grid-template-columns:220px 1fr}aside{background:#f7f7f5;color:#37352f;border-right:1px solid #ecece9;padding:14px 10px}.brand{font-size:15px;color:#2f2f2b;padding:8px 10px 16px}nav button{color:#5f5e5a;border-radius:5px;padding:8px 10px}nav button:hover{background:#eeeeeb}nav button.active{background:#e8e8e5;color:#252521;font-weight:600}.aside-foot{border-color:#e3e3df}.aside-foot label,.aside-foot small{color:#787774}.aside-foot select{border:1px solid #dededb;background:#fff;color:#37352f}main{max-width:1600px;padding:28px 32px}h1{font-size:25px}.primary{background:#37352f;border-color:#37352f}.secondary{border-color:#dededb;color:#37352f}.metric,.panel,.table-wrap{border-color:#e6e6e2;border-radius:6px;box-shadow:none}.metric strong{font-size:25px}.toolbar input,.toolbar select,.form-grid input,.form-grid select,.form-grid textarea{border-color:#dededb;border-radius:5px}.quick button,.tabs button{border-color:#dededb;border-radius:5px}.quick button.active,.tabs button.active{background:#37352f;border-color:#37352f}.badge{border-radius:4px;background:#e7f0f8;color:#315d7d}.modal-card{box-shadow:-4px 0 18px rgba(0,0,0,.12)}
.kanban{display:grid;grid-template-columns:repeat(4,minmax(260px,1fr));gap:12px;overflow-x:auto;align-items:start;padding-bottom:12px}.kanban-column{background:#f7f7f5;border-radius:6px;min-height:420px;padding:8px}.kanban-head{display:flex;justify-content:space-between;align-items:center;padding:5px 5px 10px;font-size:13px;font-weight:600}.kanban-head b{font-weight:400;color:#787774}.kanban-list{display:flex;flex-direction:column;gap:7px}.case-card{background:#fff;border:1px solid #e4e4e0;border-radius:5px;padding:11px;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.03)}.case-card:hover{background:#fbfbfa}.case-card.dragging{opacity:.45}.kanban-column.drag-over{background:#eeeee9;outline:2px solid #b8b8b2}.case-card-top{display:flex;justify-content:space-between;gap:8px;align-items:flex-start}.case-card .client{white-space:normal;line-height:1.4}.expiry{font-size:11px;color:#576f55;background:#edf3ec;padding:3px 5px;border-radius:4px;white-space:nowrap}.expiry.over{color:#9f3434;background:#f7e9e9}.model{font-size:12px;color:#787774;margin:9px 0}.inline-fields{display:grid;grid-template-columns:1fr 1fr;gap:7px;border-top:1px solid #eeeeeb;padding-top:9px}.inline-fields label{font-size:10px;color:#787774}.inline-fields input,.inline-fields select{display:block;width:100%;margin-top:4px;border:1px solid #e3e3df;border-radius:4px;padding:5px;background:#fff;color:#37352f;font-size:12px}.card-next{display:flex;justify-content:space-between;gap:8px;color:#787774;font-size:11px;margin-top:9px}.column-empty{color:#9b9a97;text-align:center;padding:24px 8px;font-size:12px}.other-cases{margin-top:12px;color:#787774}.other-cases summary{cursor:pointer;padding:8px}.kanban.loose{grid-template-columns:minmax(260px,360px);margin-top:8px}
@media(max-width:760px){#app{grid-template-columns:1fr}aside{background:#f7f7f5}main{padding:16px}.kanban{grid-template-columns:repeat(4,82vw)}.inline-fields input,.inline-fields select{font-size:16px}}
.metric-link{border:1px solid #e6e6e2;text-align:left;color:inherit}.metric-link:hover,.issue-grid button:hover{background:#f7f7f5}.issue-panel{margin-bottom:14px}.issue-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:1px;background:#ecece9}.issue-grid button{border:0;background:#fff;padding:14px;text-align:left}.issue-grid b{display:block;font-size:22px}.issue-grid span{font-size:12px;color:#787774}.quick-table{overflow:auto}.quick-row{display:grid;grid-template-columns:minmax(280px,1fr) 170px 180px auto;gap:8px;align-items:center;padding:10px 14px;border-bottom:1px solid #eeeeeb}.quick-row small{display:block;color:#787774;margin-top:4px}.quick-row input,.quick-row select,.column-sort{border:1px solid #dededb;border-radius:4px;padding:7px;background:#fff}.status-checks{display:flex;align-items:center;gap:10px;padding:5px 8px;border:1px solid #dededb;border-radius:5px}.status-checks label{white-space:nowrap;font-size:12px}.kanban-head>div{display:flex;align-items:center;gap:6px}.column-sort{padding:3px;font-size:11px}.timers{display:flex;flex-direction:column;align-items:flex-end;gap:4px}.appointment-left,.stage-age{font-size:10px;border-radius:3px;padding:2px 4px;white-space:nowrap}.appointment-left.safe{background:#edf3ec;color:#4d714a}.appointment-left.warn{background:#fbf1dd;color:#96651e}.appointment-left.urgent{background:#f7e9e9;color:#a33c3c}.stage-age{background:#f1f1ef;color:#6f6e69}.attention-actions{display:flex;gap:5px;margin-top:9px}.attention-actions button{flex:1;border:1px solid #dededb;background:#fff;border-radius:4px;padding:5px;font-size:11px}.history{border-top:1px solid #eeeeeb;border-bottom:1px solid #eeeeeb;padding:10px 0;margin-bottom:15px}.history summary{cursor:pointer;font-weight:600}.history>div{padding:7px 4px;border-top:1px solid #f0f0ed;font-size:12px}.history small{display:block;color:#787774;margin-top:3px}.task-board{display:grid;grid-template-columns:repeat(3,minmax(260px,1fr));gap:12px}.task-column{background:#f7f7f5;border-radius:6px;padding:8px;min-height:420px}.task-list{display:flex;flex-direction:column;gap:8px}.task-card{background:#fff;border:1px solid #e4e4e0;border-radius:5px;padding:11px}.task-card.p0{border-left:3px solid #c94a4a}.task-card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:9px}.due-count{font-size:11px;color:#b63838}.task-card p{font-size:12px;color:#5f5e5a}.task-card button{width:100%}.quality-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:14px 0}.monthly-new{padding-bottom:12px}.monthly-new .toolbar,.bar-box,#newBars{padding:12px 16px;margin:0}.month-card strong{font-size:26px}
.quick-row.saved{background:#f3f8f4}.quick-row button:disabled{cursor:default;opacity:.72}
@media(max-width:760px){.issue-grid{grid-template-columns:1fr 1fr}.quick-row{grid-template-columns:1fr}.status-checks{overflow:auto;width:100%}.task-board{grid-template-columns:repeat(3,82vw);overflow:auto}.quality-grid{grid-template-columns:1fr}.case-filters input{width:100%}}
.status-menu{position:relative;min-width:210px}.status-menu summary{list-style:none;border:1px solid #dededb;border-radius:5px;padding:10px 34px 10px 11px;background:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-menu summary:after{content:'⌄';position:absolute;right:12px}.status-menu>div{position:absolute;z-index:5;top:44px;left:0;width:210px;background:#fff;border:1px solid #dededb;border-radius:6px;padding:7px;box-shadow:0 8px 24px rgba(0,0,0,.12)}.status-menu label{display:block;padding:7px}.status-menu input{accent-color:#16835b;margin-right:8px}.sort-buttons{display:flex;gap:3px}.sort-buttons button{border:0;background:transparent;color:#787774;font-size:11px;padding:3px}.sort-buttons button:hover{background:#e9e9e5}.case-card{position:relative}.maintained-dot{position:absolute;right:-4px;top:-4px;width:13px;height:13px;border-radius:50%;background:#c9c9c5;border:2px solid #fff}.maintained-dot.done{background:#28a36a}.line-chart{width:100%;min-width:680px;height:245px}.line-chart text{font-size:11px;fill:#787774}#newChart{overflow:auto;padding:8px 14px}
.type-panel{margin-bottom:14px}.type-grid{display:grid;grid-template-columns:repeat(4,1fr)}.type-grid button{border:0;border-right:1px solid #eee;border-bottom:1px solid #eee;background:#fff;padding:14px;text-align:left;display:flex;justify-content:space-between;gap:12px}.type-grid b{font-size:22px;color:#c33}.dashboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:14px 0}.summary-grid{display:grid;grid-template-columns:repeat(4,1fr)}.summary-grid div{padding:18px;border-right:1px solid #eee}.summary-grid b{display:block;font-size:24px}.summary-grid span{font-size:12px;color:#787774}.funnel{padding:12px}.funnel div{display:flex;justify-content:space-between;padding:7px 10px;margin:4px auto;background:#eaf0f8}.funnel div:nth-child(2){width:90%}.funnel div:nth-child(3){width:80%}.funnel div:nth-child(4){width:70%}.month-table table{border-collapse:collapse;width:100%;min-width:1050px}.month-table th,.month-table td{border:1px solid #e6e6e2;padding:7px;text-align:center}.table-scroll{overflow:auto}.task-type-strip{display:flex;gap:7px;overflow:auto;margin-bottom:12px}.task-type-strip span{min-width:165px;border:1px solid #e6e6e2;border-radius:5px;padding:10px;background:#fff;font-size:11px}.task-type-strip b{font-size:20px;color:#c33;margin-right:8px}.quick-maintain{margin-bottom:14px}.card-actions{display:flex;gap:5px;margin-top:9px}.card-actions button{flex:1;border:1px solid #dededb;background:#fff;border-radius:4px;padding:5px;font-size:11px}.attention-month{font-size:12px;color:#8a5a16;background:#fbf1dd;padding:7px;border-radius:4px}
@media(max-width:760px){.type-grid{grid-template-columns:1fr 1fr}.dashboard-grid{grid-template-columns:1fr}.summary-grid{grid-template-columns:1fr 1fr}}
.quick-maintain .quick-table{max-height:360px;overflow:auto}
.todo-pair{display:grid;grid-template-columns:1fr 1fr;gap:14px}.todo-pair .type-panel{margin:0}.todo-pair .type-grid{display:block}.todo-pair .type-grid button{width:100%;border-right:0;min-height:47px;align-items:center}.task-type-strip button{min-width:165px;border:1px solid #e6e6e2;border-radius:5px;padding:10px;background:#fff;font-size:11px;text-align:left}.task-type-strip button.active{border-color:#37352f;background:#f2f2ef}.task-type-strip button b{font-size:20px;color:#c33;margin-right:8px}.selected-task-list{display:grid;grid-template-columns:repeat(3,minmax(250px,1fr));gap:10px;padding:12px}.selected-task-list>.empty{grid-column:1/-1}
@media(max-width:760px){.todo-pair{grid-template-columns:1fr}.selected-task-list{grid-template-columns:1fr}}

/* Quiet, high-density polish for the existing working layout */
:root{--ink:#2f2f2b;--muted:#77766f;--line:#e7e6e2;--soft:#f7f7f5;--blue:#2f6fba;--red:#c13f45;--shadow:0 1px 2px rgba(15,15,15,.04),0 5px 18px rgba(15,15,15,.035)}
body{background:#fbfbfa;color:var(--ink);letter-spacing:.005em}
aside{background:#f4f4f2;box-shadow:inset -1px 0 #e8e7e3}
main{background:linear-gradient(180deg,#fff 0,#fbfbfa 210px)}
header{padding-bottom:15px;border-bottom:1px solid #efefec}
header p,.muted{color:var(--muted)}
button,input,select,textarea{transition:border-color .15s ease,background-color .15s ease,box-shadow .15s ease,transform .15s ease}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid rgba(47,111,186,.28);outline-offset:2px}
.primary:hover{background:#292824;border-color:#292824}.secondary:hover,.tabs button:hover,.task-type-strip button:hover{background:#f5f5f2}
.panel,.metric,.table-wrap{background:rgba(255,255,255,.96);box-shadow:var(--shadow)}
.panel-title{min-height:50px;display:flex;align-items:center;justify-content:space-between;color:#383732}
.todo-pair .type-grid button:hover{background:#f8f8f6;padding-left:17px}
.todo-pair .type-grid button b,.task-type-strip button b{font-variant-numeric:tabular-nums}
.case-card,.task-card{box-shadow:0 1px 2px rgba(15,15,15,.045)}
.case-card:hover,.task-card:hover{border-color:#cfcec9;box-shadow:0 5px 16px rgba(15,15,15,.07);transform:translateY(-1px)}
.kanban-column,.task-column{border:1px solid #efefec}
.modal{backdrop-filter:blur(2px)}.modal-card{border-left:1px solid #e5e4df}
.overdue-monitor{margin:14px 0;overflow:hidden}.overdue-monitor .panel-title small{display:block;color:var(--muted);font-weight:400;margin-top:3px}.monitor-date{font-size:12px;color:var(--muted);font-weight:400}
.overdue-summary{display:grid;grid-template-columns:repeat(4,1fr);border-bottom:1px solid var(--line)}.overdue-summary>div{padding:15px 17px;border-right:1px solid var(--line)}.overdue-summary>div:last-child{border-right:0}.overdue-summary b{display:block;font-size:24px;color:var(--red);font-variant-numeric:tabular-nums}.overdue-summary span{font-size:12px;color:var(--muted)}
.overdue-table{width:100%;border-collapse:collapse;min-width:980px}.overdue-table th,.overdue-table td{padding:10px 13px;border-bottom:1px solid #efefec;text-align:center;font-size:12px}.overdue-table th{position:sticky;top:0;background:#fafaf8;color:var(--muted);font-weight:550}.overdue-table th:first-child,.overdue-table td:first-child{text-align:left}.overdue-table tr:last-child td{border-bottom:0}.overdue-table tr.has-overdue{background:#fffafa}.overdue-table tr.has-overdue:hover{background:#fff5f4}.overdue-number{font-weight:700;color:var(--red);font-size:14px!important;font-variant-numeric:tabular-nums}
@media(max-width:760px){.overdue-summary{grid-template-columns:1fr 1fr}.overdue-summary>div:nth-child(2){border-right:0}.overdue-summary>div:nth-child(-n+2){border-bottom:1px solid var(--line)}}

/* UI/UX Pro Max revision: restrained Notion-like working surface */
:root{--ui-text:#37352f;--ui-muted:#787774;--ui-border:#e7e7e3;--ui-soft:#f7f7f5;--ui-hover:#efefec;--ui-focus:#2f6fba;--ui-danger:#c63f46;--ui-success:#23875d;--ui-warning:#a86a18}
body{background:#fff;color:var(--ui-text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;letter-spacing:0}
.skip-link{position:fixed;z-index:100;top:8px;left:8px;transform:translateY(-150%);padding:7px 11px;border-radius:5px;background:#37352f;color:#fff;text-decoration:none}.skip-link:focus{transform:none}
aside{background:#f7f7f5;border-right:1px solid #e8e8e4;box-shadow:none}.brand{display:block;color:#2f2f2b;font-size:15px;font-weight:650;padding:8px 10px 16px}
nav button{min-height:36px;color:#5f5e5a;font-weight:450}nav button:hover{background:#eeeeeb;color:#37352f}nav button.active{background:#e9e9e6;color:#252521;box-shadow:none;font-weight:600}
.aside-foot{border-color:#e3e3df}.aside-foot label,.aside-foot small{color:var(--ui-muted)}.aside-foot select{border:1px solid #dededb;box-shadow:none}
main{background:#fff}header{border-color:#efefec}h1{color:#2f2f2b;font-weight:700;letter-spacing:-.015em}header p,.muted{color:var(--ui-muted)}
.primary{background:#37352f;border-color:#37352f;color:#fff;box-shadow:none}.primary:hover{background:#292824;border-color:#292824}.secondary{background:#fff;border-color:#dededb;color:#37352f}.secondary:hover{background:#f7f7f5;border-color:#c8c8c3}.danger-btn{background:#b93b43;border-color:#b93b43}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:2px solid rgba(47,111,186,.32);outline-offset:2px}
.panel,.metric,.table-wrap{background:#fff;border-color:var(--ui-border);border-radius:6px;box-shadow:none}.panel-title{background:#fff;border-color:#ededE9;color:#37352f;font-weight:600}
.todo-pair .type-grid button,.type-grid button{border-color:#eeeeeb;background:#fff}.todo-pair .type-grid button:hover{background:#f7f7f5;padding-left:14px}.type-grid b,.task-type-strip button b{color:var(--ui-danger);font-weight:650}
.summary-grid div{border-color:#eeeeeb}.summary-grid b,.metric strong,.month-card strong{color:#2f2f2b;font-variant-numeric:tabular-nums}
.funnel div{background:#f1f1ef;color:#5f5e5a}.funnel div b{color:#37352f}
.kanban-column,.task-column{background:#f7f7f5;border-color:#eeeeeb;border-radius:6px}.kanban-head{color:#37352f}.case-card,.task-card{border-color:#e4e4e0;border-radius:5px;box-shadow:0 1px 2px rgba(15,15,15,.03)}.case-card:hover,.task-card:hover{background:#fbfbfa;border-color:#d2d2cd;box-shadow:0 2px 6px rgba(15,15,15,.05);transform:none}
.client{color:#37352f}.code,.model,.card-next{color:var(--ui-muted)}.expiry{background:#edf3ec;color:#4e704d}.expiry.over{background:#f7e9e9;color:#9f3434}.badge{background:#e7f0f8;color:#315d7d}.badge.ext{background:#fff0d8;color:#915708}.badge.late{background:#f8e9e9;color:#a43a40}
.inline-fields input,.inline-fields select,.toolbar input,.toolbar select,.form-grid input,.form-grid select,.form-grid textarea,.quick-row input,.quick-row select,.column-sort,.status-menu summary{border-color:#dededb;background:#fff}.inline-fields input:hover,.inline-fields select:hover,.toolbar input:hover,.toolbar select:hover,.form-grid input:hover,.form-grid select:hover,.form-grid textarea:hover{border-color:#bdbdb7}
.tabs button,.task-type-strip button{border-color:#dededb;background:#fff;color:#5f5e5a}.tabs button.active,.task-type-strip button.active{background:#37352f;border-color:#37352f;color:#fff}.status-menu>div{border-color:#dededb;box-shadow:0 8px 24px rgba(15,15,15,.12)}
.month-table th,.month-table td,.overdue-table th,.overdue-table td{border-color:#e8e8e4}.month-table thead th,.overdue-table th,.case-table th{background:#fafaf9;color:#6f6e69}.month-table tbody tr:hover,.overdue-table tbody tr:hover{background:#fafaf9}
.line-chart polyline{stroke:#4979ae}.line-chart circle{fill:#4979ae}
.modal{background:rgba(15,15,15,.38)}.modal-card{border-color:#e4e4e0;box-shadow:-8px 0 28px rgba(15,15,15,.14)}.modal-head,.modal-actions{border-color:#e6e6e2}.icon{display:grid;place-items:center;width:38px;height:38px;border-radius:5px;color:#787774}.icon:hover{background:#f1f1ef;color:#37352f}.case-strip{background:#f7f7f5}.error{background:#f8e9e9;color:#9f3434;border:1px solid #edd0d0}
.maintained-dot.done{background:var(--ui-success)}.appointment-left.safe{background:#edf3ec;color:#4e704d}.appointment-left.warn{background:#fff0d8;color:#915708}.appointment-left.urgent{background:#f7e9e9;color:#9f3434}
.overdue-summary b,.overdue-number{color:var(--ui-danger)}.overdue-table tr.has-overdue{background:#fffafa}.overdue-table tr.has-overdue:hover{background:#fff6f5}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}.case-card:hover,.task-card:hover{transform:none}}

/* Notion proportion pass: compact, neutral, database-first */
:root{--notion-text:#37352f;--notion-muted:#787774;--notion-faint:#9b9a97;--notion-line:rgba(55,53,47,.12);--notion-hover:rgba(55,53,47,.06);--notion-selected:rgba(55,53,47,.09);--notion-red:#d44c47;--notion-red-bg:rgba(212,76,71,.10);--notion-green:#448361;--notion-blue:#337ea9}
#app{grid-template-columns:220px minmax(0,1fr)}
aside{position:sticky;top:0;height:100vh;min-height:0;padding:12px 10px;background:#f7f7f5;overflow:hidden}
.brand{display:flex;align-items:center;gap:8px;height:38px;padding:5px 8px 9px;font-size:14px;font-weight:600;color:var(--notion-text)}
.brand-logo{display:grid;place-items:center;width:22px;height:22px;flex:0 0 22px;border:1px solid rgba(55,53,47,.16);border-radius:5px;background:#fff;color:#4f4e49;font-size:11px;font-weight:700;box-shadow:0 1px 2px rgba(15,15,15,.04)}
nav button{min-height:32px;margin:1px 0;padding:5px 8px;border-radius:5px;font-size:14px;line-height:22px;color:#4f4e49}nav button:hover{background:var(--notion-hover)}nav button.active{background:var(--notion-selected);color:var(--notion-text)}
.aside-foot{position:sticky;bottom:0;margin-top:auto;padding:12px 8px 5px;background:#f7f7f5;border-color:var(--notion-line)}.aside-foot label{margin:0 0 6px;font-size:11px;color:var(--notion-muted)}.aside-foot select{height:34px;padding:5px 8px;border-color:var(--notion-line);border-radius:5px;font-size:13px}.aside-foot small{margin:6px 0 0;font-size:11px;line-height:1.35;color:var(--notion-muted)}
main{width:100%;max-width:none;padding:24px clamp(24px,2.5vw,42px)}header{margin-bottom:14px;padding-bottom:13px}h1{font-size:24px;line-height:1.25}header p{margin-top:3px;font-size:12px}
.panel-title{min-height:40px;padding:9px 14px;font-size:13px}.panel{border-radius:5px}
.todo-pair{gap:12px}.todo-pair .type-grid button{min-height:35px;padding:6px 14px;font-size:13px;line-height:20px}.todo-pair .type-grid button:hover{padding-left:14px;background:var(--notion-hover)}.todo-pair .type-grid b{font-size:17px;line-height:20px;color:var(--notion-red);font-weight:600}
.dashboard-grid{gap:12px;margin:12px 0}.summary-grid div{padding:13px 15px}.summary-grid b{font-size:20px}.summary-grid span{font-size:11px}.funnel{padding:9px 12px}.funnel div{padding:5px 9px;margin:3px auto;font-size:12px}
.red,.due-count,.type-grid b,.task-type-strip button b,.overdue-summary b,.overdue-number{color:var(--notion-red)!important}.type-grid b,.task-type-strip button b,.due-count,.overdue-number{font-variant-numeric:tabular-nums}.task-type-strip button b{font-size:17px;font-weight:600}.overdue-summary b{font-size:20px}
.tabs{gap:4px;margin-bottom:10px}.tabs button{min-height:32px;padding:5px 11px;border-color:transparent;background:transparent}.tabs button:hover{background:var(--notion-hover)}.tabs button.active,.task-type-strip button.active{background:var(--notion-selected);border-color:transparent;color:var(--notion-text);box-shadow:none}.task-type-strip{gap:5px;margin-bottom:10px}.task-type-strip button{min-width:150px;padding:8px 10px;border-radius:5px;border-color:var(--notion-line)}
.month-table table,.overdue-table,.case-table{border-collapse:collapse;background:#fff}.month-table th,.month-table td,.overdue-table th,.overdue-table td,.case-table th,.case-table td{height:34px;padding:6px 9px;border-color:var(--notion-line);font-size:12px}.month-table thead th,.overdue-table th,.case-table th{background:#f7f7f5;color:#6f6e69;font-weight:500}.month-table tbody th{background:#fafaf9;font-weight:500}.month-table tbody tr:hover,.overdue-table tbody tr:hover,.case-table tbody tr:hover{background:rgba(55,53,47,.035)}
.calendar{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));gap:0;border-top:1px solid var(--notion-line);border-left:1px solid var(--notion-line);background:#fff;overflow:auto}.calendar-weekday{height:32px;padding:6px 8px;border-right:1px solid var(--notion-line);border-bottom:1px solid var(--notion-line);background:#f7f7f5;color:var(--notion-muted);font-size:11px;font-weight:500;text-align:left}.day{min-height:112px;padding:7px;border:0;border-right:1px solid var(--notion-line);border-bottom:1px solid var(--notion-line);border-radius:0;background:#fff}.day.blank{background:#fafaf9}.day b{display:inline-grid;place-items:center;min-width:22px;height:22px;font-size:11px;font-weight:500;color:#5f5e5a}.day.today b{border-radius:50%;background:var(--notion-text);color:#fff}.day .event{margin-top:4px;padding:3px 5px;border-radius:3px;background:rgba(51,126,169,.11);color:#3d6f8f;font-size:10px;line-height:1.35}
.badge{font-size:10px}.badge.late{background:var(--notion-red-bg);color:#a63d39}.appointment-left.urgent{background:var(--notion-red-bg);color:#a63d39}.maintained-dot.done{background:var(--notion-green)}
.primary{background:#4f4e49;border-color:#4f4e49}.primary:hover{background:#37352f;border-color:#37352f}.modal-card{width:min(580px,100%)}
@media(max-width:760px){#app{grid-template-columns:1fr}aside{position:static;height:auto;overflow:visible}.brand-logo{display:none}.aside-foot{display:none}main{padding:14px}.todo-pair{grid-template-columns:1fr}.calendar{grid-template-columns:repeat(7,minmax(105px,1fr));overflow:auto}.day{min-height:90px}}

/* Compact navigation and calmer actions */
nav button{display:flex;align-items:center;gap:10px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;font-size:14px;font-weight:450;letter-spacing:0}
nav button svg{width:17px;height:17px;flex:0 0 17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.primary{background:#5b5a55;border-color:#5b5a55}.primary:hover{background:#474640;border-color:#474640}
.modal-actions{gap:12px;padding-top:16px}.modal-actions button{min-width:76px;padding-inline:18px}
.admin-box p+.primary,.admin-box p+button{margin-top:14px}.admin-box h2{margin-bottom:16px}.admin-box p{line-height:1.65}
.assignment-board{margin:12px 0;overflow:hidden}.assignment-board .panel-title small{display:block;margin-top:3px;color:var(--notion-muted);font-size:11px;font-weight:400}.assignment-board .panel-title>b{color:var(--notion-red);font-size:16px}.assignment-list{max-height:390px;overflow:auto}.assignment-row{display:grid;grid-template-columns:minmax(260px,1fr) 190px 170px 92px;gap:8px;align-items:center;padding:9px 12px;border-bottom:1px solid var(--notion-line)}.assignment-row:last-child{border-bottom:0}.assignment-case{min-width:0}.assignment-case>b,.assignment-case>small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.assignment-case>b{font-size:13px}.assignment-case>small{margin-top:3px;color:var(--notion-muted);font-size:11px}.assignment-row select{min-width:0;height:34px;padding:5px 8px;border:1px solid var(--notion-line);border-radius:5px;background:#fff;color:var(--notion-text);font-size:12px}.assignment-row button{min-height:34px;padding:5px 9px;font-size:12px}
.status-menu{min-width:160px}.status-menu summary{min-height:34px;padding:6px 30px 6px 9px;font-size:12px}.status-menu>div{top:38px;width:180px;padding:5px}.status-menu label{display:flex;align-items:center;gap:7px;padding:5px 6px;font-size:12px;line-height:18px}.status-menu input{width:15px;height:15px;margin:0;flex:0 0 15px}
#app{grid-template-columns:210px minmax(0,1fr)}nav button{font-size:13.5px;gap:9px}nav button svg{width:16px;height:16px;flex-basis:16px}
@media(max-width:900px){.assignment-row{grid-template-columns:1fr 1fr}.assignment-row button{grid-column:2}.assignment-case{grid-column:1/-1}}
@media(max-width:760px){.assignment-row{grid-template-columns:1fr}.assignment-row button,.assignment-case{grid-column:auto}}

/* ── 登录页与已登录身份 ─────────────────────────────────────── */
.boot-view{min-height:100vh;display:grid;place-items:center;color:#77766f;font-size:13px}
.login-view{min-height:100vh;display:grid;place-items:center;padding:24px;background:#fbfbfa}
.login-card{width:100%;max-width:372px;background:#fff;border:1px solid #e7e6e2;border-radius:10px;padding:30px 28px 24px;box-shadow:0 1px 2px rgba(15,15,15,.04),0 8px 26px rgba(15,15,15,.05)}
.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:24px}
.login-brand .brand-logo{display:grid;width:42px;height:42px;flex:0 0 42px;font-size:19px;border-radius:7px}
.login-brand h1{margin:0;font-size:18px}
.login-brand p{margin:3px 0 0;font-size:12px;color:#77766f}
.login-field{display:block;margin-bottom:15px}
.login-field>span{display:block;font-size:12px;color:#77766f;margin-bottom:6px}
.login-field select,.login-field input{width:100%;padding:10px 11px;border:1px solid #dededb;border-radius:5px;background:#fff;color:#2f2f2b;font-size:14px}
.login-field select:focus,.login-field input:focus{outline:2px solid #dcdcd6;outline-offset:-1px}
.login-card .primary{width:100%;margin-top:4px;min-height:42px}
.login-card .error{margin:0 0 12px;padding:9px 11px;border-radius:5px;font-size:12px}
.login-hint{margin:16px 0 0;text-align:center;font-size:11px;color:#9b9a97}
.user-badge{padding:2px 0 4px}
.user-badge .badge-label{display:block;font-size:11px;color:#9b9a97;margin-bottom:4px}
.user-badge b{display:block;font-size:15px;color:#2f2f2b}
.user-badge #selfRole{display:block;font-size:11.5px;color:#77766f;margin-top:2px}
.self-actions{display:flex;gap:6px;margin-top:10px}
.self-actions button{flex:1;border:1px solid #dededb;background:#fff;border-radius:5px;padding:6px 4px;font-size:11.5px;color:#37352f}
.self-actions button:hover{background:#f1f1ef}
@media(max-width:760px){
  .login-brand .brand-logo{display:grid}
  body.authed .aside-foot{display:block;border-top:0;padding:8px 7px 0}
  body.authed #userPicker{display:none}
  body.authed:has(#userPicker:not(.hidden)) #userPicker{display:block}
}

/* 待办周期、逾期提示与案件视图切换 */
.todo-periods{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.todo-periods .type-panel{margin:0}.todo-clear{padding:20px 14px;color:var(--text-tertiary);font-size:12px;text-align:center}
.overdue-alert{display:flex;width:100%;align-items:center;justify-content:space-between;min-height:42px;margin-bottom:12px;padding:8px 13px;border:1px solid #ecd2d2;border-radius:8px;background:var(--danger-soft);color:#8f3d3d;text-align:left}.overdue-alert b{display:grid;min-width:24px;height:24px;place-items:center;border-radius:12px;background:var(--danger);color:#fff;font-size:11px;font-variant-numeric:tabular-nums}
nav button{position:relative}.nav-warning{display:grid;min-width:18px;height:18px;margin-left:auto;padding:0 5px;place-items:center;border-radius:9px;background:var(--danger);color:#fff;font-size:9px;line-height:18px;font-variant-numeric:tabular-nums}
.view-switch{display:flex;margin-left:auto;padding:2px;border:1px solid var(--border);border-radius:7px;background:var(--surface-subtle)}.view-switch button{min-height:28px;padding:4px 10px;border:0;border-radius:5px;background:transparent;color:var(--text-secondary);font-size:11px}.view-switch button.active{background:var(--surface);color:var(--text);box-shadow:0 1px 2px rgba(36,35,32,.08)}
.case-list-view .case-table{min-width:1280px}.case-list-view tbody tr{cursor:pointer}.case-list-view tbody tr:hover{background:var(--surface-subtle)}
@media(max-width:980px){.todo-periods{grid-template-columns:1fr}.view-switch{margin-left:0}}

/* 综合管理部 · 状态日报 */
.status-report-toolbar{display:flex;align-items:flex-end;gap:8px;padding:12px 14px;margin-bottom:12px}
.date-field{display:grid;gap:4px}.date-field label{color:var(--text-secondary);font-size:11px;font-weight:550}
.date-field input{width:146px;min-height:36px;padding:6px 9px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text)}
.date-separator{padding:0 2px 9px;color:var(--text-tertiary);font-size:12px}
.status-summary{display:flex;align-items:center;gap:22px;min-height:44px;padding:0 4px 12px;color:var(--text-secondary);font-size:12px}
.status-summary>span{margin-right:auto}.status-summary b{color:var(--text);font-size:15px}
.status-dot{display:inline-block;width:7px;height:7px;margin-right:6px;border-radius:50%;vertical-align:1px}.status-dot.extension{background:#c28b35}.status-dot.closed{background:var(--danger)}
.status-report-table td{vertical-align:middle}.status-report-table td:nth-child(1){white-space:nowrap;color:var(--text-secondary)}
.status-report-table td:nth-child(3) b{display:block;font-weight:600}.status-report-table td:nth-child(3) small{display:block;margin-top:2px;color:var(--text-tertiary)}
.change-badge{display:inline-flex;align-items:center;min-height:24px;padding:3px 7px;border-radius:5px;font-size:11px;font-weight:600;white-space:nowrap}
.change-badge.extension{background:#fbf3e4;color:#8a6228}.change-badge.closed{background:var(--danger-soft);color:#984141}
@media(max-width:760px){.status-report-toolbar{align-items:stretch;flex-wrap:wrap}.date-field{flex:1;min-width:130px}.date-field input{width:100%}.date-separator{display:none}.status-report-toolbar button{flex:1}.status-summary{align-items:flex-start;gap:8px 16px;flex-wrap:wrap}.status-summary>span{width:100%}.status-report-table{min-width:980px}}

/* Impeccable polish — one final visual contract, no structural changes */
:root{
  --surface:#ffffff;
  --surface-subtle:#f7f7f5;
  --surface-hover:#f1f1ee;
  --text:#2f2e2a;
  --text-secondary:#6f6e68;
  --text-tertiary:#96958f;
  --border:#e5e4df;
  --border-strong:#d5d4ce;
  --accent:#4f6f64;
  --accent-hover:#405d54;
  --danger:#bd4b4b;
  --danger-soft:#f8eeee;
  --focus:rgba(74,109,151,.28);
  --radius-sm:6px;
  --radius-md:10px;
  --shadow-float:0 12px 36px rgba(36,35,32,.12),0 2px 8px rgba(36,35,32,.06)
}
html{color-scheme:light;scrollbar-color:#c9c8c2 transparent;scrollbar-width:thin}
body{background:var(--surface);color:var(--text);font-size:14px;line-height:1.5;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
::selection{background:#dce7e2;color:#23352f}
*{scrollbar-width:thin;scrollbar-color:#cbc9c3 transparent}
*::-webkit-scrollbar{width:8px;height:8px}
*::-webkit-scrollbar-thumb{background:#cbc9c3;border:2px solid transparent;border-radius:8px;background-clip:padding-box}
*::-webkit-scrollbar-thumb:hover{background:#aaa9a3;border:2px solid transparent;background-clip:padding-box}

#app{grid-template-columns:208px minmax(0,1fr)}
aside{padding:10px 9px;background:var(--surface-subtle);border-right:1px solid var(--border);box-shadow:none}
.brand{height:42px;padding:6px 8px 10px;font-size:14px;font-weight:650;letter-spacing:-.01em}
.brand-logo{width:24px;height:24px;flex-basis:24px;border-color:var(--border-strong);border-radius:6px;color:#55544f;box-shadow:none}
nav{display:grid;gap:2px}
nav button{min-height:34px;margin:0;padding:6px 9px;border-radius:var(--radius-sm);color:#595852;font-size:13.5px;font-weight:450}
nav button svg{width:16px;height:16px;stroke-width:1.65}
nav button:hover{background:var(--surface-hover);color:var(--text)}
nav button.active{background:#e9e9e5;color:var(--text);font-weight:600}
.aside-foot{padding:12px 7px 4px;background:var(--surface-subtle);border-color:var(--border)}
.aside-foot select{height:34px;border-color:var(--border-strong);border-radius:var(--radius-sm);font-size:12.5px}
.user-badge b{font-size:14px}.user-badge #selfRole{line-height:1.45}
.self-actions button{min-height:32px;border-color:var(--border-strong);border-radius:var(--radius-sm);background:var(--surface)}

main{padding:24px clamp(24px,3vw,46px);background:var(--surface)}
header{min-height:56px;margin-bottom:16px;padding-bottom:14px;border-color:var(--border)}
h1{font-size:23px;line-height:1.25;font-weight:700;letter-spacing:-.025em}
header p{margin-top:4px;color:var(--text-secondary);font-size:12.5px}

button,input,select,textarea,summary{accent-color:var(--accent)}
button{font-weight:500}
.primary,.secondary,.danger-btn{min-height:36px;padding:7px 13px;border-radius:var(--radius-sm)}
.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}
.secondary{background:var(--surface);border-color:var(--border-strong);color:var(--text)}
.secondary:hover{background:var(--surface-hover);border-color:#c8c7c0}
.danger-btn{background:var(--danger);border-color:var(--danger)}
button:disabled{cursor:not-allowed;opacity:.52}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid var(--focus);outline-offset:1px}

.panel,.metric,.table-wrap{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:none}
.panel-title{min-height:43px;padding:10px 14px;border-color:var(--border);font-size:13px;font-weight:650}
.todo-pair{gap:12px}
.todo-pair .type-grid button{min-height:38px;padding:7px 14px;border-color:#edede9;color:#44433e}
.todo-pair .type-grid button:hover{padding-left:14px;background:var(--surface-subtle)}
.todo-pair .type-grid b,.task-type-strip button b,.overdue-number,.due-count{color:var(--danger)!important}
.dashboard-grid{gap:12px}.summary-grid div{padding:13px 14px}.summary-grid b{font-size:20px;letter-spacing:-.02em}
.funnel div{border-radius:4px;background:#eef2f0;color:#4f5f59}
.funnel{display:flex;flex-direction:column;align-items:center;gap:6px;padding:13px 16px}
.funnel .funnel-row{display:flex;align-items:center;justify-content:center;min-height:37px;margin:0;padding:7px 12px;border-radius:7px;background:#dfeae5;color:#334b42;font-weight:650;white-space:nowrap;transition:width .2s ease}
.funnel .funnel-row:nth-child(2){background:#e4ece8}.funnel .funnel-row:nth-child(3){background:#e8eeeb}.funnel .funnel-row:nth-child(4){background:#edf1ef}
.funnel .funnel-row.zero{background:#f2f2ef;color:var(--text-tertiary);font-weight:500}
.panel-title{display:flex;align-items:center;justify-content:space-between;gap:12px}.panel-title small{color:var(--text-tertiary);font-size:11px;font-weight:400}
.dashboard-filters{display:flex;align-items:flex-end;gap:10px;margin:12px 0;padding:12px 14px;flex-wrap:wrap}
.dashboard-filters>div{min-width:180px}.dashboard-filters label{display:block;margin-bottom:5px;color:var(--text-secondary);font-size:11px}.dashboard-filters select{width:100%;min-height:36px;padding:7px 30px 7px 9px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:#fff}.dashboard-filters>span,.dashboard-filters>small{align-self:center;color:var(--text-tertiary);font-size:11px}.dashboard-filters>small{margin-left:auto}
.analytics-stack{display:grid;gap:12px;margin:12px 0}.analytics-table{overflow:hidden}.analytics-table table{min-width:1120px;table-layout:fixed}.analytics-table th:first-child{width:145px;text-align:left}.analytics-table th:last-child,.analytics-table td:last-child{width:86px;background:#fafaf8}.analytics-table .above-average{color:#bd3f43;font-weight:700}.analytics-table .below-average{color:#258058;font-weight:650}.month-table .above-average{color:#bd3f43;font-weight:700}.month-table .below-average{color:#258058;font-weight:650}.month-table .total-row th,.month-table .total-row td{border-top:2px solid #d8d7d1;background:#f7f7f5;font-weight:700}
@media(max-width:760px){.dashboard-filters>div{width:100%}.dashboard-filters>span{display:none}.dashboard-filters>small{width:100%;margin-left:0}.funnel .funnel-row{min-width:34%}}

.tabs{padding-bottom:2px;border-bottom:1px solid var(--border)}
.tabs button{position:relative;min-height:34px;padding:6px 11px;border:0;border-radius:var(--radius-sm);color:var(--text-secondary)}
.tabs button.active,.task-type-strip button.active{background:#e9e9e5;border-color:transparent;color:var(--text)}
.tabs button.active::after{content:"";position:absolute;right:10px;bottom:-3px;left:10px;height:2px;border-radius:2px;background:var(--accent)}
.task-type-strip{gap:6px;padding:1px 0 3px}.task-type-strip button{min-width:154px;border-color:var(--border);border-radius:8px}

.kanban{gap:12px}.kanban-column,.task-column{padding:9px;border:1px solid #ebebe7;border-radius:var(--radius-md);background:var(--surface-subtle)}
.kanban-head{padding:5px 4px 11px;color:#464540}
.case-card,.task-card{padding:11px;border-color:var(--border);border-radius:8px;background:var(--surface);box-shadow:0 1px 2px rgba(36,35,32,.025)}
.case-card:hover,.task-card:hover{border-color:#cccbc4;background:var(--surface);box-shadow:0 5px 15px rgba(36,35,32,.065);transform:translateY(-1px)}
.case-card:active,.task-card:active{transform:translateY(0)}
.client{font-weight:650;letter-spacing:-.01em}.code,.model,.card-next{color:var(--text-secondary)}
.badge,.expiry,.appointment-left,.stage-age{border-radius:5px}
.maintained-dot{box-shadow:0 0 0 1px rgba(255,255,255,.8)}

.toolbar{gap:7px;margin-bottom:12px}
.toolbar input,.toolbar select,.form-grid input,.form-grid select,.form-grid textarea,.quick-row input,.quick-row select,.assignment-row select,.status-menu summary{min-height:36px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text)}
.toolbar input::placeholder,.form-grid input::placeholder,.form-grid textarea::placeholder{color:var(--text-tertiary)}
.toolbar input:hover,.toolbar select:hover,.form-grid input:hover,.form-grid select:hover,.form-grid textarea:hover{border-color:#bdbcb5}
.status-menu summary{padding:7px 30px 7px 10px}.status-menu>div{top:40px;border-color:var(--border);border-radius:8px;box-shadow:var(--shadow-float)}
.status-menu label{border-radius:5px}.status-menu label:hover{background:var(--surface-hover)}
.toolbar .status-menu>div{width:190px;padding:6px;background:var(--surface)}
.toolbar .status-menu label{display:flex;align-items:center;gap:9px;min-height:34px;padding:6px 8px;color:var(--text);font-size:12.5px;line-height:1.4;white-space:nowrap}
.toolbar .status-menu input[type="checkbox"]{appearance:auto;width:16px;min-width:16px;height:16px;min-height:16px;margin:0;flex:0 0 16px;accent-color:#238b63}

/* Dense operational lists and configurable case table */
.todo-periods{align-items:start}
.todo-periods .type-panel{overflow:hidden}
.todo-periods .type-grid{display:block}
.todo-periods .type-grid button{width:100%;min-height:38px;padding:8px 13px;border-right:0;align-items:center;line-height:1.35}
.todo-periods .type-grid button span{min-width:0;white-space:normal}
.todo-periods .type-grid button b{flex:0 0 auto;font-size:17px}
.stage-step{min-width:112px;height:30px;padding:4px 24px 4px 8px;border:1px solid var(--border);border-radius:5px;background:var(--surface);color:var(--text);font-size:12px}
.stage-step:hover{border-color:var(--border-strong);background:var(--surface-subtle)}
.column-picker{position:relative;margin-left:auto}
.column-picker>summary{display:flex;align-items:center;min-height:32px;padding:5px 10px;border:1px solid var(--border);border-radius:6px;background:var(--surface);color:var(--text-secondary);font-size:11px;cursor:pointer;list-style:none}
.column-picker>summary::-webkit-details-marker{display:none}
.column-picker>summary::after{content:'〈';margin-left:7px;transform:rotate(-90deg);color:var(--text-tertiary)}
.column-picker[open]>summary{background:var(--surface-subtle)}
.column-picker>div{position:absolute;z-index:7;top:calc(100% + 6px);right:0;display:grid;grid-template-columns:repeat(3,minmax(130px,1fr));width:520px;max-height:390px;padding:8px;overflow:auto;border:1px solid var(--border);border-radius:8px;background:var(--surface);box-shadow:0 8px 24px rgba(36,35,32,.12)}
.column-picker header{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;padding:4px 6px 8px;border-bottom:1px solid var(--border);font-size:12px}
.column-picker header button{border:0;background:transparent;color:var(--text-secondary);font-size:11px}
.column-picker label{display:flex;align-items:center;gap:7px;min-height:32px;padding:5px 6px;border-radius:5px;font-size:11px}
.column-picker label:hover{background:var(--surface-subtle)}
.column-picker input{width:14px;min-width:14px;height:14px;min-height:14px;margin:0;accent-color:#238b63}
.status-report-table{min-width:1180px;table-layout:fixed}
.status-report-table .col-time{width:140px}.status-report-table .col-status{width:82px}.status-report-table .col-client{width:230px}.status-report-table .col-owner{width:105px}.status-report-table .col-assist{width:115px}.status-report-table .col-person{width:115px}.status-report-table .col-operator{width:105px}.status-report-table .col-note{width:auto}
.status-report-table th,.status-report-table td{padding:8px 10px}
.status-report-table td{vertical-align:top}
.status-report-table td:nth-child(8){white-space:normal;line-height:1.55;overflow-wrap:anywhere}
@media(max-width:980px){.column-picker{margin-left:0}.column-picker>div{right:auto;left:0;width:min(520px,calc(100vw - 48px));grid-template-columns:repeat(2,minmax(120px,1fr))}}
.contract-action{border-color:#c9ddd5!important;background:#edf6f2!important;color:#24664f!important;font-weight:600}
.case-profile{grid-template-columns:repeat(3,minmax(0,1fr))}.case-profile .wide{grid-column:span 2}.case-profile b{overflow-wrap:anywhere}
.history-entry{padding:10px 4px!important}.history-entry.initial{background:var(--surface-subtle);padding:10px!important;border-radius:6px}.history-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.history-line>b{font-variant-numeric:tabular-nums}.history-line>strong{font-size:12px}.history-line>span{color:var(--text-secondary)}.history-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px 12px;margin-top:8px}.history-fields span{display:flex;gap:6px;min-width:0;color:var(--text);font-size:11px;overflow-wrap:anywhere}.history-fields em{flex:0 0 auto;color:var(--text-tertiary);font-style:normal}.history-entry p{margin:7px 0 0!important;padding:7px 9px;border-radius:5px;background:var(--surface-subtle);color:var(--text)!important;white-space:pre-wrap}
.report-filters{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:9px}.report-filters select{min-height:34px;padding:5px 28px 5px 9px;border:1px solid var(--border-strong);border-radius:6px;background:var(--surface);color:var(--text);font-size:11px}.report-filters button{min-height:34px;padding:5px 10px;font-size:11px}.status-report-table th button{display:flex;width:100%;align-items:center;justify-content:space-between;gap:5px;padding:0;border:0;background:transparent;color:inherit;text-align:left;font-weight:inherit}.status-report-table th button span{color:var(--text-tertiary);font-size:10px}.status-report-table th button.active{color:var(--text)}
@media(max-width:760px){.case-profile{grid-template-columns:1fr 1fr}.case-profile .wide{grid-column:1/-1}.history-fields{grid-template-columns:1fr}}
.modal-card{width:min(760px,100%)}
.case-profile{grid-template-columns:minmax(150px,.9fr) minmax(190px,1.15fr) minmax(170px,1fr);gap:12px 18px;padding:14px 16px}
.case-profile>div{min-width:0}.case-profile span{margin-bottom:3px}.case-profile b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.case-profile .wide{grid-column:span 2}
.case-profile>div:last-child{grid-column:span 2}.case-profile>div:last-child b{overflow:visible;text-overflow:clip}
.history-entry{padding:9px 4px!important}.history-line{flex-wrap:nowrap}.history-line>*{white-space:nowrap}.history-entry p{line-height:1.6}.history-fields{grid-template-columns:repeat(3,minmax(0,1fr))}
.table-head-action{display:flex;width:100%;align-items:center;justify-content:space-between;gap:8px;padding:0;border:0;background:transparent;color:inherit;text-align:left;font:inherit}.table-head-action span{color:var(--text-tertiary);font-size:9px;font-weight:500}.table-head-action.active{color:var(--text)}
@media(max-width:760px){.modal-card{width:100%}.case-profile{grid-template-columns:1fr 1fr}.case-profile .wide{grid-column:1/-1}.history-line{flex-wrap:wrap}.history-fields{grid-template-columns:1fr}}

.table-wrap{overflow:auto}.case-table th,.case-table td,.month-table th,.month-table td,.overdue-table th,.overdue-table td{height:36px;padding:7px 10px;border-color:var(--border);font-size:12px}
.case-table th,.month-table thead th,.overdue-table th{background:var(--surface-subtle);color:var(--text-secondary);font-weight:550}
.case-table tbody tr:hover,.month-table tbody tr:hover,.overdue-table tbody tr:hover{background:#fafaf8}

.modal{background:rgba(30,29,27,.32);backdrop-filter:blur(3px)}
.modal-card{width:min(590px,100%);padding:20px 22px;border-left:1px solid var(--border);box-shadow:-12px 0 38px rgba(30,29,27,.14)}
.modal-head{padding-bottom:14px;border-color:var(--border)}.modal h2{font-size:20px;letter-spacing:-.02em}.modal p{color:var(--text-secondary);font-size:12px}
.icon{width:34px;height:34px;font-size:22px}.case-strip{padding:12px;border:1px solid #ecece8;border-radius:8px;background:var(--surface-subtle)}
.field label{margin-bottom:6px;color:var(--text-secondary)}.field textarea{min-height:82px}.req{color:var(--danger)}
.modal-actions{position:sticky;bottom:-20px;margin:18px -22px -20px;padding:14px 22px 18px;border-color:var(--border);background:rgba(255,255,255,.96);backdrop-filter:blur(8px)}
.error{border-color:#eccfcf;border-radius:7px;background:var(--danger-soft);color:#983d3d}

.assignment-row{padding:10px 13px}.assignment-row:hover{background:#fafaf8}
.assignment-list{scrollbar-gutter:stable}.assignment-board .panel-title>b{color:var(--danger)}

@media(max-width:980px){main{padding-inline:22px}.todo-pair{grid-template-columns:1fr 1fr}.dashboard-grid{grid-template-columns:1fr}.summary-grid{grid-template-columns:repeat(4,1fr)}}
.report-overview{display:grid;grid-template-columns:1.25fr 1fr 1fr;gap:12px;margin:12px 0}.report-kpi-grid{display:grid;grid-template-columns:repeat(3,1fr);padding:16px}.report-kpi-grid div{display:flex;flex-direction:column;gap:4px}.report-kpi-grid b{font-size:24px;font-variant-numeric:tabular-nums}.report-kpi-grid span,.report-breakdown span{color:var(--text-secondary);font-size:12px}.report-breakdown>div:not(.panel-title){display:flex;justify-content:space-between;gap:12px;padding:9px 14px;border-bottom:1px solid var(--border)}.report-breakdown>div:last-child{border-bottom:0}.maintenance-table{min-width:1100px}.maintenance-table td:nth-child(1){white-space:nowrap}.maintenance-table td:nth-child(3) small,.workflow-table td:nth-child(3) small{display:block;margin-top:2px;color:var(--text-tertiary)}.report-note{max-width:360px;white-space:normal!important;line-height:1.5}.workflow-summary{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;margin:12px 0}.workflow-summary>div{display:flex;align-items:baseline;justify-content:space-between;padding:12px 14px;border:1px solid var(--border);border-radius:8px;background:var(--surface)}.workflow-summary b{font-size:20px}.workflow-summary span{font-size:11px;color:var(--text-secondary)}.workflow-summary .attention{border-color:#e4b2b2;background:#fff7f7}.workflow-summary .attention b{color:#a43a3a}.workflow-table{min-width:1550px}.workflow-table td{vertical-align:middle}.workflow-table td:last-child{min-width:430px}.workflow-confirm,.workflow-reply,.workflow-attention{display:flex;align-items:center;gap:6px}.workflow-confirm select,.workflow-reply input,.workflow-attention input{height:34px;min-width:120px;border:1px solid var(--border-strong);border-radius:6px;padding:5px 8px;background:#fff}.workflow-reply input[type=date],.workflow-attention input[type=date]{min-width:140px}.workflow-table button{min-height:34px;padding:5px 9px;font-size:11px;white-space:nowrap}.workflow-state{display:inline-flex;padding:4px 7px;border-radius:5px;background:var(--surface-subtle);font-size:11px}.workflow-state.attention,.attention-flag{background:#f9e7e7;color:#a43a3a;font-weight:700}.attention-flag{padding:5px 8px;border-radius:5px;white-space:nowrap}.workflow-done{color:#267356;font-weight:600}.stage-menu{min-width:220px}.stage-menu>div{width:220px}
.maintenance-filters{margin-top:0;margin-bottom:12px}.maintenance-filters select{min-width:180px}.maintenance-filters .muted{margin-left:auto}
@media(max-width:980px){.report-overview{grid-template-columns:1fr}.workflow-summary{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){
  #app{grid-template-columns:1fr}aside{position:static;height:auto;padding:8px;overflow:visible;border-right:0;border-bottom:1px solid var(--border)}
  .brand{height:34px;padding:3px 7px 7px}.brand-logo{display:grid;width:22px;height:22px;flex-basis:22px}
  nav{display:flex;gap:3px;overflow-x:auto;padding-bottom:2px}nav button{width:auto;min-width:max-content;padding-inline:9px}nav button svg{width:15px;height:15px}
  main{padding:16px 14px 24px}header{min-height:50px;margin-bottom:13px}h1{font-size:21px}
  .todo-pair{grid-template-columns:1fr}.summary-grid{grid-template-columns:1fr 1fr}.kanban{grid-template-columns:repeat(4,84vw)}
  .modal-card{padding:18px 16px}.modal-actions{bottom:-18px;margin:16px -16px -18px;padding:12px 16px 16px}
}

/* ==========================================================================
   响应式适配层（平板 / 手机）  2026-09-15
   --------------------------------------------------------------------------
   背景：本文件此前累积了 16 个 @media(max-width:760px) 块，彼此覆盖、难以推断
   最终结果。本层位于文件末尾，作为「移动端样式的唯一权威来源」统一收口，
   不再往旧层里追加零散规则。

   关键根因（本次修复）：旧规则把移动端 #app 的网格轨道从
   `208px minmax(0,1fr)` 改写成 `1fr`，丢掉了 minmax(0,…)。于是侧栏导航条
   的 min-content（约 620px）把整条轨道撑到 636px，main 与其中所有宽表格、
   看板跟着被撑宽 —— 这才是页面横向溢出近 2700px 的真正原因。
   表格自身的 .table-wrap 滚动容器原本是正常的。

   依据 UI/UX Pro Max 规范：
     Responsive/Mobile First      按 1024 → 760 → 430 三档递进
     Responsive/Horizontal Scroll 页面本身不得横向滚动；宽内容在自身容器内滚动
     Responsive/Table Handling    宽表用滚动容器承载，不压缩列宽
     Responsive/Viewport Meta     已有 width=device-width, initial-scale=1
     Touch/Touch Target Size      可点区域 ≥44px，相邻目标间距 ≥8px
     Touch/Tap Delay              touch-action:manipulation
     Touch/Hover vs Tap           触屏不依赖 hover 反馈
     Forms/Mobile Keyboards       输入框字号 ≥16px，避免 iOS 聚焦自动放大
     Layout/Viewport Units        用 dvh 代替 100vh
     Navigation/Sticky Navigation 固定导航不得遮挡首屏内容
   ========================================================================== */

/* ---------- 0. 全局：文本缩放 / 触控反馈 / 禁止整页横向滚动 ---------- */
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
body {
  max-width: 100%;
  overflow-x: hidden;   /* 旧内核兜底 */
  overflow-x: clip;     /* 现代内核：不额外产生滚动容器 */
  -webkit-tap-highlight-color: transparent;
}
/* 移动浏览器地址栏会吃掉 100vh 的高度，改用 dvh */
#app { min-height: 100vh; min-height: 100dvh; }

/* 触屏设备：去掉 300ms 点击延迟；禁止用 hover 位移作为唯一反馈 */
@media (hover: none), (pointer: coarse) {
  button, summary, select, input, a, label, [role="button"], .case-card, .task-card {
    touch-action: manipulation;
  }
  .case-card:hover, .task-card:hover,
  .case-card:active, .task-card:active { transform: none; }
}

/* ---------- 1. ≤1024px：滚动容器收口 + 网格子项不撑破父级 ---------- */
@media (max-width: 1024px) {
  /* 网格/弹性子项的自动最小尺寸会按内容撑宽父级，必须显式归零。
     min-width 只放宽下限，永远不会让内容变大，因此可以安全地大范围套用。 */
  #app, #app > *, main, #page, #page > *,
  .panel, .panel > *, .metric,
  .todo-pair, .todo-pair > *, .todo-periods, .todo-periods > *,
  .dashboard-grid, .dashboard-grid > *, .forecast-grid, .forecast-grid > *,
  .admin-grid, .admin-grid > *, .summary-grid, .summary-grid > *,
  .issue-grid, .issue-grid > *, .quality-grid, .quality-grid > *,
  .selected-task-list, .selected-task-list > *, .case-strip, .case-strip > *,
  .workflow-summary, .workflow-summary > *, .report-overview, .report-overview > * {
    min-width: 0;
  }
  /* 固定列数的卡片网格在窄屏会撑破容器：
     例如 .selected-task-list 基础是 repeat(3, minmax(250px,1fr))，
     3×250 + 间距 = 770px，容器只有 514px（768 平板）就溢出了。
     改用 auto-fit + min(100%, …)，任何宽度都不会溢出，列数自动增减。 */
  .task-board, .selected-task-list, .issue-grid, .quality-grid, .report-overview {
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
  }

  /* 宽内容一律在自己的容器里横向滚动，不再撑宽整页 */
  .table-wrap, .quick-table, .table-scroll, .month-table, .analytics-table,
  .status-report, .overdue-monitor, .calendar {
    overflow-x: auto;
    max-width: 100%;
    overscroll-behavior-x: contain;
    -webkit-overflow-scrolling: touch;
  }
  .kanban, .task-board {
    max-width: 100%;
    overscroll-behavior-x: contain;
    scroll-snap-type: x proximity;
    scrollbar-width: thin;
  }
  .kanban > *, .task-board > * { scroll-snap-align: start; }

  /* 平板/触屏笔电：把偏小的可点区域抬到舒适区间（≥40px） */
  nav button { min-height: 40px; }
  .tabs button, .task-type-strip button, .view-switch button { min-height: 36px; }
  .column-picker > summary, .status-menu summary { min-height: 38px; }
  .aside-foot select, .column-picker label,
  .status-menu label, .toolbar .status-menu label { min-height: 40px; }
  .column-picker input, .status-menu input, .toolbar .status-menu input[type="checkbox"] {
    width: 18px; min-width: 18px; height: 18px; min-height: 18px; flex-basis: 18px;
  }
  /* 看板列头排序按钮与维护日报筛选控件在平板上也偏小 */
  .sort-buttons { gap: 4px; }
  .sort-buttons button { min-height: 36px; min-width: 44px; padding: 5px 8px; border-radius: 5px; }
  .maintenance-filters select, #maintClear, .maintenance-filters button { min-height: 40px; }
  /* 案件卡片操作按钮是最常点的控件，平板上原本只有 29px 高 */
  .card-actions { gap: 6px; }
  .card-actions button { min-height: 36px; padding: 8px 9px; font-size: 12px; }

  /* 表格右侧渐隐，暗示「还可以往右滑」 */
  .table-wrap { position: relative; }
  .case-table th { scroll-margin: 0; }
}

/* ---------- 2. ≤760px：手机 ---------- */
@media (max-width: 760px) {

  /* 2.1 骨架 —— 横向溢出的根因在这里修 */
  #app {
    grid-template-columns: minmax(0, 1fr);   /* 关键：保留 minmax(0,…) */
    grid-template-rows: auto minmax(0, 1fr); /* 顶栏行按内容高，剩下全给内容 */
    align-content: start;                    /* 内容不满一屏时不要把多余高度摊给顶栏 */
    min-height: 100dvh;
  }
  main { min-width: 0; width: 100%; padding: 14px 12px calc(24px + env(safe-area-inset-bottom)); }

  /* 2.2 顶栏：改为常驻的横向标签条（原来是可滚动但会随页面滚走） */
  aside {
    position: sticky;
    top: 0;
    z-index: 30;
    height: auto;
    min-width: 0;
    max-height: none;
    padding: 6px 8px 0;
    overflow: visible;
    border-right: 0;
    border-bottom: 1px solid var(--border);
    background: var(--surface-subtle);
  }
  .brand { height: auto; padding: 4px 2px 6px; font-size: 13px; }
  .brand-logo { width: 20px; height: 20px; flex-basis: 20px; font-size: 10px; }
  nav {
    display: flex;
    gap: 2px;
    margin: 0 -8px;
    padding: 0 8px 4px;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  nav::-webkit-scrollbar { display: none; }
  nav button {
    width: auto;
    min-width: max-content;
    min-height: 44px;            /* 触控目标 */
    padding: 8px 11px;
    margin: 0;
    gap: 6px;
    font-size: 13px;
  }
  nav button svg { width: 16px; height: 16px; flex-basis: 16px; }
  .nav-warning { min-width: 16px; height: 16px; line-height: 16px; font-size: 9px; }

  /* 当前使用人 / 当前登录：收成一行，别把常驻顶栏顶高 */
  .aside-foot {
    position: static;
    margin: 0 -8px;
    padding: 5px 10px;
    border-top: 1px solid var(--border);
    background: var(--surface-subtle);
  }
  .aside-foot label { margin: 0 6px 0 0; font-size: 11px; }
  .aside-foot select { height: 36px; }
  .user-badge { display: flex; align-items: center; gap: 8px; padding: 0; }
  .user-badge .badge-label { display: none; }
  .user-badge b { display: inline; font-size: 13px; }
  .user-badge #selfRole { display: inline; margin: 0; font-size: 11px; }
  .self-actions { margin: 0 0 0 auto; }
  .self-actions button { min-height: 36px; padding: 6px 10px; font-size: 11.5px; }

  /* 2.3 页头：恢复被隐藏的主操作按钮（原来手机上无法新增案件） */
  header { align-items: flex-start; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; padding-bottom: 11px; }
  header .primary { display: inline-flex; min-height: 40px; padding-inline: 14px; font-size: 13px; }
  h1 { font-size: 20px; }

  /* 2.4 触控目标：可点区域 ≥44px，相邻间距 ≥8px */
  .tabs button, .view-switch button, .column-picker > summary,
  .quick-row button, .modal-actions button, .status-menu summary { min-height: 44px; }
  .tabs { gap: 6px; padding-bottom: 0; overflow-x: auto; overscroll-behavior-x: contain; }
  .tabs button { white-space: nowrap; }
  .view-switch { padding: 3px; }
  .view-switch button { padding: 8px 12px; font-size: 12px; }
  .self-actions, .modal-actions { gap: 8px; }

  /* 状态多选：不要固定宽度，下拉面板贴合屏幕 */
  .status-menu { min-width: 0; flex: 1 1 160px; }
  .status-menu summary { padding: 10px 30px 10px 11px; }
  .status-menu > div,
  .toolbar .status-menu > div {
    top: calc(100% + 4px);
    right: auto;
    left: 0;
    width: min(86vw, 300px);
    max-height: 60dvh;
    overflow: auto;
  }
  .status-menu label,
  .toolbar .status-menu label { min-height: 44px; padding: 8px 8px; font-size: 13px; }
  .status-menu input,
  .toolbar .status-menu input[type="checkbox"] {
    width: 20px; min-width: 20px; height: 20px; min-height: 20px; flex-basis: 20px;
  }
  .column-picker > div { width: calc(100vw - 32px); max-height: 62dvh; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .column-picker label { min-height: 40px; font-size: 12px; }
  .column-picker input { width: 18px; min-width: 18px; height: 18px; min-height: 18px; }

  /* 2.5 表单：字号 ≥16px 才不会在 iOS 上聚焦时自动放大。
     这里用 !important 是为了压过文件中更高优先级的旧规则
     （如 `.toolbar select{min-height:36px}`），并已排除勾选框/单选框，
     避免把它们的尺寸也撑到 44px。 */
  input:not([type="checkbox"]):not([type="radio"]), select, textarea,
  .inline-fields input, .inline-fields select,
  .toolbar input, .toolbar select,
  .form-grid input, .form-grid select, .form-grid textarea,
  .quick-row input, .quick-row select,
  .login-field input, .login-field select {
    font-size: 16px !important;
    min-height: 44px !important;
  }
  textarea { min-height: 88px !important; }
  /* 2.5b 维护日报的日期区间工具条：
     日期输入框在 16px 字号下 min-width:auto 会按内容撑宽（约 150px+），
     把整行挤爆，后面「今天/本月/查询」被压上来重叠。
     这里把 min-width 归零，改成两行排布：日期一行，按钮一行。 */
  .status-report-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: stretch;
    gap: 8px;
    padding: 10px 12px;
  }
  .date-field { flex: 1 1 calc(50% - 4px); min-width: 0; }
  .date-field input { width: 100%; min-width: 0; }
  .status-report-toolbar button { flex: 1 1 auto; min-width: 84px; min-height: 44px; }
  .date-separator { display: none; }

  /* 输入框在弹性/网格里一律不按内容撑宽 */
  .toolbar input, .toolbar select, .case-filters input, .case-filters select,
  .form-grid input, .form-grid select, .quick-row input, .quick-row select,
  .maintenance-filters select { min-width: 0; }

  .inline-fields { grid-template-columns: 1fr 1fr; gap: 8px; }
  /* 案件筛选：两个短下拉并排，长文本（阶段）与搜索框独占一行，省一屏高度 */
  .case-filters { flex-wrap: wrap; align-items: stretch; gap: 8px; }
  .case-filters > #caseSearch,
  .case-filters > .stage-menu,
  .case-filters > #ownerFilter { flex: 1 1 100%; width: 100%; }
  .case-filters > #resultFilter,
  .case-filters > .status-menu:not(.stage-menu) { flex: 1 1 calc(50% - 4px); min-width: 0; }
  .maintenance-filters select { min-width: 0; width: 100%; }
  .maintenance-filters .muted { margin-left: 0; }
  .form-grid, .case-profile, .history-fields, .assignment-row { grid-template-columns: 1fr; }
  .field.full, .case-profile .wide { grid-column: auto / span 1; }

  /* 2.6 看板 / 任务板：一次一列，列间吸附，右缘露出下一列暗示可滑动 */
  .kanban, .task-board {
    grid-template-columns: repeat(4, minmax(calc(100vw - 46px), 1fr));
    gap: 10px;
    margin-inline: -12px;
    padding: 0 12px 10px;
    scroll-snap-type: x mandatory;
  }
  .task-board { grid-template-columns: repeat(3, minmax(calc(100vw - 46px), 1fr)); }
  .kanban-column, .task-column { min-height: 0; }
  .kanban-list { min-height: 0; }

  /* 2.7 弹窗：手机用底部抽屉，按钮常驻可点 */
  .modal { align-items: flex-end; }
  .modal-card {
    width: 100%;
    max-height: 92dvh;
    height: auto;
    padding: 16px 14px calc(16px + env(safe-area-inset-bottom));
    border-left: 0;
    border-radius: 14px 14px 0 0;
    box-shadow: 0 -10px 34px rgba(30, 29, 27, .2);
  }
  .modal-actions {
    position: sticky;
    bottom: calc(-16px - env(safe-area-inset-bottom));
    margin: 14px -14px calc(-16px - env(safe-area-inset-bottom));
    padding: 12px 14px calc(12px + env(safe-area-inset-bottom));
    gap: 10px;
  }
  .modal-actions button { flex: 1; min-height: 46px; font-size: 15px; }
  .modal-actions span { flex: 1 1 100%; margin: 0 0 2px; text-align: center; }

  /* 2.8 其余容器 */
  .table-wrap { border-radius: 8px; }

  /* 案件卡片上的操作按钮是全站点击最频繁的控件，
     原本只有 11px 字号 / 5px 内边距（实测高 29px），手机上很容易点错 */
  .case-card { padding: 12px; }
  .card-actions { flex-wrap: wrap; gap: 8px; margin-top: 10px; }
  .card-actions button {
    flex: 1 1 calc(50% - 4px);
    min-height: 40px;
    padding: 9px 10px;
    font-size: 13px;
  }
  .card-actions button:only-child { flex: 1 1 100%; }
  /* 看板列头的「时间优先 / 价格优先」排序按钮 */
  .sort-buttons { gap: 4px; }
  .sort-buttons button { min-height: 36px; min-width: 44px; padding: 6px 8px; font-size: 12px; border-radius: 5px; }
  /* 维护日报的「清除筛选」等零散按钮 */
  #maintClear, .maintenance-filters button { min-height: 44px; padding-inline: 12px; }

  .case-table, .month-table table, .overdue-table,
  .status-report-table, .maintenance-table, .workflow-table, .analytics-table table { font-size: 12px; }
  .case-table th, .case-table td { padding: 8px 10px; }
  .task-type-strip { gap: 6px; padding-bottom: 4px; }
  .task-type-strip button { min-width: 62vw; min-height: 64px; }
  .todo-periods, .dashboard-grid, .forecast-grid, .admin-grid, .todo-pair,
  .selected-task-list, .issue-grid, .quality-grid, .report-overview { grid-template-columns: 1fr; }
  .summary-grid, .overdue-summary, .case-strip { grid-template-columns: 1fr 1fr; }
  .empty { padding: 30px 16px; }
  .quick-maintain .quick-table { max-height: 56dvh; }

  /* 滚动容器不要引发整页左右弹跳 */
  .table-wrap, .quick-table, .table-scroll, .month-table, .calendar, .task-type-strip, .tabs {
    overscroll-behavior-x: contain;
  }
}

/* ---------- 3. ≤430px：小屏手机（iPhone SE / 安卓小屏） ---------- */
@media (max-width: 430px) {
  main { padding-inline: 10px; }
  h1 { font-size: 18px; }
  header p { font-size: 11.5px; }
  nav button { padding: 8px 9px; font-size: 12px; }
  .brand { font-size: 12px; }
  .summary-grid, .overdue-summary, .case-strip { grid-template-columns: 1fr; }
  .inline-fields { grid-template-columns: 1fr; }
  .kanban, .task-board { grid-template-columns: repeat(4, minmax(calc(100vw - 36px), 1fr)); }
  .task-board { grid-template-columns: repeat(3, minmax(calc(100vw - 36px), 1fr)); }
  .task-type-strip button { min-width: 74vw; }
  .modal-card { padding: 14px 12px calc(14px + env(safe-area-inset-bottom)); }
}

/* ---------- 4. 横屏矮屏：别让常驻顶栏吃掉内容 ---------- */
@media (max-width: 900px) and (orientation: landscape) and (max-height: 500px) {
  aside { position: static; }
  .modal-card { max-height: 96dvh; }
}

/* ═══ 工作台筛选多选 + 预测看板构成清单（2026-09-15） ═══ */
.mfilter{position:relative}
.mfilter-toggle{min-height:36px;padding:7px 12px;text-align:left}
.mfilter-caret{opacity:.55;font-size:11px;margin-left:4px}
.mfilter-panel{position:absolute;z-index:60;top:calc(100% + 6px);left:0;width:max-content;min-width:230px;max-width:min(320px,calc(100vw - 32px));max-height:min(360px,60vh);overflow:auto;background:var(--panel-bg,#fff);border:1px solid var(--border-strong,#cbd5e1);border-radius:var(--radius-md,12px);padding:10px 14px 12px;box-shadow:0 12px 32px rgba(15,23,42,.16)}
.mfilter-sec{font-size:11px;color:var(--text-tertiary,#94a3b8);margin:10px 0 2px;font-weight:600}
.mfilter-sec:first-child{margin-top:2px}
.mfilter-panel label{display:flex;align-items:center;gap:8px;padding:6px 4px;border-radius:8px;cursor:pointer;font-size:14px;color:var(--text-primary,#0f172a)}
.mfilter-panel label:hover{background:rgba(0,0,0,.05)}
.mfilter-panel input[type="checkbox"]{width:16px;height:16px;min-height:0;accent-color:var(--primary,#2563eb);margin:0}
.forecast-detail{margin-top:14px}
/* ═══ 签单构成：归属组卡片（统一 Notion 暖灰设计语言） ═══ */
.fd-group{margin:12px 0 0;background:#fff;border:1px solid var(--border);border-radius:8px;overflow:hidden;box-shadow:0 1px 2px rgba(36,35,32,.03)}
.fd-cat{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 12px;background:var(--surface-subtle);border-bottom:1px solid var(--border);font-weight:600;font-size:12.5px;color:var(--text);flex-wrap:wrap}
.fd-cat-name{display:inline-flex;align-items:center;gap:7px;min-width:0}
.fd-cat-name::before{content:"";flex:0 0 auto;width:4px;height:13px;border-radius:2px;background:var(--text)}
.fd-cat-meta{font-weight:450;color:var(--text-secondary);font-size:12px;white-space:nowrap}
.fd-case{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid #efefec;font-size:13px;transition:background .12s}
.fd-case:last-child{border-bottom:none}
.fd-case:hover{background:#fafaf8}
.fd-case .fd-cust{font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46%}
.fd-case .fd-desc{color:var(--text-secondary);font-size:12px;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}
.fd-case b{white-space:nowrap;font-variant-numeric:tabular-nums;font-size:13px}
/* 拿单概率徽章：高=绿 中=橙 低=红 未填=灰 */
.fd-case .fd-prob{display:inline-flex;align-items:center;padding:2px 10px;border-radius:20px;font-size:12px;font-weight:600;white-space:nowrap;flex:0 0 auto;font-variant-numeric:tabular-nums}
.fd-case .fd-prob.p-high{background:#e6f5ee;color:#0f6b46}
.fd-case .fd-prob.p-mid{background:#fdf3e3;color:#9a6b1a}
.fd-case .fd-prob.p-low{background:#fdecec;color:#b3261e}
.fd-case .fd-prob.p-none{background:#eef2f6;color:#7c8aa0}
@media(max-width:760px){
  .mfilter{width:100%}
  .mfilter-toggle{width:100%}
  .mfilter-panel{left:0;right:auto}
  .fd-case{flex-wrap:wrap;gap:4px 10px;padding:8px 10px}
  .fd-case .fd-cust{max-width:100%;white-space:normal}
  .fd-case .fd-desc{flex-basis:100%}
  .fd-cat{padding:7px 10px}
}

/* ═══ 详情弹窗·报备表备注行（2026-09-15） ═══ */
.remark-row b{font-weight:500;line-height:1.55;white-space:normal;word-break:break-word}

/* ═══ 状态日报·已签单徽章与状态点（2026-09-15） ═══ */
.status-dot.signed{background:#147553}
.change-badge.signed{background:#e6f5ee;color:#0f6b46}
/* 预测看板：月份卡片可点击切换（选中态对齐全站灰黑选中语言） */
.forecast-grid .month-card{cursor:pointer;transition:border-color .15s,box-shadow .15s,background .15s}
.forecast-grid .month-card:hover{border-color:var(--border-strong);box-shadow:0 2px 10px rgba(36,35,32,.08)}
.forecast-grid .month-card.sel{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text);background:var(--surface-subtle)}
.forecast-grid .month-card.sel strong{color:var(--text)}
.forecast-grid .month-card:focus-visible{outline:2px solid var(--text);outline-offset:2px}

/* ═══ 状态申请处理：退回按钮 + 维护日报：申请结果徽章（2026-09-16） ═══ */
.workflow-confirm [data-flow-action="reject"]{border-color:#d9dde3;color:#5b6472}
.workflow-confirm [data-flow-action="reject"]:hover{border-color:#b3261e;color:#b3261e;background:#fdf2f1}
.wf-chip{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:10px;font-size:12px;font-weight:500;vertical-align:middle;white-space:nowrap}
.wf-chip.ok{background:#e6f5ee;color:#0f6b46}
.wf-chip.pending{background:#fdf3e3;color:#9a6b1a}
.wf-chip.reject{background:#fdecec;color:#b3261e}

/* ═══ 预测看板：构成清单拿单概率（cs34 徽章样式并入上方 fd-case 块） ═══ */

/* ═══ 状态申请处理：固定状态标记（2026-09-16） ═══ */
.workflow-fixed{display:inline-block;margin-right:6px;padding:3px 10px;border-radius:6px;background:#eef1f5;color:#3d4654;font-size:13px;font-weight:500;white-space:nowrap}

/* ═══ 状态申请处理：综合管理直转标记（2026-09-17） ═══ */
.direct-flag{display:inline-block;margin-right:6px;padding:3px 8px;border-radius:6px;background:#fdf3e3;color:#9a6b1a;font-size:12px;font-weight:600;white-space:nowrap}
.workflow-confirm{flex-wrap:wrap}

/* ═══ 合同管理（2026-09-16） ═══ */
.contract-list{display:flex;flex-direction:column;gap:8px}
.contract-card{padding:0;overflow:hidden}
.contract-head{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:10px 16px;cursor:pointer;user-select:none}
.contract-head:hover{background:#f7f9fb}
.ct-title{display:flex;align-items:center;min-width:0}
.contract-head strong{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ct-summary{display:flex;align-items:center;gap:14px;flex:0 0 auto}
.ct-meta{font-size:13px;color:var(--text-secondary,#64748b);white-space:nowrap}
.ct-price{font-size:14px;font-weight:600;color:#1d4ed8;font-variant-numeric:tabular-nums;white-space:nowrap}
.ct-prog{font-size:12px;padding:2px 10px;border-radius:12px;background:#eaf2ff;color:#1d4ed8;white-space:nowrap}
.ct-prog.full{background:#e6f5ee;color:#0f6b46}.ct-alert{font-size:12px;padding:2px 10px;border-radius:12px;white-space:nowrap;font-weight:500}.ct-alert.over{background:#fdecec;color:#b3261e}.ct-alert.soon{background:#fdf3e3;color:#9a6b1a}
.ct-arrow{color:#9aa3af;font-size:14px;transition:transform .18s;flex:0 0 auto}
.contract-card.open .ct-arrow{transform:rotate(180deg)}
.contract-detail{display:none;padding:2px 16px 16px;border-top:1px dashed #e5e8ec}
.contract-card.open .contract-detail{display:block}
.ct-no{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:6px;background:#eef1f5;color:#3d4654;font-size:12px;white-space:nowrap}
.ct-src{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:10px;background:#e6f5ee;color:#0f6b46;font-size:12px;white-space:nowrap}
.contract-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:6px 12px;margin-top:12px}
.contract-grid div{display:flex;flex-direction:column}
.contract-grid span{font-size:11px;color:var(--text-secondary,#64748b);white-space:nowrap}
.contract-grid b{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.contract-terms,.contract-cases{margin-top:12px;padding-top:10px;border-top:1px dashed #e5e8ec;display:flex;flex-wrap:wrap;gap:5px;align-items:center}
.contract-terms .muted,.contract-cases .muted{width:100%;font-size:12px;margin-bottom:2px}
.contract-items{margin-top:12px;padding-top:10px;border-top:1px dashed #e5e8ec}
.contract-items .muted{width:100%;font-size:12px;margin-bottom:4px;display:flex;justify-content:space-between;align-items:center}
.contract-items .item-edit{font-size:12px;padding:2px 8px}
.ct-title .info-edit{font-size:12px;padding:2px 9px;flex-shrink:0;margin-left:4px}
.case-card-top .case-info-edit{font-size:12px;padding:2px 9px;flex-shrink:0}
.cu-nv{font-size:12px;padding:3px 8px;border:1px solid #c9d6e8;border-radius:6px;background:#f8fbff;color:#1f3a5f}
.cu-nv-txt{width:250px}
.fg-title{grid-column:1/-1;font-weight:600;color:#2d66b2;font-size:12px;margin:10px 0 0;padding-left:8px;border-left:3px solid #2d66b2}
/* cs39：合同表格视图 */
.ct-twrap{margin-top:10px}
.ct-table{min-width:1350px;font-size:12px}
.ct-table th{white-space:nowrap;background:var(--surface-subtle);position:sticky;top:0;z-index:1;font-size:12px;font-weight:500;color:var(--text-secondary);border-bottom:1px solid var(--border);text-align:left}
.ct-table th.ct-th-plain{padding:8px 9px}
.ct-sort{display:flex;width:100%;align-items:center;justify-content:space-between;gap:6px;padding:8px 9px;border:0;background:transparent;color:inherit;font:inherit;font-weight:500;text-align:left;cursor:pointer}
.ct-sort:hover{color:var(--text);background:rgba(55,53,47,.045)}
.ct-sort.active{color:var(--text)}
.ct-sort .ct-sort-ic{flex:0 0 auto;font-size:10px;color:var(--text-tertiary);font-weight:400}
.ct-sort.active .ct-sort-ic{color:var(--text)}
.ct-table td{padding:5px 8px;vertical-align:middle;white-space:nowrap}
.ctb>tr{cursor:pointer}
.ctb>tr:hover>td{background:#fafaf8}
.ctb>tr:first-child>td{border-top:2px solid var(--border-strong)}
.ctr-expand>td{background:#fbfbfa;padding:6px 14px 14px;cursor:default;white-space:normal}
.ctr-expand .contract-detail{display:block!important;padding:8px 0 0;border-top:none}
.ct-td-txt{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ct-table td.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.ct-ops{white-space:nowrap}
.ct-it-brand{min-width:58px;white-space:nowrap}
.ct-it-name{min-width:110px;white-space:nowrap}
.ct-it-model{min-width:150px;white-space:nowrap}
.ct-table td.nw{white-space:nowrap}
.ct-table td.ct-td-co{min-width:150px;white-space:nowrap;font-weight:400}
.ct-table td.ct-td-co b{font-weight:600}
.item-row{display:flex;gap:8px;align-items:center;font-size:13px;padding:3px 0;border-bottom:1px solid #f2f4f7}
.item-row:last-child{border-bottom:none}
.item-row .item-brand{min-width:60px;font-weight:600;color:#2d4a75}
.item-row .item-name{flex:1;color:#3d4654}
.item-row .item-qty{color:#6b7280;min-width:40px}
.item-row .item-price{font-weight:600;color:#0f6b46;min-width:80px;text-align:right}
.item-row .item-tag{font-size:11px;background:#eef1f5;color:#6b7280;border-radius:4px;padding:1px 5px}
.item-row .item-unit{color:#8a93a3;font-size:12px;min-width:96px;text-align:right}
/* cs16：子项弹窗主项行 / 汇总表 / 确认行合计 / 月历 */
.main-item-row{display:flex;gap:6px;align-items:center;margin-bottom:8px;padding:6px 8px;background:#f7faf8;border:1px solid #dcefe4;border-radius:8px}
.main-item-row input{flex:1;min-width:0}
.main-item-row .item-tag{background:#dcefe4;color:#0f6b46;white-space:nowrap}
.sum-table{width:100%;border-collapse:collapse;font-size:13px;margin:6px 0 2px}
.sum-table th,.sum-table td{border:1px solid #e5e8ec;padding:5px 8px;text-align:left}
.sum-table th{background:#f5f7fa;color:#5b6472;font-weight:500}
.sum-table tfoot td{background:#f7faf8;font-weight:600}
.wf-amount{font-size:12px;color:#0f6b46;font-weight:600;white-space:nowrap}
.cstep.overpay{box-shadow:inset 0 0 0 1.5px #d9880f}
.ev-contbar{height:12px;border-radius:3px;margin:2px 0;opacity:.55}
.cal-toolbar{display:flex;gap:8px;align-items:center;margin-bottom:8px}
.items-editor{display:flex;flex-direction:column;gap:6px;margin-bottom:6px}
.item-edit-row{display:flex;gap:6px;align-items:center}
.item-edit-row input{flex:1;min-width:0}
.item-edit-row input[data-it=brand]{flex:0 0 80px}
.item-edit-row input[data-it=quantity]{flex:0 0 60px}
.item-edit-row input[data-it=sale_price]{flex:0 0 90px}
.contract-filters{display:flex;gap:8px;align-items:center;flex-wrap:wrap;row-gap:6px}
.contract-filters .mf-hint{color:var(--text-tertiary);font-size:12px;white-space:nowrap;line-height:1.5}
.contract-filters select{min-width:110px}
.term-chip{display:inline-block;padding:3px 10px;border-radius:12px;background:#f0f4fa;color:#2d4a75;font-size:12px;white-space:nowrap}.term-chip b{font-weight:600;margin-left:4px}.term-chip.st-done{background:#e6f5ee;color:#0f6b46}.term-chip.st-over{background:#fdecec;color:#b3261e}.term-chip.st-soon{background:#fdf3e3;color:#9a6b1a}.term-chip.st-due{background:#eaf2ff;color:#1d4ed8}.term-chip.st-wait{background:#f3f4f6;color:#7a828e}.term-edit{padding:3px 10px;font-size:12px;min-height:0;border-radius:12px;margin-left:4px;flex:0 0 auto}.term-empty{font-size:12px;color:#9a6b1a;background:#fdf3e3;border:1px dashed #e5c988;padding:3px 10px;border-radius:12px}
.case-chip{display:inline-block;padding:3px 10px;border-radius:6px;background:#eef1f5;color:#3d4654;font-size:13px}
.contract-import-list{display:flex;flex-direction:column;gap:10px}
.contract-import-row{padding:14px 16px}
.ci-main{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.ci-main strong{font-size:15px}
.ci-status{font-size:12px;padding:1px 8px;border-radius:10px}
.ci-status.pending{background:#fdf3e3;color:#9a6b1a}
.ci-status.ok{background:#e6f5ee;color:#0f6b46}
.ci-status.reject{background:#fdecec;color:#b3261e}
.ci-meta{margin-bottom:8px}
.ci-actions{display:flex;gap:8px}
/* cs20：同合同号合并展示 */
.ct-cnt{font-size:12px;padding:1px 8px;border-radius:10px;background:#e8f0fb;color:#2b5fa8;white-space:nowrap}
.ci-items{display:flex;flex-direction:column;gap:4px;margin:2px 0 8px;padding:8px 10px;background:#f8f9fb;border:1px solid #e7eaf0;border-radius:8px}
.ci-item{display:flex;align-items:center;gap:8px;font-size:13px;color:#3d4654}
.ci-item .ci-brand{flex:none;padding:0 6px;border-radius:5px;background:#eef4ee;color:#0f6b46;font-size:12px}
.ci-item em{font-style:normal;color:#8a93a3;font-size:12px}
.ci-item b{margin-left:auto;font-weight:600;color:#1f2937}
.tabs.sub{margin-top:8px}
.terms-editor{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}
.term-row{display:flex;gap:8px;align-items:center}
.term-row select,.term-row input{flex:1;min-width:0}
.term-row select:disabled{background:#f3f5f8;color:#5b6472;cursor:not-allowed}
.term-pw{flex:0 0 auto;display:inline-flex;align-items:center;gap:4px;font-size:12px;color:#5b6472;white-space:nowrap;cursor:pointer}
.term-pw input{flex:0 0 auto!important;width:auto}
.term-no{width:22px;text-align:center;font-weight:600;color:#2d4a75}
.term-amt{flex:0 0 auto;min-width:86px;max-width:110px;text-align:right;font-size:12px;font-weight:600;color:#1b7f4d;background:#eef7f2;padding:4px 8px;border-radius:8px;white-space:nowrap}
@media(max-width:1180px){.contract-grid{grid-template-columns:repeat(4,1fr)}.contract-grid b{white-space:normal}}@media(max-width:760px){.contract-grid{grid-template-columns:repeat(2,1fr)}}

/* ═══ 合同履约步骤条（2026-09-16） ═══ */
.contract-steps{margin-top:12px;padding-top:10px;border-top:1px dashed #e5e8ec}
.cs-head{font-size:12px;margin-bottom:6px;display:flex;align-items:center;justify-content:space-between;gap:10px}.cs-more{border:0;background:none;color:#2862ad;font-size:12px;padding:2px 4px;cursor:pointer}.cs-more:hover{text-decoration:underline}
.cstepper{display:flex;flex-wrap:nowrap;align-items:center;gap:3px 1px;overflow-x:auto;padding-bottom:2px}
.cstep{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:12px;border:1px solid #e2e6ec;background:#f6f8fa;color:#5b6472;font-size:12px;cursor:pointer;line-height:1.3;white-space:nowrap;flex:0 0 auto}.cstep-body{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15;min-width:0}.cstep-name{white-space:nowrap}.cstep-date{font-style:normal;font-size:10px;line-height:1.2;white-space:nowrap;color:#8a94a3;font-variant-numeric:tabular-nums}.cstep.done .cstep-date{color:#0f6b46}.cstep.cur .cstep-date{color:#1d4ed8}.cstep-date.plan{color:#2862ad;opacity:.85}.cstep-date.plan.over{color:#b3261e;opacity:1;font-weight:600}
.cstep i{font-style:normal;width:15px;height:15px;border-radius:50%;border:1px solid #c3cad4;display:inline-flex;align-items:center;justify-content:center;font-size:10px;line-height:1;background:#fff;flex:0 0 auto}
.cstep.done{background:#e6f5ee;border-color:#bfe3d2;color:#0f6b46}
.cstep.done i{border-color:#0f6b46;background:#0f6b46;color:#fff}
.cstep.cur{background:#eaf2ff;border-color:#7ea6e0;color:#1d4ed8;font-weight:600}
.cstep.cur i{border-color:#7ea6e0;background:#fff}
.cstep.skip{background:#f3f4f6;border-color:#d9dde3;color:#9aa3af}
.cstep.skip i{border-color:#d9dde3;background:#f3f4f6;color:#9aa3af}
.cstep:hover{border-color:#7ea6e0}
.cstep-arrow{color:#c3cad4;font-size:10px;flex:0 0 auto}
.check-row{display:flex;align-items:center;gap:6px;margin-top:10px;font-size:14px;color:#3d4654;cursor:pointer}
.form-grid label.check-row{align-self:end;margin:0 0 10px}
label.ck-line{grid-column:1/-1;display:flex;align-items:center;gap:9px;margin:4px 0 2px;padding:10px 12px;border:1px solid #d7e0ec;border-radius:8px;background:#f8fafd;font-size:13px;color:#3d4654;cursor:pointer;user-select:none}
label.ck-line:hover{border-color:#7ea6e0;background:#f2f7fd}
label.ck-line input[type=checkbox]{width:16px;height:16px;min-height:0;padding:0;border:1px solid #9fb2ca;border-radius:4px;accent-color:#2862ad;flex:0 0 auto;cursor:pointer;appearance:auto}
label.ck-line span{line-height:1.4}


/* ═══ 合同履约步骤定制交互（2026-09-16） ═══ */
.cstep.bad{border-color:#e5a0a0;background:#fdecec;color:#b3261e}
.cstep.bad i{border-color:#e5a0a0;background:#fdecec;color:#b3261e}
.cstep.warn{border-color:#e5c988;background:#fdf3e3;color:#9a6b1a}
.cstep.warn i{border-color:#e5c988;background:#fdf3e3;color:#9a6b1a}
.cstep-date.bad{color:#b3261e;font-weight:600}
.cstep-date.due{color:#b3261e;font-weight:600}

/* 款项核对弹窗 */
.pay-expect{background:#f6f8fa;border:1px solid #e2e6ec;border-radius:10px;padding:12px 14px;margin-bottom:12px;display:flex;flex-direction:column;gap:4px}
.pay-expect span{font-size:12px;color:var(--text-secondary,#64748b)}
.pay-expect b{font-size:20px;color:#0f6b46}
.pay-expect small{font-size:12px;color:#8a94a3}
.pay-actions{display:flex;gap:10px;margin-top:14px}
.pay-ok{flex:1;padding:10px 14px;border:1px solid #0f6b46;background:#0f6b46;color:#fff;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer}
.pay-ok:hover{background:#0c5b3a}
.pay-bad{flex:1;padding:10px 14px;border:1px solid #e5a0a0;background:#fdecec;color:#b3261e;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer}
.pay-bad:hover{background:#fadcdc}
#payNoteRow{margin-top:12px}


/* ═══ 合同履约提醒表（工作台） ═══ */
.contract-reminders .rem-badge{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:600}
.contract-reminders .rem-badge.danger{background:#fdecec;color:#b3261e}
.contract-reminders .rem-badge.warn{background:#fdf3e3;color:#9a6b1a}
.contract-reminders tr.rem-danger{background:#fff7f7}
.contract-reminders .rem-go{padding:3px 10px;font-size:12px;min-height:0;border-radius:8px}
.rem-filter{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--notion-line,#efefec);background:#fbfbfa}
.rem-filter-label{font-size:12px;color:var(--notion-muted,#787774);font-weight:500}
.rem-filter select{height:32px;padding:4px 10px;border:1px solid var(--notion-line,#dededb);border-radius:6px;background:#fff;font-size:13px;color:var(--notion-text,#37352f)}
.rem-filter-count{font-size:12px;color:var(--notion-muted,#787774)}
.rem-table{min-width:820px}
.rem-table .rem-title{font-weight:500;font-size:13px;color:var(--notion-text,#37352f)}
.rem-table .rem-sub{font-size:11px;color:var(--notion-muted,#787774);margin-top:2px}
.rem-table .rem-owner{white-space:nowrap}
.rem-table .rem-date{white-space:nowrap;font-variant-numeric:tabular-nums}
.rem-table .rem-days-cell{white-space:nowrap}
.rem-table .rem-amount{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;font-weight:500}
.rem-days{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;font-weight:600}
.rem-days.bad{background:#fdecec;color:#b3261e}
.rem-days.ok{background:#e8f2eb;color:#1c7a43}
@media(max-width:760px){.rem-filter{flex-wrap:wrap}.rem-table{min-width:760px}}

/* ═══ 月历安装/培训日程颜色 ═══ */
.cal-filter{margin-bottom:8px}
.day .event.ev-task{background:rgba(51,126,169,.11);color:#3d6f8f}
.day .event.ev-install{background:#e6f5ee;color:#0f6b46}
.day .event.ev-train{background:#fdf3e3;color:#9a6b1a}
.day .event.ev-arrive{background:#ece9fb;color:#5b4bc4}
.day .event.ev-done{background:#f3f4f6;color:#9aa3af;text-decoration:line-through}
.event.ev-fin{opacity:.78;font-weight:600}
.event.ev-fin.ev-contbar{opacity:.4}

/* 款项核对弹窗：合同总额 × 比例 算式 */
.pay-expect .pay-calc{display:block;font-size:12px;color:#51607a;background:#eef2f8;border-radius:6px;padding:4px 8px}
.pay-expect .pay-calc:first-child{margin-top:2px}

/* cs22：预测看板子页签 + 拿单概率分析 */
.forecast-tabs{margin-bottom:12px}
.prob-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:12px 0;flex-wrap:wrap}
.prob-chips{display:flex;gap:8px;flex-wrap:wrap}
.prob-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:999px;padding:7px 13px;background:var(--surface);cursor:pointer;font-size:13px;color:var(--text)}
.prob-chip b{font-size:13px}
.prob-chip small{font-size:11px;color:var(--text-secondary);font-weight:400}
.prob-chip:hover{border-color:var(--border-strong)}
.prob-chip.active{border-color:var(--text);box-shadow:inset 0 0 0 1px var(--text);font-weight:600}
.prob-chip.pc-high{border-color:#bfe3d2;background:#e6f5ee}.prob-chip.pc-high b{color:#0f6b46}
.prob-chip.pc-mid{border-color:#e5c988;background:#fdf3e3}.prob-chip.pc-mid b{color:#9a6b1a}
.prob-chip.pc-low{border-color:#e5a0a0;background:#fdecec}.prob-chip.pc-low b{color:#b3261e}
.prob-chip.pc-none{border-color:var(--border);background:var(--surface)}.prob-chip.pc-none b{color:var(--text-tertiary)}
.prob-month{height:36px;border:1px solid var(--border-strong);border-radius:8px;padding:4px 10px;background:#fff;font-size:13px}
.prob-table{min-width:960px}
.prob-table th{white-space:nowrap}
.prob-table td{vertical-align:middle}
.prob-table td small{display:block;margin-top:2px;color:var(--text-tertiary);font-size:11px}
.prob-table td.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.prob-table tbody tr{cursor:pointer}
.prob-table tbody tr:hover{background:#f5f8fc}
.prob-table .prob-chip{cursor:default;padding:4px 10px;font-size:12px}
.pc-cust{font-weight:550;color:var(--notion-text,#37352f);font-size:13px}
.pc-opp{font-size:11px;color:var(--notion-muted,#787774);margin-top:2px;font-variant-numeric:tabular-nums}
.pc-prod{color:var(--notion-text,#37352f);font-size:12.5px}
.pc-amt{font-weight:600;font-size:13px}
.pc-month{white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--notion-text,#37352f)}
.pc-cat{display:inline-block;padding:2px 9px;border-radius:10px;background:#f3f4f6;color:#5f5e5a;font-size:11.5px;white-space:nowrap}
.pc-next{font-size:12px;color:var(--notion-muted,#787774)}
.pc-next small{display:block;margin-top:2px;font-size:11px;color:var(--notion-faint,#9b9a97)}
.prob-table tbody tr:hover .pc-cust{color:var(--notion-blue,#337ea9)}
@media(max-width:980px){.prob-bar{flex-direction:column;align-items:stretch}.prob-month{width:100%}}

/* cs27：履约确认明细折叠 */
.cu-detail{margin:8px 0 2px}
.cu-detail summary{cursor:pointer;font-size:13px;color:#1c6dd0;padding:4px 0;user-select:none}
.cu-detail .table-wrap{margin:8px 0 4px;max-height:340px;overflow:auto;border:1px solid var(--border);border-radius:8px}
.cu-detail .prob-table td,.cu-detail .prob-table th{padding:6px 10px;font-size:12.5px}

/* ═══ cs44：等待三丰回复行按钮联动 ═══ */
.workflow-reply{flex-wrap:wrap}
.wr-actions{display:inline-flex;align-items:center;gap:6px}

/* ═══ cs46：履约确认新值行内校验错误 ═══ */
.cu-nv.cu-err{border-color:#d3455b;box-shadow:0 0 0 2px rgba(211,69,91,.14);background:#fff7f7}
.cu-err-msg{display:block;color:#b3261e;font-size:11px;line-height:1.4;margin-top:2px;font-weight:600}

/* ════════════════════════════════════════════════════════════════════════
   cs49：移动端补充适配（cs39-cs48 新增组件）  2026-09-19
   -----------------------------------------------------------------------
   背景：2026-09-15 的响应式层（上方）只覆盖了当时的组件；cs39 起的
   合同表格视图、状态日报各子页、履约确认、款项核对、步骤条、筛选多选
   等新组件未纳入。CDP 真机模拟（390px）实测两类问题：
   ① 触控目标 <44px：.ct-sort 表头排序、.secondary 小按钮（.info-edit/
     .term-edit/.rem-go/.item-edit/.case-info-edit/.cs-more 等，均被各自
     padding:2~3px 覆盖成 19~26px 高）、.cstep 步骤条 chip。
   ② contracts-cards 视图横向溢出被裁：.contract-card{overflow:hidden}
     叠加 .ct-summary{flex:0 0 auto;nowrap}，标题右侧金额/进度/报警徽章
     被裁掉（实测 447~476px 宽 vs 容器 370px）。
   整页无横向滚动（hasHScroll=False），宽表均已由 .table-wrap/.table-scroll
   横向滚动承载 —— 本层只补齐触控目标与卡片视图的换行。
   ════════════════════════════════════════════════════════════════════════ */
@media (max-width: 760px) {

  /* 1. 合同卡片视图：标题与元信息（金额/进度/报警）换行，不再被 overflow 裁掉 */
  .contract-head { flex-wrap: wrap; gap: 8px 12px; padding: 12px 14px; }
  .contract-head strong { font-size: 14px; white-space: normal; }
  .ct-title { flex: 1 1 100%; }
  .ct-summary { flex: 1 1 auto; flex-wrap: wrap; gap: 6px 12px; justify-content: flex-start; }
  .ct-meta, .ct-price, .ct-prog, .ct-alert, .ct-no, .ct-src { white-space: normal; }
  .contract-detail { padding: 2px 14px 14px; }

  /* 2. 合同表格视图：表头排序按钮抬到可点高度（表头本身 sticky，加高不影响横向滚动） */
  .ct-sort { min-height: 44px !important; padding: 6px 9px !important; }
  .ct-table th { padding: 0; }               /* 让 .ct-sort 撑满单元格 */
  .ct-table th.ct-th-plain { padding: 8px 9px; min-height: 44px; }

  /* 3. 合同表格内的操作按钮（✎ 编辑 / 点行展开）抬到可点高度 */
  .ct-ops .info-edit, .ct-title .info-edit, .case-card-top .case-info-edit {
    min-height: 40px; padding: 8px 12px; font-size: 13px;
  }

  /* 4. 付款条款/款项/导入行里的小按钮统一抬到 ≥40px。
        注意：这些按钮的 base 规则用 padding:2~3px 且部分带 min-height:0
        （如 .contract-reminders .rem-go、.term-edit），双类选择器优先级更高，
        故这里必须用 !important 强制覆盖。 */
  .term-edit, .term-del, .rem-go, .item-edit, .item-del, .info-edit,
  .contract-items .item-edit, .contract-import-row .secondary,
  .contract-reminders .rem-go, .ct-title .info-edit, .ct-ops .info-edit,
  .case-card-top .case-info-edit {
    min-height: 40px !important;
    padding: 8px 12px !important;
    font-size: 13px !important;
  }
  /* 条款编辑器里的「加一期」与删除按钮 */
  .terms-editor .secondary { min-height: 40px !important; padding: 8px 12px !important; }
  /* 合同表格「恢复默认」按钮（列选择器内，实测 19px 高） */
  [data-ctcols-reset] { min-height: 40px !important; padding: 8px 12px !important; font-size: 13px !important; }

  /* 5. 履约进度步骤条：chip 抬到可点高度（横向滚动条内用 40px，避免过高） */
  .cstep { min-height: 40px !important; padding: 6px 11px !important; }
  .cs-more { min-height: 40px !important; padding: 8px 10px !important; font-size: 13px !important; }

  /* 6. 工作台「多选筛选」按钮 + 预测看板概率 chip + 付款/案件 chip */
  .mfilter-toggle { min-height: 44px; padding: 9px 14px; }
  .prob-chip { min-height: 44px; padding: 10px 14px; }
  .term-chip, .case-chip { min-height: 36px; padding: 8px 12px; }

  /* 7. 状态日报子页：操作按钮（确认/退回/转延期/成功/失败）允许换行 + 抬触控目标 */
  .workflow-confirm, .workflow-reply { gap: 8px; }
  .workflow-confirm .primary, .workflow-confirm .secondary,
  .workflow-reply .primary, .workflow-reply .secondary,
  .wr-actions .primary, .wr-actions .secondary,
  .workflow-judge .primary, .workflow-judge .secondary {
    min-height: 44px; padding: 9px 13px; font-size: 13px;
  }
  .wr-actions { flex-wrap: wrap; gap: 8px; }
  .contract-fields input { min-width: 0; width: 100%; }

  /* 8. 履约确认页：行内「新值」编辑控件抬到可点高度 */
  .cu-nv { min-height: 40px; padding: 7px 10px; font-size: 13px; }
  .cu-nv-txt { width: 100%; }

  /* 9. 款项核对弹窗按钮 */
  .pay-ok, .pay-bad { min-height: 48px; font-size: 15px; }
}
@media (max-width: 430px) {
  .ct-summary { gap: 6px 8px; }
  .contract-head { padding: 11px 12px; }
  .contract-detail { padding: 2px 12px 12px; }
}

/* ═══ cs50：时间段日历拖选 + 子项批量增加 ═══ */
.rpick{position:relative}
.rpick-box{width:100%;min-height:38px;padding:7px 10px;border:1px solid var(--border-strong);border-radius:8px;background:#fff;text-align:left;font-size:13px;cursor:pointer;color:var(--text)}
.rpick-box:hover{border-color:#bdbcb5}
.rpick-ph{color:var(--text-tertiary,#9aa3af)}
.rpick-panel{position:absolute;z-index:70;top:calc(100% + 6px);left:0;width:286px;max-width:calc(100vw - 60px);background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 12px 32px rgba(15,23,42,.16);padding:10px}
.rpick-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;font-size:13px}
.rpick-nav{border:0;background:none;font-size:16px;cursor:pointer;padding:2px 10px;color:var(--text)}
.rpick-nav:hover{background:#f1f3f6;border-radius:6px}
.rpick-week,.rpick-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.rpick-week span{text-align:center;font-size:11px;color:var(--text-tertiary,#8a93a3);padding:2px 0}
.rpick-day{border:0;background:none;text-align:center;padding:6px 0;border-radius:6px;cursor:pointer;font-size:12.5px;color:var(--text);touch-action:manipulation}
.rpick-day:hover{background:#f1f3f6}
.rpick-day.rpick-today{box-shadow:inset 0 0 0 1px #b9c2cf}
.rpick-day.rpick-in{background:#e8f0fb;border-radius:0}
.rpick-day.rpick-edge{background:#2d66b2;color:#fff;font-weight:600}
.rpick-foot{margin-top:7px;font-size:11px;color:var(--text-tertiary,#8a93a3);line-height:1.5}
/* cs53：共享日历浮层（全局唯一，点击输入框弹出/选完自动收起/点外收起） */
.rpick-pop{position:fixed;z-index:3000;width:286px;max-width:calc(100vw - 20px);background:#fff;border:1px solid var(--border);border-radius:10px;box-shadow:0 16px 40px rgba(15,23,42,.22);padding:10px}
.done-txt{color:#1b7f4d;font-weight:600}
/* cs53：推定完成（日期待补）黄色标识 + 必填缺失徽章 */
.cstep.pinf{border-color:#e6c26a!important;background:#fdf6e3!important}
.cstep.pinf .cstep-name::after{content:'待补';font-size:10px;color:#a06e00;background:#f7e7b5;border-radius:8px;padding:0 6px;margin-left:4px}
.cstep-date.inf{color:#a06e00;background:#f7e7b5;border-radius:8px;padding:0 6px;font-size:11px}
.inf-txt{color:#a06e00;font-weight:600}
.ct-alert.miss{background:#fdf2d7;color:#8a5a00;border:1px solid #ecd9a0}
/* cs53：审批页履约校验徽章 */
.ci-prog{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 2px;font-size:12px}
.ci-ok{color:#1b7f4d;background:#e6f5ee;border-radius:8px;padding:2px 10px}
.ci-bad{color:#b3261e;background:#fdecea;border-radius:8px;padding:2px 10px;font-weight:600}
.ci-warn{color:#8a5a00;background:#fdf2d7;border-radius:8px;padding:2px 10px}
.item-add-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.item-add-panel{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--text)}
.item-add-panel input{width:56px;min-height:34px}

/* ═══ cs51：履约联动——悬停提示 / 质保状态色 / 详情网格 ═══ */
#gtip{position:fixed;z-index:9999;max-width:300px;background:#1f2933;color:#fff;padding:9px 12px;border-radius:9px;font-size:12px;line-height:1.65;box-shadow:0 8px 24px rgba(15,23,42,.28);pointer-events:none;white-space:normal;word-break:break-all}
#gtip b{color:#ffd58a}
.cstep.wexpired{opacity:.45;filter:grayscale(.55)}
.cstep.wexpired .cstep-date{color:var(--text-tertiary,#8a93a3)}
.fact-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px 18px;margin:2px 0 8px}
.fact-row{display:flex;gap:8px;font-size:12px;line-height:1.6;min-width:0}
.fact-row.full{grid-column:1/-1}
.fact-row.full .fact-v{white-space:normal}
.fact-k{flex:0 0 auto;color:var(--text-tertiary,#8a93a3)}
.fact-v{color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:760px){.fact-grid{grid-template-columns:repeat(2,1fr)}}
.fact-row.ok .fact-v{color:#1b7f4d;font-weight:600}
.fact-row.dim .fact-v{color:var(--text-tertiary,#8a93a3)}
