*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#f8fafc;--surface:#fff;--surface2:#f1f5f9;--border:#e2e8f0;--text:#1e293b;--text2:#64748b;--text3:#94a3b8;--primary:#3b82f6;--primary-hover:#2563eb;--danger:#ef4444;--success:#10b981;--warning:#f59e0b;--radius:10px;--shadow:0 1px 3px #00000014, 0 1px 2px #0000000a;--shadow-md:0 4px 16px #0000001a}body{background:var(--bg);color:var(--text);font-family:-apple-system,PingFang SC,Microsoft YaHei,BlinkMacSystemFont,sans-serif;font-size:14px;line-height:1.5}.app{flex-direction:column;min-height:100vh;display:flex}.app-header{background:var(--surface);border-bottom:1px solid var(--border);z-index:100;height:56px;box-shadow:var(--shadow);justify-content:space-between;align-items:center;padding:0 24px;display:flex;position:sticky;top:0}.header-left{align-items:center;gap:12px;display:flex}.header-right{align-items:center;gap:10px;display:flex}.app-title{color:var(--text);align-items:center;gap:8px;font-size:18px;font-weight:700;display:flex}.app-icon{font-size:22px}.order-summary{color:var(--text2);background:var(--surface2);border-radius:20px;padding:2px 10px;font-size:13px}.urgent-badge{color:#fff;background:var(--danger);border-radius:20px;padding:2px 10px;font-size:12px;font-weight:600;animation:2s infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.7}}.app-nav{background:var(--surface);border-bottom:1px solid var(--border);gap:4px;padding:0 24px;display:flex}.nav-tab{color:var(--text2);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:12px 16px;font-family:inherit;font-size:14px;transition:color .15s,border-color .15s;display:flex}.nav-tab:hover{color:var(--primary)}.nav-tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}.app-main{flex:1;width:100%;max-width:1400px;margin:0 auto;padding:24px}.btn{cursor:pointer;white-space:nowrap;border:none;border-radius:8px;align-items:center;gap:6px;padding:8px 16px;font-family:inherit;font-size:14px;font-weight:500;transition:all .15s;display:inline-flex}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover)}.btn-ghost{background:var(--surface2);color:var(--text2);border:1px solid var(--border)}.btn-ghost:hover{background:var(--border);color:var(--text)}.btn-danger{color:var(--danger);background:#fef2f2;border:1px solid #fecaca}.btn-danger:hover{background:var(--danger);color:#fff}.btn-sm{padding:6px 12px;font-size:13px}.btn-revision{color:#a855f7;background:#f5f3ff;border:1px solid #e9d5ff}.btn-revision:hover{color:#fff;background:#a855f7;border-color:#a855f7}.icon-btn{border:1px solid var(--border);background:var(--surface);width:34px;height:34px;color:var(--text2);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;transition:all .15s;display:inline-flex}.icon-btn:hover{background:var(--surface2);color:var(--text)}.section{margin-bottom:28px}.section-title{color:var(--text);align-items:center;gap:8px;margin-bottom:12px;font-size:15px;font-weight:600;display:flex}.empty-hint{color:var(--text3);text-align:center;padding:32px 0;font-size:13px}.badge{border-radius:20px;padding:1px 8px;font-size:11px;font-weight:600;display:inline-block}.badge-urgent{color:var(--danger);background:#fef2f2}.stats-grid{grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:28px;display:grid}@media (width<=768px){.stats-grid{grid-template-columns:repeat(2,1fr)}}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);align-items:center;gap:16px;padding:20px;display:flex}.stat-num{font-size:26px;font-weight:700;line-height:1}.stat-label{color:var(--text2);margin-top:4px;font-size:12px}.cards-list{flex-direction:column;gap:10px;display:flex}.order-card{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--primary);border-radius:var(--radius);cursor:pointer;box-shadow:var(--shadow);padding:14px 16px;transition:box-shadow .15s,transform .1s}.order-card:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.order-card-top{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.order-card-title{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.order-number{color:var(--text2);font-family:monospace;font-size:12px}.days-badge{white-space:nowrap;border-radius:20px;padding:2px 10px;font-size:12px;font-weight:600}.order-desc{color:var(--text);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin-bottom:8px;font-size:14px;display:-webkit-box;overflow:hidden}.order-card-bottom{align-items:center;gap:12px;display:flex}.order-meta{color:var(--text3);font-size:12px}.order-price{color:var(--success);font-size:13px;font-weight:600}.progress-mini{background:var(--border);border-radius:4px;flex:1;height:4px;overflow:hidden}.progress-bar-mini{border-radius:4px;height:100%;transition:width .3s}.gantt-nav{align-items:center;gap:10px;margin-bottom:16px;display:flex}.gantt-range{text-align:center;flex:1;font-size:15px;font-weight:600}.gantt-scroll-container{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);overflow-x:auto}.gantt-inner{flex-direction:column;display:flex}.gantt-header{border-bottom:2px solid var(--border);background:var(--surface);z-index:10;display:flex;position:sticky;top:0}.gantt-day-header{border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;padding:8px 2px;display:flex}.gantt-day-header.today{background:#eff6ff}.gantt-day-header.weekend{background:#f8fafc}.gantt-day-header.today .day-month{color:var(--primary);font-weight:700}.day-month{font-size:11px;font-weight:600}.day-week{color:var(--text3);font-size:10px}.gantt-row{border-bottom:1px solid var(--border);align-items:center;transition:background .1s;display:flex}.gantt-row.alt{background:#fafbfc}.gantt-row:hover{background:#f0f7ff}.gantt-label{cursor:pointer;border-right:2px solid var(--border);background:var(--surface);z-index:5;flex-direction:column;flex-shrink:0;justify-content:center;padding:6px 12px;display:flex;position:sticky;left:0}.gantt-row.alt .gantt-label{background:#fafbfc}.gantt-row:hover .gantt-label{background:#f0f7ff}.gantt-label-num{color:var(--text3);font-family:monospace;font-size:10px}.gantt-label-desc{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;overflow:hidden}.gantt-grid{flex-shrink:0;height:100%;display:flex;position:relative}.gantt-cell{border-right:1px solid #f0f4f8;flex-shrink:0;height:100%}.gantt-cell.weekend{background:#f8fafc}.gantt-cell.today{background:#eff6ff}.gantt-bar{cursor:pointer;align-items:center;height:28px;transition:filter .15s,transform .1s;display:flex;position:absolute;top:50%;overflow:hidden;transform:translateY(-50%)}.gantt-bar:hover{filter:brightness(1.1);transform:translateY(-50%)scaleY(1.08)}.gantt-bar-progress{background:#ffffff4d;height:100%;transition:width .3s;position:absolute;top:0;left:0}.gantt-bar-label{z-index:1;color:#fff;text-shadow:0 1px 2px #0003;white-space:nowrap;padding:0 8px;font-size:11px;font-weight:600;position:relative}.gantt-legend{flex-wrap:wrap;align-items:center;gap:16px;margin-top:12px;display:flex}.legend-item{color:var(--text2);align-items:center;gap:6px;font-size:12px;display:flex}.legend-dot{border-radius:3px;flex-shrink:0;width:12px;height:12px}.calendar-nav{align-items:center;gap:10px;margin-bottom:16px;display:flex}.calendar-title{text-align:center;flex:1;font-size:18px;font-weight:700}.calendar-layout{align-items:flex-start;gap:20px;display:flex}.calendar-grid-wrapper{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);flex:1;overflow:hidden}.calendar-weekdays{background:var(--surface2);border-bottom:1px solid var(--border);grid-template-columns:repeat(7,1fr);display:grid}.calendar-weekday{text-align:center;color:var(--text2);padding:10px;font-size:13px;font-weight:600}.calendar-weekday.weekend{color:var(--danger)}.calendar-days{grid-template-columns:repeat(7,1fr);display:grid}.calendar-cell{border-right:1px solid var(--border);border-bottom:1px solid var(--border);cursor:pointer;min-height:80px;padding:6px;transition:background .1s;position:relative}.calendar-cell:nth-child(7n){border-right:none}.calendar-cell:hover{background:#f0f7ff}.calendar-cell.empty{cursor:default;background:#fafbfc}.calendar-cell.weekend{background:#fafbfc}.calendar-cell.today .calendar-day-num{background:var(--primary);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;display:flex}.calendar-cell.selected{box-shadow:inset 0 0 0 2px var(--primary);background:#eff6ff}.calendar-day-num{justify-content:center;align-items:center;width:26px;height:26px;font-size:13px;font-weight:600;display:flex}.calendar-dots{flex-wrap:wrap;gap:2px;margin-top:4px;display:flex}.calendar-dot{border-radius:50%;width:6px;height:6px}.calendar-dot-more{color:var(--text3);font-size:9px;line-height:6px}.calendar-count{background:var(--surface2);color:var(--text2);border-radius:10px;padding:1px 5px;font-size:10px;font-weight:700;position:absolute;bottom:4px;right:4px}.calendar-day-detail{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:300px;box-shadow:var(--shadow);flex-shrink:0;overflow:hidden}.day-detail-header{border-bottom:1px solid var(--border);background:var(--surface2);justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.day-detail-header h4{font-size:15px;font-weight:600}.day-detail-list{flex-direction:column;gap:10px;max-height:500px;padding:12px;display:flex;overflow-y:auto}.day-order-item{border:1px solid var(--border);border-left:4px solid var(--primary);cursor:pointer;border-radius:8px;padding:10px 12px;transition:box-shadow .15s}.day-order-item:hover{box-shadow:var(--shadow-md)}.day-order-top{justify-content:space-between;align-items:center;margin-bottom:4px;display:flex}.day-order-bottom{align-items:center;gap:10px;margin-top:6px;display:flex}.chart-hint{color:var(--text3);margin-bottom:12px;font-size:12px}.chart-container{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:20px;padding:16px}.chart-tooltip{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-md);border-radius:8px;padding:10px 14px;font-size:13px}.chart-tooltip-label{margin-bottom:6px;font-weight:600}.chart-row-2{grid-template-columns:1fr 1fr;gap:20px;display:grid}@media (width<=900px){.chart-row-2{grid-template-columns:1fr}}.chart-half{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px}.platform-bars{flex-direction:column;gap:12px;margin-top:8px;display:flex}.platform-bar-row{align-items:center;gap:10px;display:flex}.platform-name{color:var(--text);min-width:50px;font-size:13px}.platform-bar-bg{background:var(--border);border-radius:4px;flex:1;height:8px;overflow:hidden}.platform-bar-fill{border-radius:4px;height:100%;transition:width .5s}.platform-count{text-align:right;min-width:24px;font-size:13px;font-weight:600}.modal-overlay{z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0006;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-box{background:var(--surface);border-radius:14px;flex-direction:column;width:100%;max-width:580px;max-height:90vh;animation:.2s ease-out modalIn;display:flex;box-shadow:0 20px 60px #0003}@keyframes modalIn{0%{opacity:0;transform:translateY(20px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:20px 24px;display:flex}.modal-header h2{font-size:18px;font-weight:700}.modal-body{flex-direction:column;flex:1;gap:14px;padding:20px 24px;display:flex;overflow-y:auto}.form-row{flex-direction:column;gap:6px;display:flex}.form-row label{color:var(--text2);font-size:13px;font-weight:600}.form-row input,.form-row select,.form-row textarea{border:1px solid var(--border);width:100%;color:var(--text);background:var(--surface);resize:vertical;border-radius:8px;outline:none;padding:9px 12px;font-family:inherit;font-size:14px;transition:border-color .15s,box-shadow .15s}.form-row input:focus,.form-row select:focus,.form-row textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px #3b82f626}.range-input{cursor:pointer;padding:4px 0}.form-grid-2{grid-template-columns:1fr 1fr;gap:14px;display:grid}.modal-footer{border-top:1px solid var(--border);background:var(--surface2);border-radius:0 0 14px 14px;align-items:center;gap:10px;padding:16px 24px;display:flex}.spacer{flex:1}.notice-bar{border-radius:var(--radius);align-items:center;gap:10px;margin-bottom:20px;padding:10px 16px;font-size:13px;display:flex}.notice-warning{color:#92400e;background:#fffbeb;border:1px solid #fde68a}.notice-error{color:#991b1b;background:#fef2f2;border:1px solid #fecaca}.loading-screen{color:var(--text3);flex-direction:column;justify-content:center;align-items:center;gap:16px;padding:80px 0;font-size:14px;display:flex}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.sync-status{border-radius:20px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;font-weight:500;display:flex}.sync-status.online{color:#166534;background:#f0fdf4;border:1px solid #bbf7d0}.sync-status.syncing{color:#1d4ed8;background:#eff6ff;border:1px solid #bfdbfe}@media (width<=640px){.app-header{flex-wrap:wrap;gap:6px;height:auto;min-height:52px;padding:8px 12px}.app-title{font-size:15px}.app-icon{font-size:18px}.order-summary,.urgent-badge{padding:2px 8px;font-size:11px}.header-right{gap:6px}.header-right .btn-ghost{display:none}.header-right .btn-primary{padding:6px 10px;font-size:13px}.app-nav{scrollbar-width:none;gap:0;padding:0 8px;overflow-x:auto}.app-nav::-webkit-scrollbar{display:none}.nav-tab{white-space:nowrap;gap:4px;padding:10px;font-size:12px}.app-main{padding:12px}.stats-grid{grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:16px}.stat-card{gap:10px;padding:14px}.stat-num{font-size:20px}.stat-label{font-size:11px}.order-card{padding:10px 12px}.order-card-title{flex-wrap:wrap;gap:4px}.gantt-label{width:100px!important}.gantt-label-desc{font-size:11px}.gantt-range{font-size:13px}.calendar-layout{flex-direction:column}.calendar-day-detail{width:100%}.calendar-cell{min-height:60px;padding:4px}.calendar-day-num{width:22px;height:22px;font-size:12px}.calendar-count{font-size:9px}.modal-overlay{align-items:flex-end;padding:0}.modal-box{border-radius:16px 16px 0 0;max-width:100%;max-height:95vh}.modal-header{padding:16px}.modal-body{padding:14px 16px}.modal-footer{padding:12px 16px}.form-grid-2{grid-template-columns:1fr;gap:10px}.notice-bar{padding:8px 12px;font-size:12px}.chart-row-2{grid-template-columns:1fr}.workload-wrapper h3{font-size:14px}}.filter-panel{flex-wrap:wrap;flex:1;align-items:center;gap:8px;display:flex}.filter-toggle{border:1px solid var(--border);background:var(--surface);color:var(--text2);cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:5px;padding:6px 12px;font-family:inherit;font-size:13px;transition:all .15s;display:inline-flex}.filter-toggle:hover,.filter-toggle.open{border-color:var(--primary);color:var(--primary);background:#eff6ff}.filter-badge{background:var(--primary);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:18px;height:18px;font-size:11px;font-weight:700;display:inline-flex}.filter-search-wrap{flex:1;min-width:160px;max-width:280px;position:relative}.filter-search{border:1px solid var(--border);width:100%;color:var(--text);background:var(--surface);border-radius:8px;outline:none;padding:6px 28px 6px 10px;font-family:inherit;font-size:13px;transition:border-color .15s,box-shadow .15s}.filter-search:focus{border-color:var(--primary);box-shadow:0 0 0 3px #3b82f61f}.filter-clear-btn{background:var(--border);width:18px;height:18px;color:var(--text2);cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;top:50%;right:7px;transform:translateY(-50%)}.filter-clear-btn:hover{background:var(--text3);color:#fff}.filter-reset{color:var(--danger);cursor:pointer;white-space:nowrap;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;align-items:center;gap:4px;padding:6px 10px;font-family:inherit;font-size:12px;transition:all .15s;display:inline-flex}.filter-reset:hover{background:var(--danger);color:#fff;border-color:var(--danger)}.filter-panel-body{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius);grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;width:100%;margin-top:4px;padding:14px;display:grid}.filter-group{flex-direction:column;gap:5px;display:flex}.filter-label{color:var(--text2);align-items:center;gap:6px;font-size:12px;font-weight:600;display:flex}.filter-date-field{border:1px solid var(--border);color:var(--text2);background:var(--surface);cursor:pointer;border-radius:6px;outline:none;padding:2px 6px;font-family:inherit;font-size:11px}.filter-input{border:1px solid var(--border);width:100%;color:var(--text);background:var(--surface);border-radius:8px;outline:none;padding:6px 10px;font-family:inherit;font-size:13px;transition:border-color .15s}.filter-input:focus{border-color:var(--primary)}.filter-date-row{align-items:center;gap:4px;display:flex}.filter-date-row .filter-input{flex:1;min-width:0}.filter-date-sep{color:var(--text3);flex-shrink:0;font-size:12px}.finance-filter-bar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;display:flex}.orderlist-toolbar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:14px;display:flex}.orderlist-count{color:var(--text2);white-space:nowrap;font-size:13px}.filter-tabs{flex-wrap:wrap;gap:4px;display:flex}.filter-tab{border:1px solid var(--border);background:var(--surface);color:var(--text2);cursor:pointer;border-radius:20px;padding:5px 14px;font-family:inherit;font-size:13px;transition:all .15s}.filter-tab:hover{background:var(--surface2);color:var(--text)}.filter-tab.active{background:var(--primary);color:#fff;border-color:var(--primary);font-weight:600}.orderlist-table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow-x:auto}.orderlist-table{border-collapse:collapse;width:100%;min-width:860px}.orderlist-table thead tr{background:var(--surface2);border-bottom:2px solid var(--border)}.orderlist-table th{color:var(--text2);white-space:nowrap;text-align:center;padding:10px 12px;font-size:12px;font-weight:600}.orderlist-table th.th-desc,.orderlist-table th.th-num{text-align:left}.th-sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.th-sortable:hover{color:var(--primary)}.th-sortable>span{align-items:center;gap:4px;display:inline-flex}.sort-icon-dim{color:var(--border)}.sort-icon-active{color:var(--primary)}.orderlist-row{border-bottom:1px solid var(--border);cursor:pointer;transition:background .1s}.orderlist-row:hover{background:#f0f7ff}.orderlist-row:last-child{border-bottom:none}.orderlist-row:nth-child(2n){background:#fafbfc}.orderlist-row:nth-child(2n):hover{background:#f0f7ff}.orderlist-table td{color:var(--text);vertical-align:middle;padding:9px 12px;font-size:13px}.td-num{color:var(--text2);white-space:nowrap;font-family:monospace;font-size:12px}.td-desc{text-overflow:ellipsis;white-space:nowrap;max-width:200px;overflow:hidden}.td-center{text-align:center}.td-date{white-space:nowrap;font-size:12px}.td-price{color:var(--success);font-weight:600}.td-empty{color:var(--text3)}.days-chip,.pay-chip{white-space:nowrap;border-radius:12px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.progress-chip{background:var(--surface2);color:var(--text2);white-space:nowrap;border-radius:12px;padding:2px 8px;font-size:11px;display:inline-block}.task-chip{color:#1d4ed8;white-space:nowrap;background:#eff6ff;border-radius:12px;padding:2px 8px;font-size:11px;display:inline-block}.status-chip{white-space:nowrap;border-radius:12px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.finance-stat-grid{grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px;display:grid}@media (width<=1100px){.finance-stat-grid{grid-template-columns:repeat(2,1fr)}}@media (width<=640px){.finance-stat-grid{grid-template-columns:repeat(2,1fr);gap:10px}}.stat-icon{border-radius:12px;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;display:flex}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text3)}
