:root{--bg: #f4f5f7;--surface: #ffffff;--text: #222222;--text-sub: #555555;--border: #d4d7dd;--border-strong: #b8bcc4;--accent: #2f6fb3;--accent-hover: #285f99;--danger: #b3402f;--danger-hover: #99372a;--row-alt: #f0f2f5;--row-head: #e7eaef}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:Segoe UI,Arial,sans-serif;font-size:14px;line-height:1.45}h1{font-size:20px;font-weight:600;margin:0 0 4px}h2{font-size:16px;font-weight:600;margin:0 0 12px}.app-header{background:var(--surface);border-bottom:1px solid var(--border);padding:10px 20px;display:flex;align-items:center;justify-content:space-between}.app-header .brand{font-weight:600;font-size:15px}.page{max-width:960px;margin:0 auto;padding:24px 20px}.panel{background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:20px}.login-wrap{min-height:100%;display:flex;align-items:center;justify-content:center;padding:20px}.login-box{width:100%;max-width:360px;background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:28px 24px}.login-box h1{text-align:center;margin-bottom:20px}.field{margin-bottom:14px}.field label{display:block;font-size:13px;font-weight:600;color:var(--text-sub);margin-bottom:4px}.field input{width:100%;padding:8px 10px;font-size:14px;font-family:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:3px}.field input:focus{outline:none;border-color:var(--accent)}.btn{display:inline-block;padding:9px 16px;font-size:14px;font-family:inherit;font-weight:600;color:#fff;background:var(--accent);border:1px solid var(--accent);border-radius:3px;cursor:pointer}.btn:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-block{width:100%}.btn-secondary{color:var(--text);background:var(--surface);border:1px solid var(--border-strong)}.btn-secondary:hover{background:var(--row-alt);border-color:var(--border-strong)}.btn-danger{background:var(--danger);border-color:var(--danger)}.btn-danger:hover{background:var(--danger-hover);border-color:var(--danger-hover)}.error-msg{background:#fbecea;border:1px solid #e2b3ab;color:var(--danger);padding:8px 10px;border-radius:3px;font-size:13px;margin-bottom:14px}.data-table{width:100%;border-collapse:collapse;font-size:14px}.data-table th,.data-table td{text-align:left;padding:8px 12px;border:1px solid var(--border)}.data-table th{background:var(--row-head);font-weight:600;width:200px;color:var(--text-sub)}.data-table tbody tr:nth-child(2n) td{background:var(--row-alt)}.status{display:inline-flex;align-items:center;gap:6px}.dot{width:9px;height:9px;border-radius:50%;display:inline-block}.dot-green{background:#3f9142}.dot-grey{background:#9aa0a8}.dot-amber{background:#d69a2d}.dot-purple{background:#7a5aa6}.dot-blue{background:#2f6fb3}.dot-dark{background:#55606e}.dot-red{background:var(--danger)}.dot-cyan{background:#2d8fa3}.dot-orange{background:#c96f2d}.dot-teal{background:#2d9a7a}.checkbox-label{display:inline-flex;align-items:center;gap:6px;cursor:pointer}.checkbox-label input[type=checkbox]{width:16px;height:16px}.link{color:var(--accent);text-decoration:underline}.shop-order{margin-bottom:16px}.shop-order-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:14px}.shop-order-num{font-size:22px;font-weight:700}.shop-order-title{font-size:20px}.shop-order-head .muted{font-size:16px;margin-top:4px}.shop-progress{font-size:26px;font-weight:700;color:var(--accent);white-space:nowrap}.shop-steps{display:flex;flex-wrap:wrap;gap:12px}.shop-step{display:flex;align-items:center;gap:12px;flex:1 1 180px;min-height:64px;padding:12px 16px;border:1px solid var(--border);background:#fff;font-size:20px;font-weight:600;cursor:pointer;-webkit-user-select:none;user-select:none}.shop-step input[type=checkbox]{width:32px;height:32px;flex-shrink:0;accent-color:var(--accent);cursor:pointer}.shop-step.done{background:#e8f2e9;border-color:#3f9142;color:#2c5e2e}.shop-step.readonly{cursor:default;opacity:.85}.shop-step.locked{opacity:.45;background:var(--bg)}.matrix-table .matrix-col{width:86px;text-align:center}.matrix-cell{text-align:center;font-size:16px;font-weight:700}.matrix-cell.m-done{background:#e8f2e9;color:#2c5e2e}.matrix-cell.m-current{background:#e7eef7;color:var(--accent)}.matrix-cell.m-wait{color:var(--text-dim)}.report-h2{font-size:17px;margin:22px 0 10px}.stage-cards{display:flex;flex-wrap:wrap;gap:10px}.stage-card{flex:1 1 120px;max-width:170px;background:#fff;border:1px solid var(--border);padding:10px 12px}.stage-card.empty{opacity:.55}.stage-card-count{font-size:26px;font-weight:700}.stage-card-label{font-size:13px;color:var(--text-sub);display:flex;align-items:center;gap:6px;margin-top:2px}.overdue-row .overdue-days{color:var(--danger);font-weight:700}.shop-empty{font-size:18px;padding:8px}.success-msg.shop-flash{font-size:20px;font-weight:700}.success-msg{background:#e8f2e9;border:1px solid #3f9142;color:#2c5e2e;padding:10px 14px;margin-bottom:14px;border-radius:6px}.muted{color:var(--text-sub)}.app-header-left{display:flex;align-items:center;gap:24px}.app-header-right{display:flex;align-items:center;gap:14px}.nav{display:flex;gap:4px}.nav-link{padding:6px 12px;font-size:14px;color:var(--text-sub);text-decoration:none;border-radius:3px}.nav-link:hover{background:var(--row-alt)}.nav-link.active{color:var(--text);font-weight:600;background:var(--row-head)}.user-chip{font-size:13px;color:var(--text);text-decoration:none}.user-chip:hover{text-decoration:underline}.page-wide{max-width:1180px}.page-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.toolbar{display:flex;align-items:center;gap:10px;margin-bottom:14px}.toolbar-search{flex:1;min-width:200px;padding:8px 10px;font-size:14px;font-family:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:3px}.toolbar-search:focus{outline:none;border-color:var(--accent)}.toolbar select{padding:8px 10px;font-size:14px;font-family:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:3px}.toolbar-count{font-size:13px;white-space:nowrap}.panel-table{padding:0;overflow:hidden}.grid-table{width:100%;border-collapse:collapse;font-size:14px}.grid-table thead th{text-align:left;padding:8px 12px;background:var(--row-head);border-bottom:1px solid var(--border-strong);font-weight:600;color:var(--text-sub);white-space:nowrap}.grid-table tbody td{padding:7px 12px;border-bottom:1px solid var(--border)}.grid-table tbody tr:nth-child(2n) td{background:var(--row-alt)}.grid-table .num{text-align:right;white-space:nowrap}.row-click{cursor:pointer}.row-click:hover td{background:#e9eef5!important}.empty-row{text-align:center;padding:24px 12px!important}.panel-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.form-narrow{max-width:640px}.card-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.field-row{display:flex;gap:16px}.field-row .field{flex:1}.form-actions{display:flex;gap:10px;margin-top:8px}.subform{border-top:1px solid var(--border);margin-top:16px;padding-top:16px}.status-change{display:flex;align-items:center;gap:10px}.status-change select{padding:8px 10px;font-size:14px;font-family:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:3px}.field textarea,.field select{width:100%;padding:8px 10px;font-size:14px;font-family:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:3px}.field textarea:focus,.field select:focus{outline:none;border-color:var(--accent)}.panel-estimate{margin-top:20px}.btn-sm{padding:2px 8px;font-size:13px;line-height:1.4}.row-actions{display:flex;gap:6px;white-space:nowrap}.estimate-add{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.estimate-add select,.estimate-add input{padding:6px 8px;border:1px solid var(--border-strong);border-radius:2px;font-size:14px;font-family:inherit}.estimate-add .estimate-name{flex:1 1 220px}.estimate-add .estimate-unit{width:80px}.estimate-add .estimate-qty,.estimate-add .estimate-price{width:100px;text-align:right}.estimate-add select:focus,.estimate-add input:focus{outline:none;border-color:var(--accent)}.estimate-actions{display:flex;align-items:center;gap:12px;margin-top:14px}
